Datamasking en datageneratie met Faker

Dataprivacy en anonimisering in Python

Rebeca Gonzalez

Data engineer

Quasi-identificatoren

Niet-gevoelige, persoonsidentificeerbare info kan ook quasi-identificatoren zijn. Tekst met "Regeringsleider in Europa" en een geboortedatum, met lijnen naar het gezicht van Angela Merkel

1 Foto van Angela Merkel via Wikimedia Commons
Dataprivacy en anonimisering in Python

Quasi-identificatoren

Gecombineerd met andere quasi-identificatoren worden ze identificerend.

  • Leeftijd
  • Geslacht
  • Beroep
  • Persoonlijke data: geboorte, overlijden, ziekenhuisopname, bezoek, enz.

Tekening van een man met pop-ups eromheen met ogenschijnlijk persoonlijke info

Dataprivacy en anonimisering in Python

Quasi-identificatoren en heridentificatie-aanvallen

Diagram met de overlap van twee datasets: medische data en kiezerslijst; de overlap is postcode, geboortedatum en geslacht

Dataprivacy en anonimisering in Python

Meer anonimiseringstechnieken

Anonimiseringstechnieken voor quasi-identificatoren om datarisico te verlagen. Twee tabellen met medische en persoonlijke data. Links de originele data, rechts het resultaat met het attribuut naam onderdrukt

Dataprivacy en anonimisering in Python

Datamasking

Originele DataFrame

     name                phone
0    Cassandra Nelson    4399406975395
1    Brian Moss          0389407128613
2    Melody Gill         8283308773967
3    Sandra Huber        4366608954250
4    Patricia Webster    4466462475574

DataFrame met gemaskeerde namen

     name    phone
0    xxxx    4399406975395
1    xxxx    0389407128613
2    xxxx    8283308773967
3    xxxx    4366608954250
4    xxxx    4466462475574

Gevoelige waarden vervangen door tekens zoals "x" heet datamasking.

Dataprivacy en anonimisering in Python

Datamasking

# Explore the DataFrame
df.head()
     country         card_number           email
0    Finland         3546746666030419      [email protected]
1    Belarus         4303032415762821      [email protected]
2    Turkmenistan    4536883671157         [email protected]
3    Puerto Rico     3568819286614160      [email protected]
4    Angola          2514167462583016      [email protected]
Dataprivacy en anonimisering in Python

Datamasking

# Uniformly mask the card number colum 
df['card_number'] = '****'


# See resulting DataFrame df.head()
     country         card_number     email
0    Finland         ****            [email protected]
1    Belarus         ****            [email protected]
2    Turkmenistan    ****            [email protected]
3    Puerto Rico     ****            [email protected]
4    Angola          ****            [email protected]
Dataprivacy en anonimisering in Python

Gedeeltelijke datamasking

Schermafbeelding van de Facebook-pagina voor wachtwoord resetten, met e-mail deels gemaskeerd

Dataprivacy en anonimisering in Python

Gedeeltelijke datamasking

# Mask username from email
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# See the resulting pseudonymized data df2.head()
     country         card_number           email
0    Finland         3546746666030419      f****@gmail.com
1    Belarus         4303032415762821      m****@gmail.com
2    Turkmenistan    4536883671157         a****@gmail.com
3    Puerto Rico     3568819286614160      k****@gmail.com
4    Angola          2514167462583016      d****@gmail.com
Dataprivacy en anonimisering in Python

Synthetische data genereren

Links een tabel met de originele data met kaartnummers, rechts synthetisch gegenereerde nieuwe creditcardnummers.

  • Gevoelige info vervangen door nieuw, op het origineel lijkend, gegenereerd data.
Dataprivacy en anonimisering in Python

Synthetische data genereren

# Import Faker class
from faker import Faker


# Create fake data generator fake_data = Faker()
# Generate a credit card number fake_data.credit_card_number()
3542216874440804
Dataprivacy en anonimisering in Python

Synthetische data genereren

# Mask card number with new generated data using a lambda function
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# See the resulting pseudonymized data df.head()
     country         card_number            email
0    Finland         3596625386355448       [email protected]
1    Belarus         376297265347524        [email protected]
2    Turkmenistan    4377494880888682       [email protected]
3    Puerto Rico     30553931809810         [email protected]
4    Angola          4241735748382          [email protected]
Dataprivacy en anonimisering in Python

Andere datatypen genereren

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Dataprivacy en anonimisering in Python

Laten we oefenen!

Dataprivacy en anonimisering in Python

Preparing Video For Download...