И да, SecureString имеет недостатки и не является полностью безопасным, есть способы доступа к данным, например, введение Hawkeye впроцесс упоминается в MSDN как способ извлечь SecureString.Я лично не проверил это утверждение.
DAPI - это метод симметричного шифрования, который означает, что для шифрования и дешифрования данных используется один и тот же ключ.Прежде чем перейти к некоторым примерам использования DAPI, стоит рассказать о том, как DAPI управляет своим ключом.По большей части процесс управления ключами DAPI невидим, и вам, как правило, не нужно беспокоиться об этом, что является основной причиной, почему DAPI является хорошим подходом.
Во введении я писал, что главный ключгенерируется из пароля пользователя для входа.Это не полная картина.На самом деле Windows использует пароль пользователя для генерации мастер-ключа.Этот мастер-ключ защищен паролем пользователя и затем сохраняется вместе с профилем пользователя.Этот мастер-ключ затем используется для получения ряда других ключей, и именно эти другие ключи используются для защиты данных.
Причина, по которой Windows делает это, заключается в том, что приложения могут добавлять дополнительную информацию, называемую энтропией, в процесс генерации отдельных ключей.Вы видите, что если каждое приложение, работающее под учетной записью пользователя, использует один и тот же ключ, то каждое приложение может снять защиту данных, защищенных DAPI.Иногда вы можете захотеть, чтобы приложения могли обмениваться данными, защищенными DAPI;Однако иногда вы не будете.Позволяя приложению вносить энтропию в генерацию ключа, этот ключ становится специфичным для приложения, и любые данные, защищенные этим приложением, могут быть снова незащищены, только если они знают энтропию.
Хотя генерация мастер-ключа и последующее использование этого мастер-ключа для генерации других ключей для выполнения фактического шифрования, может показаться многогранным подходом, но у него есть одно важное преимущество.Поскольку существует дополнительный уровень абстракции между главным ключом, защищенным паролем пользователя, и фактическими ключами, используемыми для защиты данных, это означает, что когда пользователь меняет свой пароль, тогда только главный ключ должен быть повторно защищен;ни одна из защищенных данных не нуждается в повторной защите.Поскольку размер мастер-ключа намного меньше размера данных, достигается значительная экономия производительности.
Когда пароль пользователя изменяется, то, конечно, генерируется новый главный ключ.Этот новый главный ключ затем используется для генерации новых индивидуальных ключей.Однако, поскольку все ранее созданные отдельные ключи были получены из старого мастер-ключа, Windows должна хранить все предыдущие мастер-ключи, что и происходит.Windows никогда не забывает главный ключ, и все защищенные данные помечаются GUID, который указывает, какой главный ключ использовался для защиты данных.Таким образом, с точки зрения адаптивности, DAPI способен справляться с изменениями паролей пользователей, обеспечивая при этом а) что защищенные данные не нуждаются в повторной защите, и б) ключи, которые ранее использовались для защиты данных как все еще доступных, и c) он делает все это автоматически для вас.
Если компьютер не является членом домена, DAPI может только незащищенные данные на том же компьютере, который использовался для его защиты.
Помимо обеспечения защиты на уровне пользователя, поскольку главные ключи основаны на пользовательских паролях, а защищенные данные для одного пользователя не могут быть незащищены другим пользователем, DAPI также обеспечивает защиту на уровне компьютера, поскольку основные ключи основаны на конкретной машине.Информация.Главные ключи машинного уровня позволяют приложениям хранить защищенные данные, поэтому они могут быть незащищены всеми пользователями приложения.Единственное отличие в уже описанном процессе заключается в том, что главный ключ генерируется на основе информации, специфичной для машины, а не информации, специфичной для пользователя.