Что я должен использовать для полей пароля в таблице; MD5 или SHA1? - PullRequest
5 голосов
/ 17 июня 2010

Я ни в коем случае не эксперт по безопасности или даже новичок.В лучшем случае я новичок в области безопасности.

Кто-то предложил мне использовать SHA1 вместо MD5 - почему я выбрал один из них?Еще один безопасный?

Ответы [ 7 ]

10 голосов
/ 17 июня 2010

Я бы использовал SHA2 (256) как минимум - однако:

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

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

Я верю в .Net, что это может быть достигнуто с помощью PBKDF - но я потерял ссылку на него (кто-то предоставил мне ответ на вопрос, который я задал некоторое время назад). РЕДАКТИРОВАТЬ-Найдена ссылка для .Net : Rfc2898DeriveBytes Class .

На MD5

Хотя MD5 действительно был «сломан», как отмечалось в других ответах, основная причина, по которой я не буду его использовать - и почему я прочитал, что его нецелесообразно использовать - заключается в том, что он на самом деле очень быстро, тем самым увеличивая вероятность появления трещины в течение определенного периода времени.

3 голосов
/ 17 июня 2010

MD5 и SHA1 считаются небезопасными, а SHA-1 лучше. Тем не менее, есть две вещи, которые вы должны учитывать:

  1. Под «небезопасным» они подразумевают, что математически проще, чем грубая сила, определить значение перед хэшированием. Иногда это означает, что они могут сократить его с миллиарда вычислений до 900 миллионов, а иногда это значительно меньше. Это далеко не так небезопасно, как моя точка № 2.

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

Например, многие люди используют «пароль» и «Джон» в качестве своих паролей. В MD5 эти два пароля всегда генерируют для: пароль: 5f4dcc3b5aa765d61d8327deb882cf99 Джон: 527bd5b5d689e2c32ae974c6229ff785

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

Однако, если вы добавите какую-то тарабарщину к каждому значению предварительного хэширования, например «password12345» и «johnxyz», то вы получите 2 совершенно разных хэша, которые будут отличаться от приведенных выше. Это называется солт-значением, и оно препятствует тому, чтобы радужные таблицы были настолько эффективными.

Я бы порекомендовал использовать наивысший уровень алгоритмов SHA, который вы можете использовать в своем языке программирования, и хешировать против солт-значения (вы можете создать «случайный», хешируя текущее время, если хотите), который вы сохранить в базе данных запись с хешированным паролем.

столбцы БД: Имя пользователя | Пароль | Соль

Это не самая безопасная система, о которой кто-либо когда-либо думал, но она, вероятно, будет работать для вас.

1 голос
/ 17 июня 2010

хранилище дешево и процессоры быстры. используйте 1 килобайтную соль с SHA-512.

1 голос
/ 17 июня 2010

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

Удачи.

0 голосов
/ 17 июня 2010

SHA2 . Scheier имеет несколько новых альтернатив тоже

0 голосов
/ 17 июня 2010

MD5 был «сломан», и теперь более высокий уровень безопасности теперь требует SHA-2. Это довольно интересно читать здесь http://en.wikipedia.org/wiki/MD5.

Редактировать: на 9 секунд позже:)

...