SHA512 и MD5 хэширование - PullRequest
       21

SHA512 и MD5 хэширование

3 голосов
/ 22 декабря 2011

Некоторое время я искал более безопасный способ хеширования пароля пользователя на моем веб-сайте для вставки в базу данных. Я рассмотрел все доступные методы хеширования. Говорят, что bcrypt лучший из-за своей медлительности. Я думал, что, если мне не нужна высочайшая безопасность, но все равно оставаться в безопасности. Что если я использовал sha512, а затем md5 для этого хэша. Будет ли иметь значение, если я поменяю порядок хеширования? Имейте в виду, я буду использовать отдельную соль для каждой операции. Насколько это безопасно? Есть ли другие комбинации, которые сделали бы то же самое?

Ответы [ 2 ]

5 голосов
/ 22 декабря 2011

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

Как правило, это ваш выбор при сохранении пароля,

  • Использование bcrypt .
  • Используйте соленый, усиленный хеш.

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

Второй метод требует, чтобы вы использовали хеш-функцию общего назначения (семейство SHA-2 или лучше, а не MD5 или SHA-1, поскольку они сломаны / слабые ) или еще лучше, HMAC , создайте уникальную соль для пользователя и уникальную соль приложения, а затем многократно повторяйте хэш-функцию (100 000 и т. Д.), Чтобы замедлить ее (называемую растяжением / усилением ключа ) .

например. (Псевдокод)

sofar = hash("sha512", user_salt + site_salt + input_password);
iterations = 100000; // Should be changed based on hardware speed
while (iterations > 0)
{
    sofar = hash("sha512", user_salt + site_salt + sofar);
    iterations--;
}
user.save("password", "$sha512$" + user_salt + "$" + iterations + "$" + sofar);

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

Краткое описание
Используйте bcrypt .

2 голосов
/ 22 декабря 2011

Я вообще не вижу смысла в использовании MD5. Оно сломано. Но несколько раундов, видимо, сильнее. Однако улучшение от двух раундов вряд ли будет иметь большое значение. Применение SHA512 много и много раз было бы лучше.

Вместо этого вы должны смотреть на длину пароля пользователя и солить пароли, если вы этого еще не сделали

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

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

...