Переход от несоленых к соленым паролям MD5 - PullRequest
20 голосов
/ 22 сентября 2009

У меня есть веб-сайт LAMP (PHP), который становится популярным.

Я проиграл, сохранив пароли пользователей в виде хэшей md5.

Но теперь я вижу, что это не безопасно; Мне следовало посолить хеш md5 - потому что в настоящее время можно декодировать несоленые хеш md5, используя радужные таблицы.

Что я могу сделать?

Я не хочу заставлять всех вводить новый пароль.

Ответы [ 12 ]

0 голосов
/ 22 сентября 2009

Два варианта здесь

  • Декодируйте пароли самостоятельно и перекодируйте их солью (я рекомендую что-то более изумительное, чем MD5). Вы должны сообщить пользователям, что вы просматриваете их пароли в незашифрованном виде. Это, вероятно, займет много времени.
  • Заставьте их заново вводить свои пароли и сохраняйте их зашифрованные и зашифрованные.

Насколько я понимаю, нет другого способа восстановить пароли.

EDIT: Хотя MD5 является хешем и не должен декодироваться, его можно разбить с помощью радужных таблиц: с вероятностью, практически равной единице, вы можете найти уникальную (вот вероятность) строку не более, скажем, 20 символов с данным хешем, особенно если ваш набор символов ограничен, скажем, буквенно-цифровым. Строго говоря, это не расшифровка. Для всех практических целей это так. Дополнительное примечание: создание радужных таблиц и поиск 1000 паролей все еще займет лот времени.

0 голосов
/ 22 сентября 2009

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

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

редактировать

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

md5(md5($new_password).$salt).':'.$salt

для обновления старых паролей используйте

md5($old_password.$salt).':'.$salt

для проверки правильности введенного пароля просто используйте

list($stored_password, $salt) = explode(':', $salted_password);
if(md5(md5($provided_password).$salt) == $stored_password) {
  // you are now logged in
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...