Mascaramento de dados e geração com Faker

Privacidade de Dados e Anonimização em Python

Rebeca Gonzalez

Data engineer

Quase-identificadores

Informações pessoais não sensíveis também podem ser quase-identificadores. Texto dizendo "Chefe de governo na Europa" e uma data de nascimento, com linhas apontando para o rosto de Angela Merkel

1 Foto de Angela Merkel da Wikimedia Commons
Privacidade de Dados e Anonimização em Python

Quase-identificadores

Quando combinados com outros quase-identificadores, passam a identificar.

  • Idade
  • Gênero
  • Ocupação
  • Datas pessoais: nascimento, óbito, internação, visita etc.

Desenho de um homem e pop-ups ao redor com o que parecem ser informações pessoais

Privacidade de Dados e Anonimização em Python

Quase-identificadores e ataques de reidentificação

Diagrama mostrando a interseção de dois conjuntos de dados: dados médicos e lista de eleitores; a interseção é CEP, data de nascimento e gênero

Privacidade de Dados e Anonimização em Python

Mais técnicas de anonimização

Técnicas de anonimização para quase-identificadores, reduzindo riscos de divulgação. Duas tabelas com dados médicos e pessoais. À esquerda os dados originais e à direita o conjunto resultante com o atributo nome suprimido

Privacidade de Dados e Anonimização em Python

Mascaramento de dados

DataFrame original

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

DataFrame com nomes mascarados

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

Substituir valores sensíveis por outros caracteres, como "x", é conhecido como mascaramento de dados.

Privacidade de Dados e Anonimização em Python

Mascaramento de dados

# Explore o 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]
Privacidade de Dados e Anonimização em Python

Mascaramento de dados

# Mascarar uniformemente a coluna de número do cartão
df['card_number'] = '****'


# Ver o DataFrame resultante 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]
Privacidade de Dados e Anonimização em Python

Mascaramento parcial de dados

Captura da seção de redefinição de senha do Facebook, mostrando e-mail parcialmente mascarado

Privacidade de Dados e Anonimização em Python

Mascaramento parcial de dados

# Mascarar o nome de usuário do e-mail
df2['email'] = df2['email'].apply(lambda s: s[0] + '****' + s[s.find('@'):] )


# Ver os dados pseudonimizados resultantes 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
Privacidade de Dados e Anonimização em Python

Gerando dados sintéticos

À esquerda, uma tabela com os dados originais incluindo números de cartão; à direita, novos números de cartão gerados sinteticamente.

  • Substituir informações sensíveis por dados novos, semelhantes aos originais.
Privacidade de Dados e Anonimização em Python

Gerando dados sintéticos

# Importar a classe Faker
from faker import Faker


# Criar gerador de dados falsos fake_data = Faker()
# Gerar um número de cartão de crédito fake_data.credit_card_number()
3542216874440804
Privacidade de Dados e Anonimização em Python

Gerando dados sintéticos

# Mascarar o número do cartão com novos dados gerados usando uma função lambda
df['card_number'] = df['card_number'].apply(lambda x: fake_data.credit_card_number())

# Ver os dados pseudonimizados resultantes 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]
Privacidade de Dados e Anonimização em Python

Gerando outros tipos de dados

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Privacidade de Dados e Anonimização em Python

Vamos praticar!

Privacidade de Dados e Anonimização em Python

Preparing Video For Download...