Хэширование и шифрование паролей


Я использую ASP.NET членство на сайте, который будет обслуживать в первую очередь опытных пользователей. Я понимаю разницу между хэшированными и зашифрованными паролями,и я пытаюсь решить между ними.

После того, как мой последний клиент горько пожаловался на то, что хэшированные пароли-это полная Пита, я начал отдавать предпочтение зашифрованным паролям. Но кто-то предположил, что это просто недостаточно безопасно.

Итак, мой вопрос: каковы именно риски шифрования паролей? Любой человек с возможность украсть пароли, расшифровав их из базы данных, несомненно, будет иметь возможность сбросить их, если они были хэшированы, не так ли? Мне трудно понять, где кто-то может вызвать проблемы с зашифрованными паролями, но не может с хэшированными. Также важно сделать его удобным для пользователей.

4 4

4 ответа:

Риск с дешифруемыми паролями заключается в том, что люди используют один пароль для различных Логинов и учетных записей, а не только для приложения, с которым вы имеете дело.

  • с зашифрованным паролем, a украденный / расшифрованный пароль может быть опробовано на других учетных записях пользователей (например, украденный банковский пароль может привести к доступу к их электронной почте).
  • с хэшированным паролем нет восстановление. Кража хэшей паролей никогда не должно легко поддаваться использованию пароли

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

Дело в том, что зашифрованные пароли могут быть decrypted...so возможно, что при наличии доступа к ключам и т. д. все пароли могут быть известны.

Хэшированные (с солью) пароли-это функция 1 one, поэтому фактически невозможно определить, какой пароль был, что означает, что пользователь, предоставляющий пароль, должен меньше беспокоиться. Конечно, кто-то может изменить хэш в том месте, где он хранится (например, база данных), чтобы пользователь больше не мог войти в систему, но пароль они изначально предусмотрели, что все равно ничего не узнают.

Edit
Как вы отметили вопрос ASP.Net, я бы рекомендовал использовать BCrypt.Net библиотека для генерации хэшей

Риск состоит в том, что зашифрованные пароли могут быть расшифрованы, чтобы получить простой текстовый пароль.

Хэши обычно не могут быть отменены.

Реверсирование хэша MD5

Довольно распространенное явление-это люди, использующие одно и то же имя пользователя и пароль на всех своих интернет-сайтах.

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

В то время как с хэшем, взломщик никогда не получает простой текстовый пароль.

Как уже говорили другие пользователи, зашифрованные пароли можно расшифровать, и это не очень хорошая идея.

Если вы используете стандартную методику хэширования, пользователь, имеющий доступ к вашей базе данных, может ввести стандартный md5 для "пароля", например. Вы можете решить эту проблему с соленым хэшем, который принимает входную строку и значение строки соли, чтобы создать уникальный хэш, который не может быть легко реплицирован. Храните его в безопасном месте и используйте sha1 ($salt . $вход). Теперь у тебя есть соленый окорок.