Хэширование и шифрование паролей
Я использую ASP.NET членство на сайте, который будет обслуживать в первую очередь опытных пользователей. Я понимаю разницу между хэшированными и зашифрованными паролями,и я пытаюсь решить между ними.
После того, как мой последний клиент горько пожаловался на то, что хэшированные пароли-это полная Пита, я начал отдавать предпочтение зашифрованным паролям. Но кто-то предположил, что это просто недостаточно безопасно.Итак, мой вопрос: каковы именно риски шифрования паролей? Любой человек с возможность украсть пароли, расшифровав их из базы данных, несомненно, будет иметь возможность сбросить их, если они были хэшированы, не так ли? Мне трудно понять, где кто-то может вызвать проблемы с зашифрованными паролями, но не может с хэшированными. Также важно сделать его удобным для пользователей.
4 ответа:
Риск с дешифруемыми паролями заключается в том, что люди используют один пароль для различных Логинов и учетных записей, а не только для приложения, с которым вы имеете дело.
- с зашифрованным паролем, a украденный / расшифрованный пароль может быть опробовано на других учетных записях пользователей (например, украденный банковский пароль может привести к доступу к их электронной почте).
- с хэшированным паролем нет восстановление. Кража хэшей паролей никогда не должно легко поддаваться использованию пароли
Лечить пароли как собственность владельца учетной записи. Он не Ваш, чтобы просматривать, расшифровывать или делать с ним другие вещи. Если пользователь забыл свой пароль, предложите сброс, а не извлечение.
Дело в том, что зашифрованные пароли могут быть decrypted...so возможно, что при наличии доступа к ключам и т. д. все пароли могут быть известны.
Хэшированные (с солью) пароли-это функция 1 one, поэтому фактически невозможно определить, какой пароль был, что означает, что пользователь, предоставляющий пароль, должен меньше беспокоиться. Конечно, кто-то может изменить хэш в том месте, где он хранится (например, база данных), чтобы пользователь больше не мог войти в систему, но пароль они изначально предусмотрели, что все равно ничего не узнают.
Edit
Как вы отметили вопрос ASP.Net, я бы рекомендовал использовать BCrypt.Net библиотека для генерации хэшей
Риск состоит в том, что зашифрованные пароли могут быть расшифрованы, чтобы получить простой текстовый пароль.
Хэши обычно не могут быть отменены.
Довольно распространенное явление-это люди, использующие одно и то же имя пользователя и пароль на всех своих интернет-сайтах.
Все, что требуется, - это один пароль сайта, который будет расшифрован, и все сайты пользователей находятся под угрозой.
В то время как с хэшем, взломщик никогда не получает простой текстовый пароль.
Как уже говорили другие пользователи, зашифрованные пароли можно расшифровать, и это не очень хорошая идея.
Если вы используете стандартную методику хэширования, пользователь, имеющий доступ к вашей базе данных, может ввести стандартный md5 для "пароля", например. Вы можете решить эту проблему с соленым хэшем, который принимает входную строку и значение строки соли, чтобы создать уникальный хэш, который не может быть легко реплицирован. Храните его в безопасном месте и используйте sha1 ($salt . $вход). Теперь у тебя есть соленый окорок.