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