Типичные промахи с хешами и как их быстро заметить
Видел кучу народу, которые путаются в простых вещах при работе с хешами и криптой, так что решил написать список того, что стоит проапгрейдить в своей практике, чтобы не напортачить.
- Использовать устаревший или взломанный алгоритм. SHA-1 или MD5 сейчас почти бесполезны. Если хеш лежит в проекте — перепроверяйте, не накосячили ли со стандартом.
- Пренебрегать солью. Просто брать пароль и хешировать без соли — это почти всегда провал. Если соль не уникальна и не добавлена, можно быстро расщелкать хеши.
- Сравнивать хеши не в константном времени. Это вообще подстава для безопасности, особенно в аутентификации.
- Пытаться дешифровать хеш напрямую. Хеши — не шифр, их нельзя «расшифровать», только перебором или брутфорсом можно попытаться найти входные данные.
- Использовать неправильное кодирование перед хешированием — например, забыть UTF-8 или перепутать байты. Итог — разные результаты на одних и тех же данных.
- Хранить хеши в базе без ограничений доступа или без дополнительной защиты. Если база сливается — это постройка на песке.
- Не обновлять алгоритмы и методы, но пытаться на них строить серьезные системы — рано или поздно снова пожар.
В общем, если работаешь с хешами, всегда проверяй эти вещи, не экономь на соли, выбирай что-то из bcrypt, Argon2 или хотя бы SHA-256 с параметрами. Какие ошибки ещё часто встречаете?