Пароль MD5 дважды - PullRequest
       48

Пароль MD5 дважды

1 голос
/ 27 декабря 2010

Я знаю, что безопасность MD5 в последнее время ставится под сомнение, и именно поэтому многие люди используют соль (кстати, я вообще не понимаю этого), но мне было интересно, если вы хотите легко внедрить безопасную систему в php, можете ли вы простомд5 что то дважды?

как test> 098f6bcd4621d373cade4e832627b4f6> fb469d7ef430b0baf0cab6c436e70375

Так что в основном:

$val = 'test';
$val = md5($val);
$val = md5($val);

Это решило бы весь вопрос безопасности радуги?Существует ли простой / надежный способ создания безопасных паролей базы данных в php?

Ответы [ 5 ]

9 голосов
/ 27 декабря 2010

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

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

4 голосов
/ 27 декабря 2010

Если вы не верите в MD5, вы можете попробовать более высокий алгоритм, используя функцию hash () :

$hash1 = hash('sha1', 'The string to hash by SHA-1');
$hash2 = hash('sha256', 'The string to hash by SHA-256');
$hash3 = hash('sha512', 'The string to hash by SHA-512');
$hash4 = hash('ripemd160', 'The string to hash by RIPEMD-160');

На мой взгляд, не имеет смысладважды хэш.

EDIT: исправлена ​​опечатка в последней строке кода.

3 голосов
/ 27 декабря 2010

Используете ли вы алгоритм MD5 ...

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

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

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

1 голос
/ 27 декабря 2010

Безопасное хранение паролей довольно сложно, большинство советов, размещенных здесь, не являются точными.Поэтому я отложу широко цитируемую статью Томаса Птачека на эту тему: http://chargen.matasano.com/chargen/2007/9/7/enough-with-the-rainbow-tables-what-you-need-to-know-about-s.html

0 голосов
/ 02 февраля 2016

Для записи я оценил, что

$val = 'test';
$salt='somerandom!!aa##9900';
$val = md5($salt.$val);
$val = md5($val);

Это довольно безопасно. Секрет в соли.

Однако md5 является коротким, поэтому шансы совпадений "высоки" (один на 1.208.925.819.614.629.174.706.176 = 32 ^ 16, 32 слова с шестнадцатеричным каждым)

...