2010-10-28 3 views
1

Я знаю, что есть класс SecureString, но для большинства сценариев я не думаю, что это действительно полезно.Как мне управлять строками пароля в .net?

Например, у меня есть клиент/серверная система. Сервер не нуждается в приложении, сделанным мной, это может быть даже SQL Server без встроенной проверки подлинности. Когда пользователь вводит свой пароль в форме в клиентском приложении, он хранится в ясном тексте в памяти, поэтому, хотя я могу использовать SecureString для его чтения, я не могу понять, как это сделать. Конечно, это может уменьшить поверхность атаки, но не намного ... Даже если бы я сделал, когда пользователь нажимал «ОК», должна генерироваться простая текстовая строка, даже если мне просто нужно вычислить хэш из нее.

Итак, есть ли все равно, чтобы строки паролей плавали вокруг, пока GC не решит вернуть память? Даже тогда, будет ли память стерта, прежде чем она будет использована снова?

+0

Каково утверждение фактической проблемы, которую вы пытаетесь решить? –

+0

, если вы хотите более безопасное приложение, используйте встроенную проверку подлинности. –

+0

@Mitch Wheat: Я хочу, чтобы вы могли безопасно использовать содержимое SecureString. – raven

ответ

3

SecureString - отличная идея, чье время еще не пришло. Это наиболее полезно в следующем случае:

  1. Вашего уровня представление для ввода пароль захватывает каждое нажатие клавиши индивидуальна и запихивает их в SecureString один на один раз. Класс предоставляет несколько методов мутации, специально разработанных для облегчения этого. Например, WPF поддерживает это (через свойство управления PasswordBox.SecurePassword).
  2. Ваш API аутентификации принимает пароли типа SecureString изначально.

Если какая-либо из них не соответствует действительности, то вы довольно много тратить свое время, так как в какой-то момент в пути кода вы будете вынуждены распаковывать SecureString в String.

Самый безопасный способ аутентификации пользователя - всегда избегать использования учетных данных имени пользователя и пароля. Вместо этого вы можете использовать проверку подлинности Windows, InfoCards, OpenID и т. Д.

+0

Почему downvote? Звучит довольно разумно для меня ... – raven

+0

Я принимаю это, потому что это самый полный ответ, хотя, подумав об этом, мне очень нравится предложение dbemerlin. – raven

1

Вы можете сгенерировать ключ хэша ключом. Просто используйте событие OnKeyPress в текстовом поле, а затем вычислите хэш с этим дополнительным байтом и введите в текстовое поле другой символ, например *.

+0

И что? Во всяком случае, мне нужно будет иметь неизменяемый массив байтов с каждым байтом пароля. – raven

Смежные вопросы