Mascheramento dei dati e generazione con Faker

Riservatezza dei dati e anonimizzazione in Python

Rebeca Gonzalez

Data engineer

Quasi‑identificatori

Anche le informazioni personali non sensibili possono essere quasi‑identificatori. Testo "Capo di governo in Europa" e una data di nascita, con linee che puntano al volto di Angela Merkel

1 Foto di Angela Merkel da Wikimedia Commons
Riservatezza dei dati e anonimizzazione in Python

Quasi‑identificatori

Se combinati con altri quasi‑identificatori, diventano identificativi.

  • Età
  • Genere
  • Occupazione
  • Date personali: nascita, morte, ricovero, visita, ecc.

Disegno di un uomo con popup attorno con quelle che sembrano info personali

Riservatezza dei dati e anonimizzazione in Python

Quasi‑identificatori e attacchi di re‑identificazione

Diagramma che mostra l'intersezione di due dataset: dati medici e liste elettorali; l'intersezione è CAP, data di nascita e genere

Riservatezza dei dati e anonimizzazione in Python

Altre tecniche di anonimizzazione

Tecniche di anonimizzazione per quasi‑identificatori per ridurre il rischio di divulgazione. Due tabelle con dati medici e personali. A sinistra i dati originali, a destra il dataset risultante con l'attributo nome soppresso

Riservatezza dei dati e anonimizzazione in Python

Mascheramento dei dati

DataFrame originale

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

DataFrame con nomi mascherati

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

Sostituire valori sensibili con caratteri come "x" si chiama anche data masking (mascheramento).

Riservatezza dei dati e anonimizzazione in Python

Mascheramento dei dati

# Esplora il 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]
Riservatezza dei dati e anonimizzazione in Python

Mascheramento dei dati

# Maschera in modo uniforme la colonna del numero di carta
df['card_number'] = '****'


# Vedi il DataFrame risultante 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]
Riservatezza dei dati e anonimizzazione in Python

Mascheramento parziale dei dati

Schermata della pagina di reimpostazione password di Facebook, con email parzialmente mascherata

Riservatezza dei dati e anonimizzazione in Python

Mascheramento parziale dei dati

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


# Vedi i dati pseudonimizzati risultanti 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
Riservatezza dei dati e anonimizzazione in Python

Generare dati sintetici

A sinistra, una tabella con i dati originali inclusi i numeri di carta; a destra, nuovi numeri di carta generati sinteticamente.

  • Sostituisci info sensibili con dati nuovi, simili agli originali.
Riservatezza dei dati e anonimizzazione in Python

Generare dati sintetici

# Importa la classe Faker
from faker import Faker


# Crea un generatore di dati finti fake_data = Faker()
# Genera un numero di carta di credito fake_data.credit_card_number()
3542216874440804
Riservatezza dei dati e anonimizzazione in Python

Generare dati sintetici

# Maschera il numero di carta con nuovi dati generati via lambda
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# Vedi i dati pseudonimizzati risultanti 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]
Riservatezza dei dati e anonimizzazione in Python

Generare altri tipi di dati

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Riservatezza dei dati e anonimizzazione in Python

Passiamo alla pratica!

Riservatezza dei dati e anonimizzazione in Python

Preparing Video For Download...