Каков стандартный способ создания «ключа» из значения? - PullRequest
0 голосов
/ 14 октября 2010

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

Существует ли стандартный способ сделать это?Это что такое "хеш"?Я был бы очень признателен, если бы кто-то мог указать мне правильное направление!:) Как только я знаю, где искать, я могу сделать исследование самостоятельно.

Спасибо!

Солнечно

Ответы [ 5 ]

3 голосов
/ 14 октября 2010

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

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

После сброса пароля пользователям рекомендуется сменить пароль при первом входе в систему.

1 голос
/ 14 октября 2010

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

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

Если вы ищете систему восстановления пароля, вам следует вместо этого использовать Самостоятельный сброс пароля system.

  1. Пользователь говорит, что он забыл пароль
  2. Вы отправляете уникальный ключ (который вы храните в своей базе данных) этомупользователя безопасным способом (обычно по почте).
  3. Пользователь подтверждает, что он забыл пароль, предоставив вам ранее использованный уникальный ключ.Таким образом, вы уверены, что пользователь является владельцем.
  4. Вы генерируете совершенно случайный пароль, который сохраняете (в хешированной форме) в своей базе данных и отправляете его владельцу с помощью ранее использованного безопасного значения.
1 голос
/ 14 октября 2010

Что-то вроде функции md5 в PHP было бы хорошим началом.Однако зачем вам воссоздавать тот же автоматически сгенерированный пароль, если пользователь его потерял?Лично, было бы более разумно просто генерировать новый случайный.

1 голос
/ 14 октября 2010

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

1 голос
/ 14 октября 2010

Функция хеширования делает то, что вы ищете - она ​​берет некоторый ввод x и генерирует дайджест d, который будет таким же, когда вы снова вводите ввод x.

A лучшее определение из википедии , которое объясняет это свойство:

Детерминизм

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

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

...