Восстановление пароля, когда пароль хранится в виде хеш-значения - PullRequest
5 голосов
/ 18 июня 2009

Могут ли пользователи запросить отправку своего пароля по электронной почте, если пароль хранится в виде хеш-значения?

Есть ли способ преобразовать хеш-значение в текстовое значение с соответствующей информацией (и какая информация вам понадобится)?

Если у пользователя одинаковое хеш-значение пароля, хранящееся на двух сайтах, будет ли его пароль одинаковым для обоих сайтов?

Ответы [ 8 ]

29 голосов
/ 18 июня 2009

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

Механизмы сброса пароля являются правильной альтернативой.

10 голосов
/ 18 июня 2009

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

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

7 голосов
/ 18 июня 2009

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

3 голосов
/ 18 июня 2009

Если бы существовал простой способ восстановить открытый текстовый пароль, не было бы смысла хэшировать пароли для начала. В этот момент вы можете просто использовать base64 или ROT13. (не делай этого!)

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

Если хэш на двух сайтах одинаков, у пользователя, скорее всего, один и тот же пароль на обоих. Однако не гарантируется 100%, может быть коллизия хешей, но это невероятно.

3 голосов
/ 18 июня 2009

Существуют разные типы алгоритмов хеширования. Некоторые из них более безопасны, чем другие. MD5 является популярным, но небезопасным. Семейство SHA - это еще один более безопасный набор алгоритмов.

По определению, хеш является односторонней функцией. Это не может быть отменено.

http://en.wikipedia.org/wiki/Sha-1

2 голосов
/ 18 июня 2009

Нет способа отменить часто используемые хеши. Они могут быть использованы грубо (пробуя каждый возможный пароль) или вы можете использовать список слов (используя список часто используемых паролей) в комбинации, чтобы перебрать силу, чтобы ускорить его, но это все еще очень медленный и ресурсоемкий процесс.

Лучший способ, который используют многие сайты, это создать кнопку «Сброс пароля», где вы вводите свое имя пользователя и адрес электронной почты, и, если они совпадают, он отправляет вам случайный пароль и дает вам ссылку на страницу входа и Вы можете войти со своим случайным паролем и изменить свой пароль.

0 голосов
/ 06 июля 2010

Для этого у вас должна быть модель с полями:

Hashed_password
Salt

И вам нужно знать метод user для хэширования пароля (здесь я использую SHA1) Затем вы можете определить в вашем контроллере:

def self.encrypted_password(password, salt)
   string_to_hash = password + "wibble" + salt
   Digest::SHA1.hexdigest(string_to_hash)
end

Далее вы можете сравнить:

user.Hashed_password == encrypted_password(password, user.salt)

Истина означает, что «пароль» - это пароль пользователя «пользователь»

0 голосов
/ 18 июня 2009

Общая идея хранения хэша пароля заключается в том, чтобы обеспечить безопасность паролей ... даже от тех, кто имеет доступ к базе данных. Доверие никогда не подразумевается. Хеш - это односторонний алгоритм, поэтому нет способа извлечь исходный пароль из хеш-кода. Обычно, когда пользователю необходимо восстановить свой пароль, который был сохранен в виде хэша, вы должны задать ему секретный вопрос и либо отправить ему временный пароль по электронной почте, либо отправить ему временную ссылку, чтобы они могли изменить свой пароль. Это гарантирует, что в пароле никогда не хранится открытый текст, и он защищен от любых посторонних глаз, даже от тех, кого можно считать заслуживающими доверия.

...