MD5 pret SHA-256: atšķirības un ieteikumi

MD5 un SHA-256 ir divas kriptogrāfiskas jaucējfunkcijas. Viņi izveidot fiksēta izmēra pirkstu nospiedumu no patvaļīga izmēra ievades. Mēs viņus satiekam visur: failu integritātes pārbaude, paraksti, unikālie identifikatori, TLS sertifikāti, blokķēde. Tomēr to drošības statuss ir ļoti atšķirīgs: MD5 ir salauzts kopš 2004. gada kriptogrāfijas vajadzībām SHA-256 joprojām ir drošs 2026. gadā. Šajā rakstā ir sniegts kopsavilkums.

Atgādinājums par jaucējfunkcijām

Kriptogrāfiskā jaukšanas funkcija jebkura garuma ziņojumu pārveido par pirkstu nospiedumu fiksēta izmēra. Trīs paredzamie īpašumi:

  • Priekšattēla pretestība: ņemot vērā jaukto, ir jābūt neiespējamam atrast sākotnējo ziņojumu.
  • Otrā priekštēla pretestība: ņemot vērā ziņojumu, nav iespējams atrast citu, kas rada tādu pašu jaucējfunkciju.
  • Sadursmes pretestība: ir jābūt neiespējamam atrast divus atšķirīgus ziņojumus, kas rada vienu un to pašu jaucējkodu.

Tiek uzskatīts, ka funkcija ir sabojāta, tiklīdz kāda no šīm īpašībām krītas. MD5, izturība pret sadursmes samazinājās 2004. gadā.

MD5: 128 biti, bojāts kopš 2004. gada

MD5 (Message Digest 5) ir funkcija, ko 1991. gadā izstrādāja Ronalds Rivests un standartizēts ar RFC 1321. Viņa ražo 128 bitu pirkstu nospiedums (16 baiti, 32 heksadecimālās rakstzīmes).

2004. gadā Wang un Yu publicēja uzbrukumu, kas dažu stundu laikā izraisīja MD5 sadursmes datorā. Kopš tā laika sadursmes rašanās izmaksas ir samazinājušās līdz dažām sekundēm. 2008. gadā pētnieki ir izgatavojuši viltotu MD5 parakstītu SSL sertifikātu, kas atzīts par derīgu visās pārlūkprogrammās. 2012. gadā Flame ļaunprogrammatūra izmantoja MD5 sadursmi, lai parakstītu savu izpildāmo failu kā Microsoft bināro failu likumīgs.

Secinājums: MD5 vairs nevajadzētu izmantot, tiklīdz uzbrucējs var ietekmēt ievadi. Visi kriptogrāfijas lietojumi (paraksti, integritāte pret pretinieku, atslēgu atvasināšana) ir izslēgts. Tikai daži lietojumi bez naidīguma paliek pieņemami, piemēram, tīkla pārsūtīšanas kontrolsumma vai kešatmiņas atslēga: MD5 joprojām ir ātrs, un netīša sadursme saglabājas statistiski neiespējami.

SHA-256: 256 biti, drošs 2026. gadā

SHA-256 pieder SHA-2 saimei, ko NIST publicēja 2001. gadā un standartizēja. ar FIPS 180-4. Viņa ražo 256 bitu pirkstu nospiedums (32 baiti, 64 heksadecimālās rakstzīmes).

Nav zināmi praktiski uzbrukumi pret SHA-256. Labākais teorētiskais uzbrukums sadursmēm attiecas uz 31 kārtu no 64, bez praktiskas ietekmes. Brutālā spēka izmaksas, lai atrastu sadursmi ir aptuveni 2^128 operācijas, kas nav pieejamas nevienai zināmai infrastruktūrai.

SHA-256 tiek izmantots: TLS (X.509 sertifikāti), Git (kopš SHA-256 pārejas), Bitcoin (pierādījums darbs), Linux pakotnes paraksti, Windows atjaunināšana utt. Šodien ir hash Ieteicams pēc noklusējuma lielākajai daļai vispārīgu kriptogrāfijas lietojumu.

Praktiskās atšķirības

Izvades garums

MD5 ("sveiki") = 5d41402abc4b2a76b9719d911017c592 (32 hex rakstzīmes)
SHA-256("sveiki") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 hex rakstzīmes)

Ātrums

MD5 ir aptuveni 2–3 reizes ātrāks nekā SHA-256 tajā pašā mašīnā. Uz moderna CPU, MD5 apstrādā vairākus GB/s uz kodolu, SHA-256 ir GB/s kārtībā. Jaunajos CPU ar paplašinājumu SHA-NI, atstarpe strauji samazinās.

Drošība

Šī ir vienīgā atšķirība, kas patiešām ir svarīga: MD5 ir salauzts sadursmju dēļ, SHA-256 nav. Ja uz spēles ir likta drošība pret pretinieku, izvēle ir skaidra.

Salīdzināšanas tabula

Kritērijs MD5 SHA-256
Gads19912001
Izvades lielums128 biti / 32 heks.256 biti / 64 heksadeši
Sadursmes pretestībaSabojāta kopš 2004. gadaNav praktiska uzbrukuma
Relatīvais ātrums2 līdz 3 reizes ātrāksAtsauce
Aparatūras paātrinājumsNav paredzētaSHA-NI jaunākajos CPU
Kriptogrāfiska izmantošanaNav ieteicamsIeteicams
Nenaidīgs integritātes lietojumsPieņemamsIeteicams
Atbilstība normatīvajiem aktiemNoraidīts (PCI-DSS, FIPS)Pieņemts

Lietošanas gadījumi

Kad MD5 joprojām ir pieņemams

  • Lietojumprogrammas kešatmiņas atslēga (Redis, saglabāta atmiņā) bez drošības ietekmes
  • Dublikāta noteikšana ne-naidīgā datu kopā
  • Tīkla pārsūtīšanas kontrolsumma, lai noteiktu nejaušu bojājumu
  • Ķēdes nospiedums izplatīšanai (sadalīšanai) bez sāncensības ierobežojumiem

Kad ir nepieciešams SHA-256

  • Integritātes pārbaude pret uzbrucēju (parakstītas lejupielādes, pakotnes)
  • Digitālie paraksti, X.509 sertifikāti
  • Saistību un objektu Git identifikatori
  • Atslēgas atvasināšana (kombinācijā ar HKDF)
  • Jebkura lietojumprogramma, uz kuru attiecas normatīvās prasības (PCI-DSS, ANSSI, FIPS)

Konkrēti piemēri

PHP abas funkcijas ir pieejamas, izmantojot funkciju hash():

// Virknes nospiedums
$md5 = hash('md5', 'sveika pasaule');
$sha256 = hash('sha256', 'sveika pasaule');

// Faila pirksta nospiedums (straumēšana)
$md5File = hash_file('md5', '/ceļš/uz/failu.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');

Jūs varat ģenerēt šīs izdrukas tieši tiešsaistē, izmantojot mūsu teksta jaukšanas ģenerators, jaukt failu ar failu jaukšanas ģenerators, vai identificējiet nezināmu jaukšanas veidu ar jaukšanas identifikatoru.

Ieteikums

Noteikums 2026 ir vienkāršs: SHA-256 pēc noklusējuma. MD5 vairs nevajadzētu parādīties kodu, tiklīdz uzbrucējs var ietekmēt ievadi, kas aptver gandrīz visus gadījumus serveris. MD5 izcilā veiktspēja vairs neattaisno tā izmantošanu, atšķirība ir kļuvusi niecīga ar SHA-NI paātrinājumu mūsdienu x86 un ARM CPU.

Bieži uzdotie jautājumi

Vai MD5 joprojām ir drošs parolēm?

Nē, nekad. Un šis punkts nav atkarīgs no sadursmēm: MD5 ir pārāk ātrs. GPU izjauc vairākus miljardus MD5 jaucēju sekundē, izdarot jebkuru uzbrukumu vārdnīca vai triviāls brutāls spēks. Parolēm izmantojiet bcrypt, Argon2 vai scrypt (skatiet mūsu Bcrypt un Argon2 salīdzinājumu).

Kāda ir atšķirība starp SHA-256 un SHA-2?

SHA-2 ir ģimene, SHA-256 ir loceklis. Saime ietver SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 un SHA-512/256. Tie atšķiras pēc izvades lieluma un faila lieluma. iekšējie bloki. SHA-256 ir visbiežāk izmantotais variants.

Vai mums vajadzētu pāriet uz SHA-3?

Nav obligāti. SHA-3 (izlaists 2015. gadā) balstās uz radikāli atšķirīgu konstrukciju (Keccak/sūklis), bet SHA-256 joprojām ir drošs. SHA-3 galvenokārt kalpo kā plāns B problēmu gadījumā negaidīti SHA-2. Izvēlieties SHA-3, ja to pieprasa standarts vai ja vēlaties daudzveidību kriptogrāfijas. Pretējā gadījumā SHA-256 joprojām ir standarta izvēle.

Vai mēs varam mainīt MD5 vai SHA-256 jaukšanu?

Nē, pēc konstrukcijas: hash zaudē informāciju. MD5 “atšifrēšanas” vietnes to nedara nekā vaicājot ierakstiem milzīgās iepriekš aprēķinātās jaukšanas bāzes (varavīksnes tabulas) kopīgs. Gariem nejaušiem datiem ieraksta atrašana nav iespējama ar abiem algoritmi.

Vai SHA-256 sabojās kvantu dators?

Grovera algoritms uz pusi samazina efektīvo jaucējvārdu drošību pret uzbrucēju kvants: tad SHA-256 piedāvātu aptuveni 128 bitu drošību, kas lielākoties paliek pietiekami. Atšķirībā no asimetriskas kriptogrāfijas jaucējkrājuma pusē nav nekādas steidzamības.