Maskování dat a generování dat pomocí Faker

Ochrana soukromí a anonymizace dat v Pythonu

Rebeca Gonzalez

Data engineer

Kvazi-identifikátory

Necitlivé osobní údaje mohou být také kvazi-identifikátory. Text „Předsedkyně vlády v Evropě" a datum narození spolu se šipkami ukazujícími na tvář Angely Merkelové

1 Fotografie Angely Merkelové z Wikimedia Commons
Ochrana soukromí a anonymizace dat v Pythonu

Kvazi-identifikátory

V kombinaci s dalšími kvazi-identifikátory se stávají identifikujícími.

  • Věk
  • Pohlaví
  • Povolání
  • Osobní data: narození, úmrtí, přijetí do zdravotní péče, návštěva atd.

Kresba muže s vyskakovacími okny zobrazujícími osobní údaje

Ochrana soukromí a anonymizace dat v Pythonu

Kvazi-identifikátory a útoky na re-identifikaci

Diagram znázorňující průnik dvou datových sad: zdravotních dat a voličského seznamu, přičemž průnikem jsou PSČ, datum narození a pohlaví

Ochrana soukromí a anonymizace dat v Pythonu

Další techniky anonymizace

Techniky anonymizace kvazi-identifikátorů ke snížení rizika úniku dat. Dvě tabulky se zdravotními a osobními daty. Vlevo původní data, vpravo výsledná datová sada s potlačeným atributem jména

Ochrana soukromí a anonymizace dat v Pythonu

Maskování dat

Původní DataFrame

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

DataFrame s maskovanými jmény

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

Nahrazení citlivých hodnot znaky jako „x" se nazývá maskování dat.

Ochrana soukromí a anonymizace dat v Pythonu

Maskování dat

# 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]
Ochrana soukromí a anonymizace dat v Pythonu

Maskování dat

# 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]
Ochrana soukromí a anonymizace dat v Pythonu

Částečné maskování dat

Snímek obrazovky sekce pro obnovení hesla na Facebooku s částečně maskovaným e-mailem

Ochrana soukromí a anonymizace dat v Pythonu

Částečné maskování dat

# 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
Ochrana soukromí a anonymizace dat v Pythonu

Generování syntetických dat

Vlevo tabulka s původními daty včetně čísel karet, vpravo synteticky vygenerovaná nová čísla kreditních karet.

  • Nahrazení citlivých údajů nově vygenerovanými daty podobnými originálu.
Ochrana soukromí a anonymizace dat v Pythonu

Generování syntetických dat

# 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
Ochrana soukromí a anonymizace dat v Pythonu

Generování syntetických dat

# 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]
Ochrana soukromí a anonymizace dat v Pythonu

Generování dalších typů dat

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Ochrana soukromí a anonymizace dat v Pythonu

Čas na procvičení!

Ochrana soukromí a anonymizace dat v Pythonu

Preparing Video For Download...