MD5 — криптографическая хеш-функция¶
MD5 (от англ. Message Digest 5) — криптографическая хеш-функция, разработанная Рональдом Ривестом в 1991 году в Массачусетском технологическом институте. Функция принимает входное сообщение произвольной длины и преобразует его в 128-битное (16-байтовое) фиксированное значение — хеш-сумму, обычно записываемую в шестнадцатеричном виде как 32 символа (например, d41d8cd98f00b204e9800998ecf8427e). MD5 является преемником функций MD2 и MD4, созданных тем же автором, и изначально задумывалась как быстрая алтернатива для целей целостности данных.
¶История создания
Работа над MD5 началась в 1990 году как развитие алгоритма MD4, предложенного Ривестом в 1988 году. MD4 имел ряд выявленных криптографических слабостей, и MD5 была призвана устранить их за счёт дополнительного раунда преобразований. Описание алгоритма опубликовано в RFC 1321 (апрель 1992 года), который стал стандартом де-факто для вычисления хеш-сумм в интернете.
Уже в 1993 году Ханс Доббертин продемонстрировал столкновения для сокращённых версий MD4, а в 1996 году он же показал теоретические слабости MD5. В 2004 году Вэйфэй Ван и Фэнцзяо Ю из Университета Шаньдун на конференции CRYPTO представили метод поиска столкновений, позволяющий находить два разных сообщения с одинаковой хеш-суммой за разумное время. В 2008 году группа исследователей (Stevens, Lenstra, de Weger) продемонстрировала практическое создание столкновений для MD5, включая подмену содержимого PDF-файлов и SSL-сертификатов. В 2010 году в России и Китае были опубликованы первые полностью автоматизированные инструменты для поиска столкновений (HashClash и Lucky Break).
¶Принцип работы
Алгоритм MD5 обрабатывает входные данные блоками по 512 бит (64 байта). Если последний блок неполон, он дополняется нулями и дополнительными битами длины. Изначально регистры состояния инициализируются фиксированными константами (так называемый IV — initial values), записанными в шестнадцатеричном виде: 67452301, efcdab89, 98badcfe, 10325476.
Каждый блок проходит через четыре раунда преобразований по 16 шагов (итого 64 шага). На каждом шаге применяется нелинейная функция (операции над словами: побитовое И, ИЛИ, исключающее ИЛИ, дополнение), прибавляется константа и результат циклически сдвигается. Используется 64 предопределённые константы и таблица синусов для генерации добавочных значений.
Свойства MD5, важные для криптографии:
- детерминированность — одинаковые входные данные всегда дают одинаковый хеш;
- необратимость — по хешу невозможно восстановить исходное сообщение;
- лавинный эффект — изменение одного бита входных данных приводит к радикальному изменению хеша;
- устойчивость к столкновениям — на момент создания считалось, что найти два разных сообщения с одинаковым хешем практически невозможно.
¶Криптографическая устойчивость
Современное состояние алгоритма MD5 можно охарактеризовать как криптографически небезопасное. Основная угроза — атаки на столкновения: злоумышленник может подобрать два разных сообщения с одинаковой хеш-суммой за время от нескольких часов до нескольких дней на обычном компьютере. Атаки на преобразование (нахождение сообщения с заданным хешем) остаются сложными, но и они не гарантируют безопасности.
В 2011 году NIST (Национальный институт стандартов и технологий США) официально отозвал рекомендацию по использованию MD5 для цифровых подписей. Российский стандарт ГОСТ Р 34.11-2012 (функция Стрибог) также не включает MD5 в число рекомендуемых криптографических примитивов. Тем не менее MD5 продолжает применяться в ряде некриптографических задач.
¶Применение
Несмотря на криптографическую небезопасность, MD5 остаётся распространённой благодаря скорости и простоте реализации. Основные области применения:
- проверка целостности файлов — большинство зеркал Linux-дистрибутивов публикуют MD5-суммы ISO-образов для верификации загрузки;
- дедупликация данных — быстрое определение одинаковых файлов в системах хранения;
- кэширование — генерация уникальных имён для кэшированных объектов (например, в WordPress);
- хранение паролей — исторически MD5 использовалась для хэширования паролей в базах данных, однако из-за уязвимости к атакам перебором и быстрости вычисления этот подход считается устаревшим; современные системы предпочитают bcrypt, scrypt или Argon2;
- проверка контрольных сумм в системах контроля версий и пакетных менеджерах.
¶Альтернативы
Для криптографических целей MD5 рекомендуется заменять на SHA-2 (SHA-256, SHA-512) или SHA-3, а также на российский стандарт Стрибог (ГОСТ Р 34.11-2012). Для хранения паролей применяются специализированные функции с медленным вычислением: bcrypt, scrypt, PBKDF2, Argon2. Для проверки целостности файлов в некриптографических сценариях MD5 по-прежнему допустима, хотя предпочтение отдаётся SHA-256.
¶См. также
- Хеш-функция
- SHA-2
- Стрибог (криптографический алгоритм)
- RFC 1321
Источники: RFC 1321 «The MD5 Message-Digest Algorithm» (R. Rivest, 1992); книга «Applied Cryptography» Б. Шнайера; публикации CRYPTO 2004 (Wang, Yu); NIST Special Publication 800-131A; ГОСТ Р 34.11-2012.
