Не все хеши равны
Криптографический хеш отображает любой ввод в отпечаток фиксированного размера. Существует несколько семейств, и они не взаимозаменяемы: некоторые ещё сильны, а другие взломаны настолько серьёзно, что использовать их для безопасности — ошибка. Правильный выбор зависит от задачи и от календаря, ведь хеш, уважаемый двадцать лет назад, сегодня может быть тривиально взломан.
Взломанные
- (128 бит) взломан. Коллизии можно произвести за секунды на ноутбуке, и они использовались в реальных атаках (вредонос Flame подделал сертификат подписи кода коллизией MD5). Он выживает лишь как быстрая контрольная сумма без функций безопасности, и даже там есть лучшие варианты.
- -1 (160 бит) взломан. Исследование SHAttered 2017 года произвело два разных с одинаковым дайджестом SHA-1, а затем появились коллизии с выбранным префиксом. Браузеры и центры сертификации убрали поддержку SHA-1 много лет назад. Не используйте его для подписей или целостности, которые противник может атаковать.
Нынешние рабочие лошадки
- SHA-2 — семейство по умолчанию для большинства задач. Это набор связанных функций, обычно SHA-256 и SHA-512 (а также SHA-224, SHA-384 и усечённый SHA-512/256). Практической атаки коллизий против SHA-2 не существует. В случае сомнений SHA-256 — безопасный и повсеместно поддерживаемый выбор.
- SHA-3 (Keccak) — более новый стандарт, построенный на совершенно ином внутреннем устройстве (губчатой конструкции), чем SHA-2. SHA3-256 и SHA3-512 дают сопоставимую безопасность и существуют отчасти как страховка: если в SHA-2 когда-нибудь найдут слабость, SHA-3, вероятно, её не разделит. Он также по своему устройству невосприимчив к проблеме расширения длины, затрагивающей SHA-2.
- BLAKE2 и BLAKE3 — современные, очень быстрые хеши с сильной безопасностью. BLAKE3 в частности создан для распараллеливания, что делает его привлекательным, когда вы хешируете большие объёмы данных и хотите скорости без потери безопасности.
Выбор одного
Краткое руководство по решению:
- Общая целостность, подписи или «мне просто нужен безопасный хеш»: SHA-256.
- Нужно разнообразие алгоритмов или невосприимчивость к расширению длины без : SHA-3 или SHA-512/256.
- Хеширование больших файлов, где важна пропускная способность: BLAKE3.
- Быстрая контрольная сумма без функций безопасности (обнаружить случайное повреждение, а не подмену): CRC или MD5 подойдут, но никогда не называйте это «безопасным».
- Пароли — отдельная задача. Общие хеши слишком быстры для хранения паролей; используйте специальный хеш паролей, такой как bcrypt, scrypt или Argon2 (см. статью о хешировании паролей).
Инструмент хеширования вычисляет MD5, SHA-1, SHA-256, SHA-512 и другие по тексту или файлу, чтобы вы могли сравнить выводы рядом, всё в вашем браузере, без отправки чего-либо.