Маскирование и генерация данных с помощью Faker

Конфиденциальность данных и анонимизация в Python

Rebeca Gonzalez

Data engineer

Квазиидентификаторы

Нечувствительные персональные данные тоже могут быть квазиидентификаторами. Текст «Глава правительства в Европе» с датой рождения и стрелками, указывающими на лицо Ангелы Меркель

1 Фото Ангелы Меркель из Wikimedia Commons
Конфиденциальность данных и анонимизация в Python

Квазиидентификаторы

В сочетании с другими квазиидентификаторами они позволяют установить личность.

  • Возраст
  • Пол
  • Профессия
  • Личные даты: рождения, смерти, госпитализации, визита и др.

Изображение человека с всплывающими окнами, содержащими персональные данные

Конфиденциальность данных и анонимизация в Python

Квазиидентификаторы и атаки повторной идентификации

Диаграмма, показывающая пересечение двух наборов данных: медицинских данных и списка избирателей; пересечение — почтовый индекс, дата рождения и пол

Конфиденциальность данных и анонимизация в Python

Дополнительные методы анонимизации

Методы анонимизации квазиидентификаторов для снижения риска раскрытия данных. Две таблицы с медицинскими и личными данными: слева — исходные данные, справа — результирующий набор данных с подавленным атрибутом имени

Конфиденциальность данных и анонимизация в Python

Маскирование данных

Исходный DataFrame

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

DataFrame с замаскированными именами

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

Замена чувствительных значений символами вроде «x» называется маскированием данных.

Конфиденциальность данных и анонимизация в Python

Маскирование данных

# 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]
Конфиденциальность данных и анонимизация в Python

Маскирование данных

# 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]
Конфиденциальность данных и анонимизация в Python

Частичное маскирование данных

Скриншот страницы сброса пароля в Facebook с частично замаскированным адресом электронной почты

Конфиденциальность данных и анонимизация в Python

Частичное маскирование данных

# 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
Конфиденциальность данных и анонимизация в Python

Генерация синтетических данных

Слева — таблица с исходными данными, включая номера карт; справа — синтетически сгенерированные новые номера кредитных карт.

  • Замена чувствительной информации новыми сгенерированными данными, схожими с исходными.
Конфиденциальность данных и анонимизация в Python

Генерация синтетических данных

# 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
Конфиденциальность данных и анонимизация в Python

Генерация синтетических данных

# 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]
Конфиденциальность данных и анонимизация в Python

Генерация данных других типов

fake_data.name()
'Kelly Clark'
fake_data.name_male()
'Antonio Henderson'
fake_data.name_female()
'Jennifer Ortega'
Конфиденциальность данных и анонимизация в Python

Давайте потренируемся!

Конфиденциальность данных и анонимизация в Python

Preparing Video For Download...