Я открываю веб-сайт и пытаюсь решить, как зашифровать пароли пользователей, чтобы сохранить их в базе данных SQL.
Я понимаю, что использование простого md5 (пароля) очень небезопасно. Я ' m рассматривает возможность использования sha512 (password.salt), и я искал лучший способ создать полезную соль. Я читал множество статей, в которых говорилось, что соль должна быть как можно более случайной, чтобы добавлять энтропию к хешу, и это похоже на отличную идею. Но:
Разве не очевидно, что странно выглядящее значение рядом с хешем в базе данных - это соль? Если злоумышленник может получить доступ к соли вместе с хеш-значением, как это будет более безопасно?
У кого-нибудь есть опыт в этой области? Спасибо!
учитывая, что злоумышленник каким-то образом получил доступ к вашим хешированным паролям (и пытается перевернуть хэш в обычный текст), это означает, что он, вероятно, сбросил вашу базу данных, а затем получил доступ к вашим случайным солям
Весь смысл засолки - победить «радужные столы»:
http://en.wikipedia.org/wiki/Rainbow_table
См. почему достаточно длинная соль побеждает любой радужный стол в разделе «Защита от радужных столов» .
как это более безопасно?
Раньше он был более безопасным, потому что заставлял злоумышленника попробовать, тогда очень дорогой подход грубой силы вместо мгновенного взгляда в предварительно вычисленных радужных таблицах. Если у вас была 64-битная соль, злоумышленнику нужно было иметь 2 ^ 64 предварительно вычисленных радужных таблиц вместо одного ... Другими словами: это делало радужные таблицы бесполезными.
Однако обратите внимание, что современные графические процессоры могут взламывать миллиарды паролей в секунду, что делает злоумышленником бессмысленным хранить огромные радужные таблицы (вместо хранения миллиардов хешей просто вычисляйте их за несколько секунд).
В настоящее время вы хотите хранить свои «пароли», используя что-то вроде PBKDF2 или scrypt.