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

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

Обезличивание нужно, когда данные хочется использовать для тестов, аналитики или исследований, а идентифицировать людей не нужно. Закон отдельно упоминает его как альтернативу уничтожению и как условие для обработки в статистических и исследовательских целях. Но обезличенные данные не всегда становятся безопасными: если человека можно вычислить по сочетанию признаков или по ключу, обработка остаётся обработкой персональных данных. Ниже определение, методы, ограничения и скрипт, который заменяет идентификаторы псевдонимами и обобщает даты.

Оговорка. Статья не юридическая консультация. Определение и принципы сверены по тексту статей 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

Ограничения скрипта: он обрабатывает только перечисленные колонки; сочетание города, десятилетия и суммы может выделять человека в малой выборке, поэтому для публикации или передачи третьим лицам оценивайте риск повторной идентификации и при необходимости обобщайте сильнее или объединяйте редкие значения. Результат работы — псевдонимизированные данные: до проверки считайте их персональными.

Как оценить риск повторной идентификации

  1. Перечислите оставшиеся поля и подумайте, какие сочетания встречаются у единиц людей (редкий город, возраст, профессия).
  2. Посчитайте, сколько записей имеют одинаковые значения ключевых полей: если группа из одной–двух записей, человека легко выделить. Принцип k-анонимности: в каждой группе не меньше k записей (для небольших выборок k не менее 5–10).
  3. Подумайте, какие внешние данные есть у получателя: открытые источники, другие выгрузки.
  4. Закрепите правила доступа и запрет попыток идентификации в договоре.

Шаги внедрения

  1. Определите, для чего нужно обезличивание и какие поля действительно необходимы получателю.
  2. Выберите методы по таблице, определите, достаточна ли псевдонимизация или нужна анонимизация.
  3. Автоматизируйте процесс скриптом или процедурой, чтобы выгрузки не готовились вручную.
  4. Храните ключи и таблицы соответствия отдельно с ограниченным доступом.
  5. Опишите процесс в политике и локальном акте, назначьте ответственного.
  6. Периодически проверяйте риск повторной идентификации и пересматривайте методы.

Диагностика

Симптом Причина и что делать
«Обезличенную» базу удалось сопоставить с реальными людьми Остались косвенные признаки или есть доступ к ключу. Обобщите данные сильнее, объедините редкие значения, ограничьте доступ
Разработчики просят реальные данные «для достоверности» Предложите синтетические данные или псевдонимизированную копию без контактов
Ключ хранится рядом с данными Обезличивание фиктивное. Перенесите ключ в менеджер секретов с ограниченным доступом
После обезличивания пропала функциональность аналитики Слишком грубое обобщение. Определите минимально необходимую точность и пересмотрите методы

Где это в моделях

Материал продолжает раздел «Регуляторика ПДн» и относится к направлению «Безопасность данных» (материалы направления, самопроверка оператора ПДн, карта зрелости). Для уровня 2 по данным важны тестовые среды без реальных персональных данных: обезличивание — один из способов этого добиться: классификация данных.

Как проверить

  1. Для каждой выгрузки в тесты и аналитику определено, какие поля нужны и какие методы обезличивания применены.
  2. Ключи и таблицы соответствия хранятся отдельно с ограниченным доступом.
  3. Оценка риска повторной идентификации проведена, результат записан.
  4. Процесс обезличивания описан, выполняется автоматически или по процедуре, выгрузки без обезличивания запрещены.

Источники

  • Федеральный закон от 27.07.2006 № 152-ФЗ «О персональных данных», статьи 3, 5, 6: КонсультантПлюс, Гарант. Проверяйте действующую редакцию.
  • Требования и методы обезличивания, утверждённые Роскомнадзором: текст ищите на сайте Роскомнадзора и на официальном портале правовой информации, проверяя актуальность.
  • NIST IR 8053, De-Identification of Personal Information: csrc.nist.gov. Международная практика, не российский норматив.

Оставьте свой ответ