SecureString
зашифрован в .NET 5+ и в .NET Core, работающем в Windows.
Из документация по .NET 5< /а>:
В операционной системе Windows содержимое внутреннего массива символов экземпляра SecureString
зашифровано.
Однако эту страницу лучше всего читать целиком.
То же предложение находится в Документация по .NET Core, как для .NET Core 3.0, так и для 2.0.
Microsoft рекомендует хранить секреты за пределами процесса и использовать непрозрачные дескрипторы для доступа к ним, что предпочтительнее использования SecureString
. Другими словами, основной смысл использования SecureString
заключается в закреплении и максимально короткой продолжительности хранения секрета в памяти процесса в любой форме, а не в шифровании. Короткая продолжительность живого хранения, конечно же, является обязанностью разработчика, а не самой SecureString
.
Некоторые случаи использования, когда шифрование SecureString
может обеспечить полезную глубокую защиту, — это когда секрет поступает небольшими порциями, относительно быстро (например, во время ввода пароля с клавиатуры) и когда можно быстро использовать SecureString
(например, re-protected и хранится где-то еще) и удаляется сразу после получения последнего бита секрета. Напротив, копирование ранее существовавшего String
в SecureString
в цикле всегда довольно бессмысленно: вы все равно собираетесь очень скоро избавиться от SecureString
, а секрет уже перенесен в незакрепленную управляемую память, поэтому его копии в виде простого текста могут жить в процессе навсегда, даже после того, как вы избавитесь от файла SecureString
.
person
Jirka Hanika
schedule
03.06.2021