MD5 vs SHA-256: különbségek és ajánlások

Az MD5 és az SHA-256 két kriptográfiai hash függvény. Ők fix méretű ujjlenyomatot állíthat elő egy tetszőleges méretű bemenetről. Találkozunk velük mindenhol: fájl integritásának ellenőrzése, aláírások, egyedi azonosítók, TLS-tanúsítványok, blokklánc. A biztonsági állapotuk azonban nagyon eltérő: az MD5 elromlott 2004 óta kriptográfiai célokra az SHA-256 2026-ban is biztonságos marad. Ez a cikk áttekinti.

Emlékeztető a hash függvényekről

A kriptográfiai hash függvény bármilyen hosszúságú üzenetet ujjlenyomattá alakít át fix méretű. Három várható ingatlan:

  • Preimage-ellenállás: ha egy hash-t kapunk, akkor lehetetlennek kell lennie az eredeti üzenet megtalálásához.
  • Második előkép-ellenállás: ha egy üzenetet kap, lehetetlennek kell lennie olyan másikat találni, amely ugyanazt a hash-t produkálja.
  • Ütközésállóság: lehetetlennek kell lennie két különböző üzenet megtalálása, amelyek ugyanazt a hash-t eredményezik.

Egy függvényről azt mondják, hogy megszakad, amint ezek közül a tulajdonságok közül valamelyik kiesik. MD5 esetén ellenállás a Az ütközések 2004-ben csökkentek.

MD5: 128 bites, 2004 óta törött

Az MD5 (Message Digest 5) egy Ronald Rivest által 1991-ben és az RFC 1321 szabvány szerint. Ő termel 128 bites ujjlenyomat (16 bájt, 32 hexadecimális karakter).

2004-ben Wang és Yu közzétett egy támadást, amely órákon belül MD5 ütközéseket produkált egy PC-n. Azóta az ütközés generálásának költsége néhány másodpercre csökkent. 2008-ban a kutatók hamis MD5 aláírt SSL tanúsítványt gyártottak, amelyet minden böngésző érvényesnek ismer el. 2012-ben a A Flame malware MD5 ütközést használt, hogy Microsoft binárisként írja alá a végrehajtható fájlját jogos.

Következtetés: Az MD5-öt már nem szabad használni, amint egy támadó befolyásolni tudja a bemenetet. Minden kriptográfiai felhasználás (aláírások, ellenféllel szembeni integritás, kulcsok származtatása) az kizárva. Csak néhány ellenségeskedés nélküli felhasználás marad elfogadható, például a hálózati átvitel ellenőrző összege vagy gyorsítótár kulcsa: az MD5 gyors marad, és a véletlen ütközés statisztikailag megmarad lehetetlen.

SHA-256: 256 bit, biztonságos 2026-ban

Az SHA-256 a NIST által 2001-ben közzétett és szabványosított SHA-2 családhoz tartozik írta: FIPS 180-4. Ő termel 256 bites ujjlenyomat (32 bájt, 64 hexadecimális karakter).

Gyakorlati támadások nem ismertek az SHA-256 ellen. A legjobb elméleti támadás ütközések ellen 64-ből 31 fordulóra vonatkozik, gyakorlati vonatkozások nélkül. Az ütközés megtalálásának brute force költsége 2^128 művelet nagyságrendű, minden ismert infrastruktúra elérhetőségén kívül esik.

Az SHA-256 használatos: TLS (X.509 tanúsítványok), Git (az SHA-256 átállás óta), Bitcoin (proof) munka), Linux csomag aláírások, Windows Update, stb. Ma van a hash alapértelmezés szerint ajánlott az általános kriptográfiai felhasználások többségéhez.

Gyakorlati különbségek

Kimeneti hossz

MD5("hello") = 5d41402abc4b2a76b9719d911017c592 (32 hexadecimális karakter)
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 hexa karakter)

Sebesség

Az MD5 körülbelül 2-3-szor gyorsabb, mint az SHA-256 ugyanazon a gépen. Egy modern CPU-n, MD5 magonként több GB/s-ot dolgoz fel, az SHA-256 GB/s nagyságrendű. Legutóbbi bővítményű CPU-kon SHA-NI, a rés erősen szűkül.

Biztonság

Ez az egyetlen különbség, ami igazán számít: az MD5 eltörik az ütközések miatt, Az SHA-256 nem. Ha az ellenféllel szembeni biztonság forog kockán, a választás egyértelmű.

Összehasonlító táblázat

Kritérium MD5 SHA-256
Év19912001
Kimeneti méret128 bit / 32 hex.256 bit / 64 hex
Ütközésállóság2004 óta töröttNincs gyakorlati támadás
Relatív sebesség2-3-szor gyorsabbReferencia
Hardveres gyorsításNincs dedikáltSHA-NI a legújabb CPU-kon
Rejtjelezési használatNem ajánlottAjánlott
Nem ellenséges integritás használatElfogadhatóJavasolt
Szabályozási megfelelőségElutasítva (PCI-DSS, FIPS)Elfogadva

Használati esetek

Ha az MD5 továbbra is elfogadható

  • Alkalmazás-gyorsítótár kulcsa (Redis, memcached) biztonsági vonatkozások nélkül
  • Duplikált észlelés egy nem ellenséges adatkészletben
  • Hálózati átvitel ellenőrző összege a véletlen sérülés észlelésére
  • Egy lánc lábnyoma a disztribúcióhoz (sharding) ellentétes megkötés nélkül

Ha szükséges az SHA-256

  • Támadókkal szembeni integritás ellenőrzése (aláírt letöltések, csomagok)
  • Digitális aláírások, X.509-tanúsítványok
  • A véglegesítések és objektumok Git azonosítói
  • Kulcs származtatás (a HKDF-fel kombinálva)
  • Minden olyan alkalmazás, amelyre szabályozási követelmények vonatkoznak (PCI-DSS, ANSSI, FIPS)

Konkrét példák

A PHP-ben mindkét függvény elérhető a hash() függvényen keresztül:

// Egy karakterlánc lenyomata
$md5 = hash('md5', 'hello világ');
$sha256 = hash('sha256', 'hello világ');

// Fájl ujjlenyomata (adatfolyam)
$md5Fájl = hash_file('md5', '/elérési út/a/file.iso');
$sha256File = hash_file('sha256', '/elérési út/hoz/file.iso');

Ezeket a nyomatokat közvetlenül online generálhatja nálunk szövegkivonat-generátor, hash egy fájlt fájl hash generátor, vagy azonosítson egy ismeretlen hash-típust a kivonatazonosítóval.

Ajánlás

A 2026-os szabály egyszerű: SHA-256 alapértelmezés szerint. Az MD5-nek többé nem szabad megjelennie kódját, amint egy támadó befolyásolni tudja a bemenetet, ami szinte minden esetet lefed szerver. Az MD5 kiváló teljesítménye már nem indokolja a használatát, a rés elhanyagolhatóvá vált a modern x86 és ARM CPU-kon jelen lévő SHA-NI gyorsításokkal.

Gyakran ismételt kérdések

Még mindig biztonságos az MD5 jelszavakhoz?

Nem, soha. És ez a pont független az ütközésektől: az MD5 túl gyors. Egy GPU másodpercenként több milliárd MD5-kivonatot tör meg, és bármilyen támadást végrehajt szótár vagy triviális nyers erő. Jelszavakhoz használjon bcrypt, Argon2 vagy scrypt (lásd a Bcrypt vs Argon2 összehasonlítást).

Mi a különbség az SHA-256 és az SHA-2 között?

Az SHA-2 a család, az SHA-256 a tagja. A család az SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 és SHA-512/256. A kimeneti méretben és a fájlméretben különböznek. belső blokkok. Az SHA-256 a leggyakrabban használt változat.

Áttérjünk az SHA-3-ra?

Nem feltétlenül. Az SHA-3 (megjelent 2015-ben) gyökeresen eltérő konstrukcióra épül (Keccak/szivacs), de az SHA-256 biztonságos marad. Az SHA-3 főként B tervként szolgál problémák esetén váratlan az SHA-2-n. Válassza az SHA-3-at, ha egy szabvány megköveteli, vagy ha sokszínűséget szeretne kriptográfiai. Ellenkező esetben az SHA-256 marad a standard választás.

Megfordíthatjuk az MD5 vagy SHA-256 hash-t?

Nem, konstrukció szerint: a hash információkat veszít. Az MD5 „dekódoló” webhelyek nem mint az előre kiszámított hashek (szivárványtáblázatok) óriási alapjainak lekérdezése a bejegyzésekhez gyakori. Hosszú véletlenszerű adatok esetén mindkettővel lehetetlen megtalálni a bejegyzést algoritmusok.

Megtöri az SHA-256-ot egy kvantumszámítógép?

Grover algoritmusa felére csökkenti a támadókkal szembeni hashek hatékony biztonságát kvantum: Az SHA-256 körülbelül 128 bites biztonságot kínálna, ami nagyrészt megmarad elegendő. A hash oldalon nincs sürgősség, ellentétben az aszimmetrikus kriptográfiával.