Очень часто можно встретить различного рода соль при хешировании паролей.
Как она выглядит?
Соль это набор случайно подобранных символов, который конкатенируется с паролем при хешировании. Обычно конструкция выглядит где-то так:
$salt = '&WsW{P*q27@5AbY'; $hash = md5($password . $salt);
Зачем она все таки нужна?
Криптографическая соль нужна только для одной цели: защита от радужных таблиц. Дублируя википедию, скажу что радужная таблица — это набор готовых (предрассчитанных) хешей и их оригинальных значений. Такие таблицы генерируются обычным брут форсом, часто по словарю (Пример: http://md5decrypt.net). Быстрота определения оригинальной фразы по хешу осуществляется индексированным поиском по всей базе.
Зачастую пароли пользователей очень просты — словарь очень узок и часто пользуются шаблонные слова и словосочетания. В случае, если соль не была добавлена к оргинальному паролю, есть большая вероятность что такой хеш уже скомпрометирован (например хеш от «mypassword» 34819D7BEEABB9260A5C854BC85B3E44 уже есть в базе данных md5decrypt.net).
В случае добавления соли, особенно если она находится в окружении сервера и никогда не покидает его пределы (не публична), мы получаем широкий исходный алфавит и большую длинну исходного значения.
Какие к ней требования?
Требования к соли следующие:
- приватную соль не ставить соль в начало фразы, поскольку в таком случае возможна атака удлиннением сообщения
- соль должна иметь достаточную длину, хотя бы 10 символов, больше — лучше.
- алфавит лучше использовать из всех возможных символов.
&<WsW{P*q27@5AbY — хорошая соль
2030039 — не очень хорошая соль
Всем добра 🙂
Спасибо за статью