Открыть сервисСервис

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.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru