MD5 срещу SHA-256: разлики и препоръки
MD5 и SHA-256 са две криптографски хеш функции. Те създава пръстов отпечатък с фиксиран размер от вход с произволен размер. Срещаме ги навсякъде: проверка на целостта на файла, подписи, уникални идентификатори, TLS сертификати, блокчейн. Техният статус на сигурност обаче е много различен: MD5 е повреден от 2004 г. за криптографски цели, SHA-256 остава защитен през 2026 г. Тази статия прави преглед.
Напомняне за хеш функциите
Криптографска хеш функция трансформира съобщение с произволна дължина в пръстов отпечатък с фиксиран размер. Три очаквани свойства:
- Устойчивост на предварително изображение: като се има предвид хеш, трябва да е невъзможно да се намери оригиналното съобщение.
- Съпротивление на второ предобразно изображение: дадено съобщение трябва да е невъзможно да се намери друго, което произвежда същия хеш.
- Устойчивост на сблъсък: трябва да е невъзможно да се намерят две различни съобщения, които произвеждат един и същ хеш.
За една функция се казва, че е счупена веднага щом едно от тези свойства падне. За MD5, устойчивост на сблъсъци паднаха през 2004 г.
MD5: 128 бита, повреден от 2004 г
MD5 (Съобщение 5) е функция, проектирана от Роналд Ривест през 1991 г. и стандартизиран от RFC 1321. Тя произвежда 128-битов отпечатък (16 байта, 32 шестнадесетични знака).
През 2004 г. Wang и Yu публикуваха атака, която доведе до сблъсъци на MD5 в рамките на часове на компютър. Оттогава разходите за генериране на сблъсък са паднали до няколко секунди. През 2008 г. изследователите са произвели фалшив MD5 подписан SSL сертификат, признат за валиден от всички браузъри. През 2012 г., Зловреден софтуер Flame използва сблъсък на MD5, за да подпише изпълнимия си файл като двоичен файл на Microsoft легитимен.
Заключение: MD5 вече не трябва да се използва, щом нападателят може да повлияе на входа. Всички криптографски употреби (подписи, интегритет срещу противник, извличане на ключ) са изключени. Само няколко употреби без враждебност остават приемливи, като контролна сума за мрежов трансфер или кеш ключ: MD5 остава бърз и неволният сблъсък остава статистически невъзможно.
SHA-256: 256 бита, защитен през 2026 г
SHA-256 принадлежи към семейството SHA-2, публикувано от NIST през 2001 г. и стандартизирано от FIPS 180-4. Тя произвежда 256-битов отпечатък (32 байта, 64 шестнадесетични знака).
Не са известни практически атаки срещу SHA-256. Най-добрата теоретична атака срещу сблъсъци засяга 31 кръга от 64, без практическо значение. Цената на грубата сила за намиране на сблъсък е от порядъка на 2^128 операции, извън обсега на всяка известна инфраструктура.
SHA-256 се използва в: TLS (X.509 сертификати), Git (от прехода на SHA-256), Bitcoin (доказателство работа), подписи на Linux пакети, Windows Update и т.н. Днес е хешът Препоръчва се по подразбиране за повечето общи криптографски употреби.
Практически разлики
Дължина на изхода
MD5("здравей") = 5d41402abc4b2a76b9719d911017c592 (32 шестнадесетични знака)
SHA-256("здравей") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 шестнадесетични знака)
Скорост
MD5 е около 2-3 пъти по-бърз от SHA-256 на същата машина. На модерен процесор, MD5 обработва няколко GB/s на ядро, SHA-256 е от порядъка на GB/s. На скорошни процесори с разширение SHA-NI, празнината рязко се стеснява.
Сигурност
Това е единствената разлика, която наистина има значение: MD5 е повреден за сблъсъци, SHA-256 не е. Ако безопасността срещу противник е заложена на карта, изборът е ясен.
Сравнителна таблица
| Критерий | MD5 | SHA-256 |
|---|---|---|
| Година | 1991 | 2001 |
| Изходен размер | 128 бита / 32 шестнадесетичен | 256 бита / 64 шестнадесетичен |
| Устойчивост на сблъсък | Счупен от 2004 г. | Няма практическа атака |
| Относителна скорост | 2 до 3 пъти по-бързо | Справка |
| Хардуерно ускорение | Няма специален | SHA-NI на скорошни процесори |
| Криптографска употреба | Не се препоръчва | Препоръчва се |
| Използване на невраждебна цялост | Приемливо | Препоръчително |
| Съответствие с нормативните изисквания | Отказано (PCI-DSS, FIPS) | Прието |
Случаи на употреба
Когато MD5 остава приемлив
- Ключ за кеша на приложението (Redis, memcached) без последици за сигурността
- Откриване на дубликат в невражески набор от данни
- Контролна сума на мрежов трансфер за откриване на случайна повреда
- Отпечатък на верига за разпространение (шардинг) без конкурентно ограничение
Когато се изисква SHA-256
- Проверка на целостта срещу нападател (подписани изтегляния, пакети)
- Цифрови подписи, X.509 сертификати
- Git идентификатори на ангажименти и обекти
- Извличане на ключ (в комбинация с HKDF)
- Всяко приложение, предмет на нормативни изисквания (PCI-DSS, ANSSI, FIPS)
Конкретни примери
В PHP и двете функции са достъпни чрез функцията hash():
// Отпечатък на низ
$md5 = хеш('md5', 'здравей свят');
$sha256 = hash('sha256', 'здравей свят');
// Пръстов отпечатък на файл (поточно предаване)
$md5File = hash_file('md5', '/path/to/file.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');
Можете да генерирате тези разпечатки директно онлайн с нашия генератор на текстов хеш, хеширайте файл с генератор на хеш файлове, или идентифицирайте неизвестен хеш тип с хеш идентификатор.
Препоръка
Правило 2026 е просто: SHA-256 по подразбиране. MD5 вече не трябва да се появява в вашия код веднага щом нападателят може да повлияе на входа, което обхваща почти всички случаи сървър. Превъзходното представяне на MD5 вече не оправдава използването му, разликата е станала незначителна с SHA-NI ускорения, присъстващи на модерни x86 и ARM процесори.
Често задавани въпроси
безопасен ли е все още MD5 за пароли?
Не, никога. И тази точка не зависи от сблъсъци: MD5 е твърде бърз. GPU разбива няколко милиарда MD5 хеша в секунда, правейки всяка атака речник или тривиална груба сила. За пароли използвайте bcrypt, Argon2 или scrypt (вижте нашето сравнение на Bcrypt срещу Argon2).
Каква е разликата между SHA-256 и SHA-2?
SHA-2 е семейството, SHA-256 е член. Семейството включва SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 и SHA-512/256. Те се различават по изходен размер и размер на файла. вътрешни блокове. SHA-256 е най-използваният вариант.
Трябва ли да преминем към SHA-3?
Не е задължително. SHA-3 (издаден през 2015 г.) разчита на коренно различна конструкция (Keccak/гъба), но SHA-256 остава безопасен. SHA-3 служи главно като план Б в случай на проблеми неочаквано на SHA-2. Изберете SHA-3, ако стандарт го изисква или ако искате разнообразие криптографски. В противен случай SHA-256 остава стандартният избор.
Можем ли да обърнем MD5 или SHA-256 хеш?
Не, по конструкция: хешът губи информация. Сайтовете за „дешифриране“ на MD5 не го правят отколкото запитване до гигантски бази от предварително изчислени хешове (дъгови таблици) за записи общ. За дълги произволни данни намирането на записа е невъзможно и с двете алгоритми.
Ще бъде ли разбит SHA-256 от квантов компютър?
Алгоритъмът на Grover намалява наполовина ефективната сигурност на хешовете срещу нападател квантово: SHA-256 тогава ще предложи около 128 бита сигурност, което остава до голяма степен достатъчно. Няма спешност от страна на хеша, за разлика от асиметричната криптография.