Главная / Руководства / Основы хеш-функций — необратимость, коллизии, соль

Хеш-функция — это функция, преобразующая данные произвольной длины в значение фиксированной длины (хеш, дайджест). Одинаковый ввод всегда даёт одинаковый хеш, но стоит изменить хотя бы 1 бит ввода — и хеш получится совершенно другим.

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

Коллизия — это случай, когда два разных входа дают один и тот же хеш. Теоретически они существуют, но в надёжном хеше намеренно создать их должно быть вычислительно невозможно. MD5 и SHA-1 вывели из употребления именно потому, что коллизии для них стало возможно создавать.

Для хранения паролей одного хеша недостаточно. Поскольку одинаковый пароль даёт одинаковый хеш, к каждому вводу добавляют случайное значение — соль (salt) — и хешируют, а также применяют медленные хеши вроде bcrypt и Argon2, чтобы замедлить массовый перебор.

Хешировать этим алгоритмом