Как я могу зашифровать пароль пользователя в Silverlight? - PullRequest
4 голосов
/ 09 февраля 2010

У меня есть приложение Silverlight 3, которое подключается к серверу для выполнения различных действий. Мои пользователи входят в систему с использованием проверки подлинности с помощью форм, но запрашиваемые ими действия выполняются на сервере с использованием учетной записи AppPool, поэтому при входе в журналы аудита они записываются с учетной записью AppPool. Правила PCI DSS теперь требуют, чтобы собственный идентификатор пользователя был в журналах аудита, что означает, что действие должно быть выполнено с использованием кредитов пользователя. Теперь я могу сохранять кредиты пользователей при входе в систему и отправлять их с каждым запросом, и действия, выполняемые сервером, могут использовать эти кредиты. Но представители PCI говорят, что если кредиты сохранены, они должны быть зашифрованы (чтобы никто не взял дамп памяти компьютера и не получил пароль).

Единственный способ сделать это - получить открытый ключ от сервера и зашифровать его, затем отправить зашифрованный пароль и расшифровать его на сервере с помощью закрытого ключа. Но у Silverlight нет асимметричной криптографии.

Я думаю, я слишком близко к проблеме, и должно быть другое решение, но я не вижу, что это такое. Кто-нибудь может помочь?

ПОЯСНЕНИЯ

Это внутреннее приложение. До сих пор я использовал AuthN IIS Forms через SSL для Active Directory - я не беспокоюсь о защите пароля при передаче, пока он хранится в памяти клиента. Насколько я понимаю, поскольку я использую проверку подлинности с помощью форм, олицетворение на сервере невозможно, если я не использую LogonUser, что означает, что мне нужен пароль на сервере, поэтому мне нужно каждый раз передавать его, поэтому мне нужно его удерживать в клиенте, в памяти, пока приложение не закроется.

Ответы [ 2 ]

1 голос
/ 09 февраля 2010

Вы говорите, что вам нужно сохранить пароль для повторного использования в приложении silverlight? Если вы беспокоитесь о том, что пароль появляется в незашифрованном виде в памяти, то Silverlight тогда, я думаю, у вас проблемы.

.NET Framework имеет класс SecureString для конкретной цели, которую вы обрисовали.

К сожалению, версия фреймворка Silverlight не имеет этого класса. Следовательно, даже если вы в какой-то момент сохраните логическое хранилище пароля в зашифрованном виде, ваш код должен будет расшифровать его , прежде чем использовать его. В этот момент выделяется память, содержащая строку в незашифрованном виде.

Я мало что знаю об аутентификации с помощью форм, но если вы можете сопоставить принцип пользователя с пользователем домена (что, как вам кажется, вам нужно), тогда вы захотите использовать олицетворение при запуске кода на сервере. *

Либо прекратите использование проверки подлинности с помощью форм и используйте встроенную проверку подлинности Windows, где вы определенно можете использовать олицетворение на стороне сервера.

0 голосов
/ 09 февраля 2010

Шифрование никогда не должно использоваться для паролей. Когда вы что-то шифруете, значит, должен быть способ расшифровать это. Односторонние хеши всегда должны использоваться для паролей. Доказано, что md5 и sha1 слишком слабы для любой защищенной системы. Sha256 следует использовать, и в silverlight эта библиотека позаботится об этом: http://msdn.microsoft.com/en-us/library/system.security.cryptography.sha256%28VS.95%29.aspx

Фактически хранение паролей с использованием «шифрования» распознается семейством уязвимостей CWE-257 . Использование дайджеста сообщений является ЕДИНСТВЕННЫМ способом безопасного хранения паролей. Я не просто сделал это, это исходит из NIST. Есть много других уязвимостей, которые возникают при хранении паролей. Вот СПИСОК , который NIST собрал:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...