Почему хеши часто делают не так и как это мешает безопасности
В работе с хешами постоянно натыкаюсь на одни и те же грабли. Например, используют уже устаревшие алгоритмы типа MD5 или SHA1, хотя они хорошо ломаются и теперь практически бесполезны для защиты. Часто забывают про соль — делают хеш просто от пароля без неё, и тогда даже самый крепкий алгоритм легко обходит простой радужный словарь. Ещё момент — неправильно реализуют проверку: сравнивают строки напрямую, не учитывая возможные тайминг-атаки.
Что реально помогает — переходить на проверенные и более тяжёлые алгоритмы, например, bcrypt или Argon2, которые специально созданы для паролей, а не на «быстрый» SHA. И обязательно использовать соль и правильную структуру данных. Если есть возможность — добавлять pepper (секретный ключ на сервере) для дополнительной защиты.
А кто как проверяет, что хеши и крипто-примочки сделаны правильно? Может есть простые лайфхаки или утилиты, которые помогают быстро отсеять плохие варианты?