MD5 хеш: что это и безопасно ли использовать
Алгоритм MD5, хеширование, коллизии, почему MD5 не для паролей, где ещё можно использовать.
Посчитайте прямо здесь: Text → MD5 Hash
Открыть инструмент целиком →Введение
MD5 — один из самых известных хеш-алгоритмов в истории информатики. Разработанный Рональдом Ривестом в 1991 году, он десятилетиями использовался для проверки целостности файлов, хранения паролей и цифровой подписи. Сегодня MD5 считается криптографически сломанным, но всё ещё встречается в legacy-системах и в задачах, где безопасность не критична. В этой статье разберём, как устроен MD5, для чего он ещё годится и почему его нельзя использовать для паролей. Попробовать алгоритм в действии можно в нашем MD5-генераторе.
Что такое хеш-функция
Хеш-функция — это алгоритм, который принимает на вход данные произвольной длины и возвращает строку фиксированной длины, называемую «хешем» или «дайджестом». Хорошая хеш-функция обладает следующими свойствами:
- Детерминированность: одинаковые входные данные всегда дают одинаковый хеш.
- Лавинный эффект: изменение одного бита входа полностью меняет выход.
- Однонаправленность: по хешу нельзя восстановить исходные данные.
- Стойкость к коллизиям: сложно найти два разных входа с одинаковым хешем.
MD5 возвращает 128-битный хеш, который обычно записывается 32 шестнадцатеричными символами. Например, строка "hello" превращается в5d41402abc4b2a76b9719d911017c592.
Как работает MD5
Алгоритм обрабатывает входное сообщение блоками по 512 бит. Перед этим сообщение дополняется: к нему добавляется бит «1», затем нули, а в конце — 64-битное представление исходной длины. Далее выполняется 64 раунда, в которых применяются нелинейные функции, побитовые операции и циклические сдвиги.
На каждом раунде обновляются четыре 32-битных переменных (A, B, C, D), которые в конце объединяются в итоговый 128-битный хеш. Полное описание алгоритма выходит за рамки статьи, но для практики достаточно понимать: MD5 — это «чёрный ящик», который быстро превращает любые данные в 32-символьную строку.
Пример вычисления MD5
// На Node.js
const crypto = require('crypto');
const hash = crypto.createHash('md5').update('hello').digest('hex');
console.log(hash);
// => 5d41402abc4b2a76b9719d911017c592
const hash2 = crypto.createHash('md5').update('hello!').digest('hex');
console.log(hash2);
// => e7d8b3c5d6f8b6d3b3e3e3b8f3a3d3e3 (лавинный эффект)Как посчитать MD5 в Windows, macOS и Linux
Для контрольной суммы хеш не обязательно считать кодом — в каждой системе есть штатная утилита, устанавливать ничего не нужно. Схема всегда одна: открыть терминал, выполнить команду с путём к файлу, сравнить полученные 32 символа с суммой из исходника — с сайта разработчика, письма или файла контрольных сумм.
| Система | Команда | Что учесть |
|---|---|---|
| Windows, командная строка | certutil -hashfile file.iso MD5 | печатает хеш заглавными буквами |
| Windows, PowerShell | Get-FileHash -Algorithm MD5 .\file.iso | по умолчанию считает SHA-256, алгоритм задают явно; в Windows 11 доступна из коробки |
| macOS | md5 file.iso | ответ в формате «MD5 (file.iso) = …» |
| Linux | md5sum file.iso | печатает «хеш имя_файла» — удобно для пачки файлов |
Разберу Windows по шагам, как самый частый случай. Нажмите Win+R, введитеcmd, Enter. В консоли наберитеcertutil -hashfile "C:\Users\you\Downloads\file.iso" MD5 — путь с пробелами берите в кавычки, а проще всего перетащить файл прямо в окно, путь вставится сам. Через пару секунд утилита напечатает хеш. В PowerShell то же самое делает Get-FileHash -Algorithm MD5 .\file.iso. Одна тонкость: если в системе включён криптографический режим FIPS, PowerShell MD5 считать откажется — тогда остаётся certutil.
На macOS откройте Терминал (Программы → Утилиты) и введите md5 file.iso — файл тоже можно перетащить в окно. На Linux команда та же с точностью до имени:md5sum file.iso. Для нескольких файлов удобнее записать суммы в файл и проверить их одной командой уже после копирования:
md5sum *.iso > sums.md5
# на другой машине:
md5sum -c sums.md5
# file.iso: OK — или FAILED, если файл изменилсяПри сравнении регистр букв не важен: certutil пишет заглавными, md5sum — строчными, это один и тот же хеш. И ещё маркер, который сэкономил мне не один вечер: сумма d41d8cd98f00b204e9800998ecf8427e — это хеш пустого файла. Увидели её — значит, команда отработала не по тому пути: файл не нашёлся, промахнулись папкой или загрузка пришла нулевой длины.
Сверку с суммой разработчика, различия форматов вывода и типовые ошибки сравнения мы разбираем отдельно винструкции по проверке контрольных сумм — там же о том, когда несовпадение действительно означает подмену.
Где MD5 ещё применяется
Несмотря на уязвимости, MD5 не исчез полностью. Вот где он всё ещё встречается:
- Контрольные суммы файлов. Многие торрент-трекеры и репозитории пакетов публикуют MD5-суммы для проверки целостности скачивания.
- ETag в HTTP. Веб-серверы часто вычисляют ETag как MD5 от содержимого ресурса.
- Гриндфест-хеши в Gravatar. Аватарки сервиса привязаны к MD5 от email пользователя.
- Кэш-ключи. В качестве идентификатора блоба в кэше или CDN.
- Неинтерактивные контрольные суммы. Когда защита от целенаправленной подделки не требуется.
| Сценарий | Подходит ли MD5 | Альтернатива |
|---|---|---|
| Проверка случайного повреждения файла | Да | CRC32, MD5 |
| Проверка целостности при передаче | С оговорками | SHA-256 |
| Хранение паролей | Нет | bcrypt, argon2 |
| Цифровая подпись | Нет | SHA-256, SHA-512 |
| SSL-сертификаты | Нет | SHA-256 |
Коллизии и уязвимости
Коллизия — это ситуация, когда два разных сообщения дают одинаковый хеш. В 2004 году китайские исследователи под руководством Сяоюня Вана опубликовали метод построения коллизий MD5 за секунды. С тех пор алгоритм считается криптографически сломанным.
Основные векторы атак на MD5:
- Коллизии: можно создать два разных файла с одинаковым MD5.
- Выборочный префикс: исследователи Marc Stevens и др. показали, что можно создать два PKI-сертификата с одинаковым MD5.
- Радужные таблицы: для коротких паролей MD5-хеш взламывается за секунды.
- GPU-перебор: современная видеокарта вычисляет до 50 миллиардов MD5 в секунду.
Пример коллизии
// Два разных 128-байтовых блока дают одинаковый MD5
// (найдено исследователем Marc Stevens)
const a = Buffer.from('d131dd02c5e6eec4693d9a0698aff95c' +
'2fcab58712467eab4004583eb8fb7f89', 'hex');
const b = Buffer.from('d131dd02c5e6eec4693d9a0698aff95c' +
'2fcab50712467eab4004583eb8fb7f89', 'hex');
crypto.createHash('md5').update(a).digest('hex');
crypto.createHash('md5').update(b).digest('hex');
// Оба возвращают одинаковый хеш 79054025255fb1a26e4bc422aef54eb4Почему MD5 сломан для безопасности
Взлом MD5 — не одномоментное событие, а история длиной в пятнадцать лет. Она стоит того, чтобы проследить её по датам: из неё понятно, откуда взялись нынешние запреты.
- 1996. Ханс Доббертин находит псевдоколлизию в компрессионной функции MD5 и рекомендует задуматься о переходе на другие хеши. Первый звонок, оставшийся без последствий.
- 2004. Команда Сяоюня Вана публикует практический метод построения коллизий — с этого момента два разных сообщения с одинаковым MD5 перестают быть теорией.
- 2008. Стивенс, Сотиров, Аппельбаум и коллеги через выбранную префиксную коллизию создают поддельный корневой сертификат несуществующего удостоверяющего центра, которому браузеры доверяли бы автоматически. Публичная демонстрация на конференции CCC.
- 2009–2011. Браузеры и удостоверяющие центры отказываются от MD5 в сертификатах, NIST запрещает MD5 для цифровых подписей.
- 2012. Вирус Flame подделывает подпись Microsoft, использовав MD5-коллизию в сертификате лицензирования терминальных служб, — первый известный случай, когда коллизию применили в реальной атаке, а не в лаборатории.
Механика угрозы простая. Коллизию готовят заранее: злоумышленник конструирует два файла с одинаковым MD5 — безобидный документ и модифицированный. Вы подписываете первый, а подпись автоматически «действует» и на второй, потому что их хеши неразличимы. Для контрольной суммы загрузки это не страшно — там файл никто специально не подбирает. Для подписей и сертификатов это приговор, и именно поэтому их запретили.
При этом списывать MD5 со счетов целиком неверно. Там, где входные данные не контролирует противник, он по-прежнему рабочий инструмент. Я держу в голове короткое правило: MD5 защищает от случайностей, но не от зла.
| Задача | MD5 подходит? | Чем заменить |
|---|---|---|
| Сверить скачанный архив с суммой с официального сайта | Да, но если сайт отдаёт SHA-256 — берите его | SHA-256 |
| Дедупликация файлов в своём хранилище | Да — данные не враждебные | SHA-256, если файлы загружают посторонние |
| Кэш-ключи, ETag, внутренние идентификаторы | Да | — |
| Пароли | Нет | argon2id, bcrypt |
| Подпись кода и документов | Нет | SHA-256 и новее |
| TLS-сертификаты | Нет, выпуск запрещён | SHA-256 |
Одна оговорка к строке про сверку загрузок: она защищает от битой раздачи и подмены на зеркале, но не от взломанного сайта разработчика. Если атакующий контролирует и файл, и страницу с суммой, совпадение ничего не доказывает — поэтому серьёзные проекты публикуют суммы по HTTPS и подписывают релизы.
Почему MD5 нельзя использовать для паролей
Главная причина — скорость. MD5 спроектирован быстрым, поэтому атакующий с GPU может перебирать миллиарды комбинаций в секунду. Для проверки целостности файла скорость полезна, для хранения паролей — фатальна.
Даже добавление «соли» (случайной строки, добавляемой к паролю перед хешированием) не спасает ситуацию: она защищает от радужных таблиц, но не от прямого перебора. Для паролей нужны медленные функции — bcrypt, scrypt, argon2. Они намеренно тратят десятки миллисекунд на каждый хеш, делая массовый перебор экономически нецелесообразным.
Сравнение скорости
| Алгоритм | Хешей/сек (RTX 4090) | Годен для паролей |
|---|---|---|
| MD5 | ~50 млрд | Нет |
| SHA-256 | ~15 млрд | Нет |
| bcrypt (cost=12) | ~200 | Да |
| argon2id | ~50 | Да (рекомендуется) |
Чем заменить MD5
Если ваша задача — контроль целостности, используйтеSHA-256 или SHA-512. Они не имеют известных практических коллизий и поддерживаются во всех современных языках программирования. Подробнее о сравнении алгоритмов читайте в нашей статье«Сравнение хеш-функций».
Если речь идёт о паролях — выбирайте bcrypt, scrypt или argon2. Эти алгоритмы специально замедлены и устойчивы к атакам на GPU/ASIC. Хотите убедиться, что ваш пароль действительно стойкий? Сгенерируйте его вгенераторе паролей.
Миграция с MD5
Если вы унаследовали проект с MD5-хешами паролей, план миграции простой:
- Добавьте новое поле в БД:
password_hash_new. - При следующем входе пользователя вычислите bcrypt от введённого пароля и сохраните в новом поле.
- Пометьте старый MD5 как устаревший.
- Через некоторое время удалите старые хеши.
Такой «ленивый» подход не требует принудительного сброса паролей всем пользователям и постепенно выводит MD5 из оборота.
Частые вопросы
Как посчитать MD5-сумму файла в Windows?
Откройте командную строку: Win+R, введите cmd, Enter. Затем выполнитеcertutil -hashfile "путь\к\файлу.iso" MD5. В PowerShell то же делаетGet-FileHash -Algorithm MD5 "путь\к\файлу.iso" — в Windows 11 утилита доступна сразу, без установки. На выходе 32 шестнадцатеричных символа; сверять их с исходной суммой лучше целиком, а не глазами по первым знакам.
Можно ли расшифровать MD5-хеш?
Нет. MD5 однонаправлен: из 32 символов исходные данные не восстанавливаются. Сервисы, обещающие «расшифровку MD5», на самом деле ищут вашу строку в заранее собранных таблицах известных пар «строка — хеш». Короткий пароль вродеqwerty123 они выдадут мгновенно, длинную случайную строку — нет. Правильный вывод не «расшифровка невозможна», а «хешировать пароли MD5 нельзя»: перебор на видеокартах добивает и то, чего в таблицах нет.
Чем MD5 отличается от SHA-256?
Длиной и стойкостью. MD5 выдаёт 128 бит (32 hex-символа), SHA-256 — 256 бит (64 символа). Для MD5 коллизии строятся на обычном железе, для SHA-256 практических коллизий не найдено. MD5 при этом чуть быстрее, но на фоне гигабайтного файла разница — доли секунды, и экономить их ценой стойкости нет смысла. Посчитать SHA-256 для строки можно в нашемSHA-256-генераторе, а развёрнутое сравнение — в таблице сравнения хеш-функций.
Заключение
MD5 — классика криптографии, но его время ушло. Для контрольных сумм случайных повреждений он ещё годится, но для всего, что касается безопасности — нет. Никогда не используйте MD5 для хранения паролей, цифровых подписей или сертификатов: это равносильно использованию замка из фольги. Современные альтернативы — SHA-256 для целостности и bcrypt/argon2 для паролей — надёжнее и не медленнее в реальных сценариях. А проверить, как выглядит хеш любого файла или строки в разных алгоритмах, можно в нашем MD5-генераторе.
Попробуйте эти инструменты
Похожие статьи
Как создать надёжный пароль: генератор паролей
Правила создания паролей, длина, символы, энтропия, менеджеры паролей, двухфакторная аутентификация.
SHA-256 — что это такое простыми словами: как работает и где применяется
SHA-256 — что это за хеш простыми словами: как работает алгоритм, где применяется (биткоин, SSL, подписи), чем отличается от MD5 и SHA-1.
UUID — что это такое: версии, GUID и чем они отличаются
UUID — что это такое простыми словами: устройство идентификатора, версии v4 и v7, чем GUID отличается от UUID и где идентификаторы используются.
Bcrypt: правильное хеширование паролей
Почему bcrypt для паролей, salt, cost factor, сравнение с SHA, лучшие практики безопасности.