Как сделать MD5 более безопасным? Или это действительно необходимо?

Я храню имя пользователя и пароль в базе данных MySQL и их хэшируют с помощью MD5. Тем не менее, я использую только стандартную функцию PHP без каких-либо изменений. Теперь я прочитал, что MD5 сломан. Как вы это делаете? Вы запускаете его несколько раз с помощью другого механизма хеширования или добавляете какую-то форму соли?

Я поражен тем, как люди прыгают на подножку «черт, сломано, я не буду использовать это!», Не делайте ту же ошибку.

Вы не можете сделать MD5 лучше. Даже использование SHA-1 уязвимо для того же типа атак, что и MD5. Использование bcrypt будет использовать LOT больше CPU, чем алгоритмы MD5 и SHA.

MD5 спроектирован так быстро, как SHA. bcrypt нет, и он позволяет больше перестановок, что затрудняет попытку какого-либо файла расшифровать исходную строку.

Вы должны знать, почему MD5 считается «сломанным».

  • Потому что быстро вычисляется радужная таблица паролей длиной до 6 символов .

Используя сегодняшнюю вычислительную мощность, можно создать массив символов и MD5 все перестановки и сопоставить их с исходной строкой. Вот как вы получаете радужный стол. Если кто-то загружает вашу базу данных, а затем сравнивает пароли с их радужной таблицей – они могут получить исходный пароль пользователя. Причина, по которой это опасно, заключается в том, что люди используют одни и те же пароли для многих вещей, в том числе PayPal и других услуг по обработке денег. Вот почему вы используете так называемую соль. Это делает еще труднее получить исходную строку, так что засовывание паролей ваших пользователей (скажем, путем их изменения и MD5-обратного входа) усложнит для злоумышленника возврат хеша к исходной строке.

  • Из-за столкновений .

Что такое столкновение? Если вы передаете хеширующую функцию две разные строки, и она возвращает тот же хеш – это столкновение. Как это перевести на веб-страницы и хешировать пароли для входа? Если у вас одинаковый хэш для user1 / password1 и user2 / password2, они могут войти в систему как кто-то еще. Именно здесь столкновение играет роль в безопасности.

Причина, по которой MD5 считается сломанной, заключается в том, что MD5 возвращает одинаковый хэш для строк, которые отличаются небольшим процентом. И нелегко рассчитать, какая эта строка может быть! С математической точки зрения – да, это «сломан», потому что если ваша строка имеет 100 символов и отличается от другой строки в 10 символах (разница 10%), вы получаете одинаковый хеш.

То, что применяется для MD5, применяется для ВСЕХ алгоритмов хэширования. В конце концов, у всех из них нет бесконечного количества возможных хэшей. Однако некоторые из них (например, MD5) имеют менее возможные хэши и выполняются быстрее.

В конце концов, если кто-то попал в вашу базу данных – у вас больше проблемы, чем с использованием MD5 вместо bcrypt или SHA1.

Добавьте соль к каждому сохраненному паролю, который не равен для каждого пароля

Просто используйте MD5("yoursite.com".$string);

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

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

Соли будут работать против стола радуги, но не против согласования хеша, который был достигнут с MD5.

Есть несколько вещей, которые вы должны сделать.

  1. Используйте SHA вместо MD5. SHA более криптографически безопасен, чем MD5. Чем больше бит, тем лучше!
  2. Используйте соль. Это затрудняет атаку радужного стола .
  3. Укрепите свой ключ , вычислив хеш следующим образом:

:

 function strenghtened_hash( $password, $salt, $n ) { $crypted = sha( $password . $salt ); for( $i = 0; $i < $n; $i++ ) { $crypted = sha( $crypted . $password . $salt ); } return $crypted; } 

Теперь вы должны быть в хорошей форме!

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

По крайней мере , дамп MD5 (хотя в наши дни это быстрый, не очень безопасный) и использовать что-то более безопасное, как SHA256 с длинной солью.

Переключитесь на другой механизм хеширования (вы можете делать это постепенно, как только люди входят в систему) и определенно используют соль (для каждого пользователя)!

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

Затем, чтобы проверить пароль, вы делаете что-то вроде этого:

 <?php $crypted = md5($salt.$passwordFromForm); if($crypted == $passwordFromDB) { // user logged on } ?> 

Вы можете сделать MD5 или любую функцию хэширования более сильной методом, называемым «loop-hashing», о котором я писал, прочитал его здесь , «Хороший метод для шифрования данных» , используя цикл «for» или «while» для шифрования пароля много раз со случайным сгенерированным номером ключа, на самом деле он силен и так прост, так что больше не будет пугать от крекеров, никто не может взломать зашифрованный «петлевой хэш» на данный момент с доступными базами данных.