Обезличивание персональных данных: методы, ограничения и скрипт

Обезличивание нужно, когда данные хочется использовать для тестов, аналитики или исследований, а идентифицировать людей не нужно. Закон отдельно упоминает его как альтернативу уничтожению и как условие для обработки в статистических и исследовательских целях. Но обезличенные данные не всегда становятся безопасными: если человека можно вычислить по сочетанию признаков или по ключу, обработка остаётся обработкой персональных данных. Ниже определение, методы, ограничения и скрипт, который заменяет идентификаторы псевдонимами и обобщает даты.
Оговорка. Статья не юридическая консультация. Определение и принципы сверены по тексту статей 3 (пункт 9) и 5 (часть 7) 152-ФЗ (база «Гарант»); закон меняется, проверяйте действующую редакцию: 152-ФЗ. Для обезличивания Роскомнадзор устанавливает требования и методы отдельным актом; реквизиты и актуальность акта проверьте на сайте Роскомнадзора. Обработка в статистических и исследовательских целях и в рамках экспериментальных режимов имеет собственные условия в части 1 статьи 6 и здесь не разбирается. Скрипт и методы — инженерная практика, а не заключение о соответствии закону.
Что такое обезличивание
По закону обезличивание — это действия, в результате которых становится невозможным без использования дополнительной информации определить принадлежность персональных данных конкретному субъекту. Ключевые слова — «без использования дополнительной информации». Если у вас или у третьего лица есть таблица соответствия, ключ или другая база, по которой человека можно найти, данные остаются связанными с конкретным человеком.
| Подход | Суть | Статус |
|---|---|---|
| Псевдонимизация | Идентификаторы заменяются псевдонимами; у владельца есть ключ или таблица соответствия | Снижает риск, но данные могут быть привязаны к человеку при использовании ключа; обращайтесь как с данными повышенного риска |
| Анонимизация | Прямые и косвенные идентификаторы удалены или обобщены так, что связь с человеком восстановить нельзя даже владельцу | Данные, как правило, перестают быть персональными, если повторная идентификация действительно невозможна |
Практическая проверка: может ли кто-либо, обладающий разумными ресурсами и доступом к другим сведениям, определить, чьи это данные? Если да, обезличивание неполное.
Когда обезличивание нужно
- Тестовые среды и разработка. Реальные данные в тестах — частая причина утечек: разработка с ПДн.
- Аналитика и отчёты. Для статистики не нужны ФИО и контакты.
- Окончание цели обработки. Закон допускает не только уничтожить данные, но и обезличить их, когда цель достигнута или необходимость утрачена, если иное не предусмотрено законом (часть 7 статьи 5): уничтожение ПДн.
- Передача партнёрам и подрядчикам для задач, не требующих идентификации: поручение обработки.
Методы
| Метод | Как работает | Пример |
|---|---|---|
| Удаление идентификаторов | Убираются поля, прямо указывающие на человека | ФИО, телефон, адрес, паспорт не переносятся в выгрузку |
| Замена псевдонимами | Идентификатор заменяется значением, которое нельзя обратно восстановить без ключа | HMAC от идентификатора клиента с ключом, хранимым отдельно |
| Обобщение (укрупнение) | Точные значения заменяются диапазонами | Дата рождения заменяется десятилетием, адрес — регионом, сумма — интервалом |
| Перемешивание | Значения столбца переставляются между записями | Города переставляются случайно, статистика сохраняется, привязка к человеку нет |
| Маскирование | Часть значения скрывается | Телефон +7900***4567 (для отображения, не для анонимизации) |
| Добавление шума | К числовым данным добавляется небольшое случайное отклонение | Сумма заказа ± 5% для аналитики без привязки к точным значениям |
| Синтетические данные | Данные генерируются по характеристикам реальных, но не относятся к конкретным людям | Тестовая база для разработки |
Сочетайте методы: одной замены идентификатора мало, если остаются косвенные признаки (редкая профессия, дата рождения и почтовый индекс вместе могут указать на человека).
Скрипт: псевдонимизация и обобщение CSV
Скрипт берёт CSV с колонками id,fio,birth_date,phone,city,amount, заменяет id псевдонимом (HMAC-SHA256, ключ из переменной окружения), заменяет дату рождения десятилетием, не переносит ФИО и телефон. Одинаковый id получает одинаковый псевдоним, поэтому аналитика по клиентам сохраняется. Ключ храните отдельно от данных (например, в менеджере секретов): тот, у кого есть ключ и список идентификаторов, сможет восстановить связь.
#!/usr/bin/env python3
"""Готовит CSV для тестов и аналитики: заменяет идентификаторы псевдонимами, обобщает даты и убирает прямые контакты.
Колонки входного файла: id,fio,birth_date,phone,city,amount (birth_date в формате ГГГГ-ММ-ДД)
Ключ берётся из переменной окружения PSEUDO_KEY и хранится отдельно от данных: у кого есть ключ, тот может сопоставить псевдонимы.
Запуск: PSEUDO_KEY=СЕКРЕТ python3 pseudonymize.py in.csv out.csv"""
import csv
import hashlib
import hmac
import os
import sys
def pseudo(key, value):
return hmac.new(key, value.encode('utf-8'), hashlib.sha256).hexdigest()[:16]
def decade(birth):
year = int(birth[:4])
start = year - year % 10
return f'{start}-{start + 9}'
def main(src, dst):
key = os.environ.get('PSEUDO_KEY', '').encode('utf-8')
if len(key) < 16:
sys.exit('Задайте PSEUDO_KEY длиной не менее 16 символов (храните отдельно от данных)')
with open(src, newline='', encoding='utf-8') as f, open(dst, 'w', newline='', encoding='utf-8') as g:
reader = csv.DictReader(f)
out = csv.DictWriter(g, fieldnames=['person', 'birth_decade', 'city', 'amount'])
out.writeheader()
for row in reader:
out.writerow({
'person': pseudo(key, row['id']), # одинаковый id всегда даёт один псевдоним
'birth_decade': decade(row['birth_date']),
'city': row['city'],
'amount': row['amount'],
}) # fio и phone не переносятся вовсе
if __name__ == '__main__':
if len(sys.argv) != 3:
sys.exit('Использование: pseudonymize.py in.csv out.csv')
main(sys.argv[1], sys.argv[2])
PSEUDO_KEY=ДЛИННЫЙ_СЕКРЕТНЫЙ_КЛЮЧ python3 pseudonymize.py clients.csv clients_pseudo.csv
Пример на учебных данных (в выводе нет ФИО и телефона, повторный id получил тот же псевдоним):
person,birth_decade,city,amount
33e7d6f4e3b8ef5f,1980-1989,Москва,1500
29f3e1350844eb3b,1990-1999,Казань,900
33e7d6f4e3b8ef5f,1980-1989,Москва,200
Ограничения скрипта: он обрабатывает только перечисленные колонки; сочетание города, десятилетия и суммы может выделять человека в малой выборке, поэтому для публикации или передачи третьим лицам оценивайте риск повторной идентификации и при необходимости обобщайте сильнее или объединяйте редкие значения. Результат работы — псевдонимизированные данные: до проверки считайте их персональными.
Как оценить риск повторной идентификации
- Перечислите оставшиеся поля и подумайте, какие сочетания встречаются у единиц людей (редкий город, возраст, профессия).
- Посчитайте, сколько записей имеют одинаковые значения ключевых полей: если группа из одной–двух записей, человека легко выделить. Принцип k-анонимности: в каждой группе не меньше k записей (для небольших выборок k не менее 5–10).
- Подумайте, какие внешние данные есть у получателя: открытые источники, другие выгрузки.
- Закрепите правила доступа и запрет попыток идентификации в договоре.
Шаги внедрения
- Определите, для чего нужно обезличивание и какие поля действительно необходимы получателю.
- Выберите методы по таблице, определите, достаточна ли псевдонимизация или нужна анонимизация.
- Автоматизируйте процесс скриптом или процедурой, чтобы выгрузки не готовились вручную.
- Храните ключи и таблицы соответствия отдельно с ограниченным доступом.
- Опишите процесс в политике и локальном акте, назначьте ответственного.
- Периодически проверяйте риск повторной идентификации и пересматривайте методы.
Диагностика
| Симптом | Причина и что делать |
|---|---|
| «Обезличенную» базу удалось сопоставить с реальными людьми | Остались косвенные признаки или есть доступ к ключу. Обобщите данные сильнее, объедините редкие значения, ограничьте доступ |
| Разработчики просят реальные данные «для достоверности» | Предложите синтетические данные или псевдонимизированную копию без контактов |
| Ключ хранится рядом с данными | Обезличивание фиктивное. Перенесите ключ в менеджер секретов с ограниченным доступом |
| После обезличивания пропала функциональность аналитики | Слишком грубое обобщение. Определите минимально необходимую точность и пересмотрите методы |
Где это в моделях
Материал продолжает раздел «Регуляторика ПДн» и относится к направлению «Безопасность данных» (материалы направления, самопроверка оператора ПДн, карта зрелости). Для уровня 2 по данным важны тестовые среды без реальных персональных данных: обезличивание — один из способов этого добиться: классификация данных.
Как проверить
- Для каждой выгрузки в тесты и аналитику определено, какие поля нужны и какие методы обезличивания применены.
- Ключи и таблицы соответствия хранятся отдельно с ограниченным доступом.
- Оценка риска повторной идентификации проведена, результат записан.
- Процесс обезличивания описан, выполняется автоматически или по процедуре, выгрузки без обезличивания запрещены.
Источники
- Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных», статьи 3, 5, 6: КонсультантПлюс, Гарант. Проверяйте действующую редакцию.
- Требования и методы обезличивания, утверждённые Роскомнадзором: текст ищите на сайте Роскомнадзора и на официальном портале правовой информации, проверяя актуальность.
- NIST IR 8053, De-Identification of Personal Information: csrc.nist.gov. Международная практика, не российский норматив.






















