День 1156. #ЗаметкиНаПолях
Тип .NET для Персональных Данных. Окончание
Начало
Проверим PiiString на соответствие требованиям.
1. Шифрование или анонимизация PII
Значение PiiString может быть преобразовано в зависимости от используемой логики кодирования.
public interface IPiiEncoder
{
string ToSystemString(PiiString pii);
PiiString ToPiiString(string str);
}
PiiString как обычный текст:
public class PiiAsPlainText : IPiiEncoder
{
public string ToSystemString(PiiString pii)
=> pii.ToString();
public PiiString ToPiiString(string str)
=> new PiiString(str);
}
Анонимизированная PiiString через хэш SHA256:
public class PiiAsSha256 : IPiiEncoder
{
public string ToSystemString(PiiString pii)
{
var data = Encoding.UTF8.GetBytes(pii.ToString());
using var sha = SHA256.Create();
var hash = sha.ComputeHash(data);
return Convert.ToBase64String(hash);
}
public PiiString ToPiiString(string str)
=> throw new NotSupportedException();
}
PiiString в Entity Framework Core
public class PiiConverter
: ValueConverter<PiiString, string>
{
public PiiConverter(IPiiEncoder encoder)
: base(
v => encoder.ToSystemString(v),
v => encoder.ToPiiString(v))
{}
}
2. Соглашение об обработке данных с третьими лицами
Обычно это сводится к тому, чтобы найти все места в исходном коде, где используется PII, а затем обработать эту информацию для юристов. В Visual Studio есть команда Find All References (Найти все ссылки), которая должна упростить задачу.
Также можно рассмотреть возможность включения примеров использования специальной логики для полей PiiString в тесты, что послужило бы своеобразной документацей об использовании.
Итого
PiiString явно берёт на себя управление PII. Гораздо лучше, чем простые строки. Эта реализация не идеальна, например, кажется странным использовать PiiString для даты рождения или пола. Альтернативным способом является использование атрибута, но имейте в виду, что это подразумевает рефлексию, генераторы кода или нечто подобное, что чрезмерно усложнить реализацию.
Полный код классов с примерами шифрования Aes128, использования в System.Text.Json, Newtonsoft.Json, Nlog, Serilog и EFCore здесь.
Источник: gaevoy.com/2022/03…pes.html