MD5 против SHA: Что использовать?

Выбор между алгоритмами MD5 и SHA критичен для безопасности приложения. Хотя оба являются хеш-функциями, они имеют очень разные свойства безопасности и подходящие случаи использования. Это руководство сравнивает алгоритмы и предоставляет четкие рекомендации для современной разработки.

MD5 (128-бит)

MD5 был разработан в 1991 году Рональдом Ривестом как улучшение его предыдущего алгоритма MD4. Он производит 128-битный (16-байтовый) хеш, обычно представленный как 32 шестнадцатеричных символа. В течение более десяти лет MD5 был стандартным хеш-алгоритмом для контрольных сумм, хранения паролей и проверки целостности данных. Однако безопасность MD5 была постепенно разрушена на протяжении многих лет. Теоретические слабости были опубликованы в 1996 году. В 2004 году исследователи продемонстрировали практические атаки коллизий. К 2008 году команда использовала слабости MD5 для создания мошеннического сертификата CA. Сегодня коллизии MD5 могут быть сгенерированы за секунды на потребительском оборудовании. Последствия серьезны для приложений безопасности. Если атакующие могут создавать коллизии, они могут создать два файла с одним и тем же хешем MD5 — один вредоносный, один безобидный. Для хеширования паролей радужные таблицы для MD5 являются всеобъемлющими и свободно доступными, делая несоленые хеши паролей MD5 тривиально взламываемыми. Несмотря на слабости безопасности, MD5 остается полезным для не связанных с безопасностью целей. Он быстр и производит разумно короткие хеши. Случаи использования, где MD5 все еще приемлем, включают: генерацию ключей кэша, где безопасность не является проблемой, быстрое обнаружение изменений файлов (не защита от подделки), некриптографическую дедупликацию, совместимость с устаревшими системами, где вы не можете изменить алгоритм. Ключевой момент: MD5 не сломан для устойчивости к коллизиям на практике для случайных вводов — вы все еще можете использовать его для проверки идентичности двух файлов (если атакующий не пытается сделать их разными с одним и тем же хешем). Он сломан в том смысле, что атакующий МОЖЕТ создать два разных файла с одним и тем же хешем, если он контролирует содержимое. Для любого чувствительного к безопасности приложения не используйте MD5. Алгоритм фундаментально скомпрометирован для криптографических целей.

SHA-256 (256-бит)

SHA-256 является частью семейства SHA-2, разработанного АНБ и опубликованного в 2001 году. Он производит 256-битный (32-байтовый) хеш, представленный как 64 шестнадцатеричных символа. SHA-256 стал де-факто стандартом для криптографического хеширования, используемым в TLS/SSL, подписи кода, Bitcoin и большинстве современных протоколов безопасности. Не было продемонстрировано практических атак против SHA-256. Хотя некоторые теоретические анализы были опубликованы, они далеки от компрометации безопасности алгоритма. 256-битный вывод обеспечивает массивный запас безопасности — нахождение коллизии через грубую силу потребует приблизительно 2^128 операций, что вычислительно невозможно с любой предвидимой технологией. SHA-256 — рекомендуемый выбор для большинства приложений. Он предлагает отличный баланс безопасности, производительности и широкой поддержки. Каждый современный язык программирования имеет реализации SHA-256. Доступно аппаратное ускорение на многих CPU (расширения Intel SHA, расширения криптографии ARM), делая SHA-256 очень быстрым на современных системах. Распространенные применения для SHA-256 включают: TLS/HTTPS сертификаты для защиты веб-трафика, цифровые подписи кода, документов и email, проверку целостности файлов для загрузок и обновлений, деревья Меркла в блокчейне и распределенных системах, криптографическое хеширование общего назначения, когда вам нужна сильная безопасность. Для хеширования паролей помните, что SHA-256 сам по себе недостаточен. Хотя SHA-256 безопасен, он слишком быстр для хеширования паролей — атакующие могут пробовать миллиарды догадок в секунду. Используйте bcrypt, scrypt или Argon2, которые специально разработаны быть медленными и требовательными к памяти. Если вы не уверены, какой хеш-алгоритм использовать, SHA-256 — безопасный выбор по умолчанию. Он безопасный, быстрый, хорошо поддерживаемый и широко проверенный.

Попробовать инструмент

Генератор Хешей

Генератор Хешей

Похожие статьи