Использование безопасной строки и ее сохранение
Таким образом.NET Framework предоставляет класс SecureString для безопасного хранения строк. Но чтобы прочитать информацию и поработать с ней, вы должны вернуть ее в стандартную строку. Посмотрите этот пример реализации.
Как видно из примера с использованием указателя, мы возвращаем незашифрованную строку. Как нам теперь управлять этим "небезопасным" экземпляром строки? Каков наиболее безопасный способ работы со значением после его установки?
редактировать
Цель этого вопроса состояла в том, чтобы обсудить методы, чтобы УМЕНЬШИТЬ площадь поверхности потенциальной атаки при использовании SecureStrings и затем работать со значениями. Не "почему" относительно "дубликата" ссылки.
1 ответ
При размещении содержимого SecureString
обратно в String
, вы вновь представляете проблемы использования строк, перечисленных здесь:
http://blogs.msdn.com/shawnfa/archive/2004/05/27/143254.aspx
С SecureString
Существуют опции, которые позволяют маршалировать содержимое в неуправляемую память, чтобы вы могли получить доступ к данным, а затем утилизировать данные, когда закончите с ними.
Эти параметры у вас просто нет в управляемом коде. Работая с неуправляемыми байтами, вы можете обнулить память, убедиться, что она не выгружена на диск и т. Д., И т. Д., И это именно то, что вы хотите сделать, чтобы уменьшить поверхность атаки.
Ключевым моментом здесь является не делать еще один экземпляр String
и работать с данными таким образом, чтобы было проще управлять безопасностью при работе с этими данными (что, к сожалению, сейчас является неуправляемым кодом).