Тип .NET для Персональных Данных. Начало
Персональные данные (Personally identifiable information - PII) — это любая информация, относящаяся к идентифицированному или идентифицируемому физическому лицу (т.е. позволяющая идентифицировать лицо прямо или косвенно, в частности, через имя, идентификационный номер, email, дату рождения, данные о местоположении и т.п.).
Проблема
Согласно законодательству многих стран, вы должны обращаться с PII особым образом. Например:
1. Шифровать или анонимизировать везде, где это возможно.
Для этого данные PII должны отображаться по-разному в зависимости от варианта использования. Например:
- обычный текст в UI;
- псевдоним в логах;
- зашифрованы в файле экспорта CSV.
2. Подписать соглашение об обработке данных с любыми третьими лицами, которые обрабатывают PII от вашего имени.
Здесь нужно быть готовым к многочисленным вопросам от юристов, чтобы выяснить, где и почему используется PII.
3. Возможность для ваших клиентов запросить удаление их личных данных, либо получить копию своих личных данных в формате, который можно легко передать другой компании.
Нужно уметь выяснять, какие именно данные нужно удалить и экспортировать, а затем выполнить это.
На первый взгляд очевидно использование
string для PII:public class UserОднако не очевидно, как шифровать/анонимизировать эти значения в каждом конкретном случае. Кроме того, идентификация таких полей в исходном коде по запросу юристов компании может быть сложной задачей.
{
public Guid Id { get; set; }
public string Name { get; set; }
public string Email { get; set; }
public string Location { get; set; }
}
Решение
Ввести явный тип, например,
PiiString. Он должен быть как можно более взаимозаменяемым со string, чтобы упростить рефакторинг существующего кода, использующего string. В приложении он должен вести себя как обычная строка, однако вне приложения, он должен быть закодирован/зашифрован/хеширован. Заметьте, что ниже приведена упрощённая версия класса. Полная тут:
public class PiiStringОкончание следует…
{
private readonly string _string;
public PiiString(string str)
=> _string = str ??
throw new ArgumentNullException(nameof(str));
public override string ToString()
=> _string;
}
Источник: https://gaevoy.com/2022/03/18/personally-identifiable-information-data-types.html