Я храню имя пользователя и пароль в базе данных MySQL и их хэшируют с помощью MD5. Тем не менее, я использую только стандартную функцию PHP без каких-либо изменений. Теперь я прочитал, что MD5 сломан. Как вы это делаете? Вы запускаете его несколько раз с помощью другого механизма хеширования или добавляете какую-то форму соли?
Я поражен тем, как люди прыгают на подножку «черт, сломано, я не буду использовать это!», Не делайте ту же ошибку.
Вы не можете сделать MD5 лучше. Даже использование SHA-1 уязвимо для того же типа атак, что и MD5. Использование bcrypt будет использовать LOT больше CPU, чем алгоритмы MD5 и SHA.
MD5 спроектирован так быстро, как SHA. bcrypt нет, и он позволяет больше перестановок, что затрудняет попытку какого-либо файла расшифровать исходную строку.
Вы должны знать, почему MD5 считается «сломанным».
Используя сегодняшнюю вычислительную мощность, можно создать массив символов и 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.
Есть несколько вещей, которые вы должны сделать.
:
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» для шифрования пароля много раз со случайным сгенерированным номером ключа, на самом деле он силен и так прост, так что больше не будет пугать от крекеров, никто не может взломать зашифрованный «петлевой хэш» на данный момент с доступными базами данных.