Хеш-функции в сравнении: MD5, SHA-1, SHA-256 и CRC32
Хеш-функция сжимает произвольный ввод в fingerprint фиксированного размера: один и тот же файл всегда дает одну и ту же строку, а любое крошечное изменение лавинообразно превращается в совершенно другую. Это одно свойство служит трем очень разным задачам — обнаружению повреждений, fingerprinting контента и, с дополнительными механизмами, защите паролей.
1. Контрольные суммы файлов: MD5, SHA-1, SHA-256
Страницы загрузок публикуют контрольные суммы, чтобы вы могли подтвердить, что файл дошел целым: хешируйте свою копию и сравнивайте строки. MD5 самый быстрый и все еще годится для проверок случайных повреждений, SHA-1 посередине, а SHA-256 — текущий стандарт для всего, что имеет значение. Различия в скорости видны только на файлах гигабайтного масштаба.
2. Сломаны для безопасности, годятся для целостности
MD5 и SHA-1 разбиты против deliberate attackers — исследователи могут создать два разных файла с одинаковым MD5, а SHA-1 пал под практической коллизией годы назад. Поэтому никогда не используйте их для подписей, сертификатов или хранения паролей; но злоумышленник не прячется внутри вашей загрузки Linux ISO, и для чистого обнаружения повреждений они остаются вполне пригодными.
3. Паролям нужна медлительность, а не скорость
Быстрые хеши — неверный инструмент для паролей, потому что атакующие могут перебирать миллиарды вариантов в секунду. Настоящее хранение паролей использует медленные, salted, memory-hard функции, созданные для этой задачи. Если руководство велит вам хранить MD5 паролей, закройте это руководство.
4. CRC32 и HMAC, кратко
CRC32 — вовсе не криптографический хеш, это быстрый error-detecting код из сетей и ZIP-файлов, отличный для отлова сбоев передачи и бесполезный против подделок. HMAC, напротив, примешивает секретный ключ в хеш, чтобы получатель мог проверить и целостность, и подлинность. Попробуйте все это на своем тексте или файлах с помощью нашего генератора хешей, который считает все локально в вашем браузере.