MD5 ir SHA-256: skirtumai ir rekomendacijos

MD5 ir SHA-256 yra dvi kriptografinės maišos funkcijos. Jie sukurti fiksuoto dydžio pirštų atspaudus iš savavališko dydžio įvesties. Su jais susitinkame visur: failo vientisumo patikrinimas, parašai, unikalūs identifikatoriai, TLS sertifikatai, blockchain. Tačiau jų saugos būsena labai skiriasi: MD5 yra sugedęs nuo 2004 m. kriptografiniam naudojimui SHA-256 išlieka saugus 2026 m. Šiame straipsnyje apžvelgiama.

Priminimas apie maišos funkcijas

Kriptografinė maišos funkcija paverčia bet kokio ilgio pranešimą piršto atspaudu fiksuoto dydžio. Trys numatomos savybės:

  • Atsparumas prieš atvaizdą: atsižvelgiant į maišą, turi būti neįmanoma rasti pradinio pranešimo.
  • Antrojo išankstinio vaizdo pasipriešinimas: turi būti neįmanoma rasti kito, kuris sukurtų tą pačią maišą, gavus pranešimą.
  • Atsparumas susidūrimui: turi būti neįmanoma rasti dviejų skirtingų pranešimų, kurie sukuria tą pačią maišą.

Sakoma, kad funkcija sugadinta, kai tik viena iš šių savybių nukrenta. MD5 atveju atsparumas susidūrimų sumažėjo 2004 m.

MD5: 128 bitai, sugedęs nuo 2004 m

MD5 („Message Digest 5“) yra funkcija, kurią 1991 m. sukūrė Ronaldas Rivestas ir standartizuota pagal RFC 1321. Ji gamina 128 bitų piršto atspaudas (16 baitų, 32 šešioliktainiai simboliai).

2004 m. Wang ir Yu paskelbė ataką, kurios metu per kelias valandas kompiuteryje įvyko MD5 susidūrimai. Nuo tada susidūrimo sugeneravimo kaina sumažėjo iki kelių sekundžių. Tyrėjai 2008 m pagamino netikrą MD5 pasirašytą SSL sertifikatą, pripažintą galiojančiu visų naršyklių. 2012 m „Flame“ kenkėjiška programa panaudojo MD5 susidūrimą, kad pasirašytų vykdomąjį failą kaip „Microsoft“ dvejetainį failą teisėtas.

Išvada: MD5 nebeturėtų būti naudojamas, kai tik užpuolikas gali paveikti įvestį. Visi kriptografiniai naudojimo būdai (parašai, vientisumas prieš priešą, rakto išvedimas) yra neįtraukti. Tik keli naudojimo būdai be priešiškumo lieka priimtini, pavyzdžiui, tinklo perdavimo kontrolinė suma arba talpyklos raktas: MD5 išlieka greitas, o netyčinis susidūrimas išlieka statistiškai neįmanoma.

SHA-256: 256 bitai, saugus 2026 m

SHA-256 priklauso SHA-2 šeimai, kurią NIST paskelbė 2001 m. ir standartizavo pateikė FIPS 180-4. Ji gamina 256 bitų piršto atspaudas (32 baitai, 64 šešioliktainiai simboliai).

Praktinių atakų prieš SHA-256 nežinoma. Geriausia teorinė ataka prieš susidūrimus susijęs su 31 raundu iš 64, be praktinės reikšmės. Brutalia jėga kainuoja surasti susidūrimą yra 2^128 operacijos, nepasiekiamos jokiai žinomai infrastruktūrai.

SHA-256 naudojamas: TLS (X.509 sertifikatai), Git (nuo SHA-256 perėjimo), Bitcoin (įrodymas) darbas), „Linux“ paketo parašai, „Windows“ naujinimas ir kt. Šiandien yra maišos Numatytasis rekomenduojamas daugeliui bendrųjų kriptografijos naudojimo būdų.

Praktiniai skirtumai

Išvesties ilgis

MD5 („labas“) = 5d41402abc4b2a76b9719d911017c592 (32 šešioliktainiai simboliai)
SHA-256("labas") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824 (64 šešioliktainiai simboliai)

Greitis

MD5 yra maždaug 2–3 kartus greitesnis nei SHA-256 tame pačiame įrenginyje. Šiuolaikiniame CPU, MD5 apdoroja kelis GB/s vienam branduoliui, SHA-256 yra GB/s. Naujausiuose procesoriuose su plėtiniu SHA-NI, tarpas smarkiai susiaurėja.

Sauga

Tai vienintelis skirtumas, kuris tikrai svarbus: MD5 yra sugedęs dėl susidūrimų, SHA-256 nėra. Jei gresia saugumas prieš priešą, pasirinkimas yra aiškus.

Palyginimo lentelė

Kriterijus MD5 SHA-256
Metai19912001
Išvesties dydis128 bitai / 32 šešiolik.256 bitai / 64 šešiolik.
Atsparumas susidūrimuiSugadintas nuo 2004 m.Jokio praktinio puolimo
Santykinis greitis2–3 kartus greitesnisNuoroda
Aparatinės įrangos spartinimasNėra skirtaSHA-NI naujausiuose procesoriuose
Naudojimas kriptografijojeNerekomenduojamaRekomenduojama
Nepriešiškas vientisumo naudojimasPriimtinasRekomenduojama
Reglamentų laikymasisAtmesta (PCI-DSS, FIPS)Priimta

Naudojimo atvejai

Kai MD5 išlieka priimtinas

  • Programos talpyklos raktas („Redis“, išsaugotas atmintinėje) be saugumo pasekmių
  • Dubliuotas aptikimas neprieštaraujančiame duomenų rinkinyje
  • Tinklo perdavimo kontrolinė suma, siekiant aptikti atsitiktinį sugadinimą
  • Grandinės pėdsakas platinimui (suskaldymui) be priešiškumo apribojimų

Kai reikalingas SHA-256

  • Vienumo patikrinimas prieš užpuoliką (pasirašyti atsisiuntimai, paketai)
  • Skaitmeniniai parašai, X.509 sertifikatai
  • Įsipareigojimų ir objektų Git identifikatoriai
  • Raktų išvedimas (kartu su HKDF)
  • Bet kokia programa, kuriai taikomi reguliavimo reikalavimai (PCI-DSS, ANSSI, FIPS)

Konkretūs pavyzdžiai

PHP abi funkcijos pasiekiamos naudojant funkciją hash():

// Eilutės atspaudas
$md5 = hash('md5', 'labas pasauli');
$sha256 = hash('sha256', 'sveikas pasauli');

// Failo piršto atspaudas (srautinis perdavimas)
$md5Failas = hash_file('md5', '/kelias/į/failą.iso');
$sha256File = hash_file('sha256', '/path/to/file.iso');

Šiuos spaudinius galite generuoti tiesiogiai prisijungę prie mūsų teksto maišos generatorius, sumaišyti failą su failo maišos generatorius, arba identifikuokite nežinomą maišos tipą naudodami maišos identifikatorių.

Rekomendacija

2026 taisyklė paprasta: SHA-256 pagal numatytuosius nustatymus. MD5 neturėtų būti rodomas savo kodą, kai tik užpuolikas gali paveikti įvestį, kuris apima beveik visus atvejus serveris. Puikus MD5 našumas nebepateisina jo naudojimo, atotrūkis tapo nereikšmingas su SHA-NI pagreičiais, esančiais šiuolaikiniuose x86 ir ARM procesoriuose.

Dažnai užduodami klausimai

Ar MD5 vis dar saugus slaptažodžiams?

Ne, niekada. Ir šis taškas nepriklauso nuo susidūrimų: MD5 yra per greitas. GPU sulaužo kelis milijardus MD5 maišos per sekundę, sukeldamas bet kokią ataką žodynas arba triviali brute force. Slaptažodžiams naudokite bcrypt, Argon2 arba scrypt (žr. mūsų Bcrypt ir Argon2 palyginimą).

Kuo skiriasi SHA-256 ir SHA-2?

SHA-2 yra šeima, SHA-256 yra narys. Šeimą sudaro SHA-224, SHA-256, SHA-384, SHA-512, SHA-512/224 ir SHA-512/256. Jie skiriasi išvesties dydžiu ir failo dydžiu. vidiniai blokai. SHA-256 yra dažniausiai naudojamas variantas.

Ar turėtume pereiti prie SHA-3?

Nebūtinai. SHA-3 (išleistas 2015 m.) remiasi radikaliai skirtinga konstrukcija (Keccak / kempinė), tačiau SHA-256 išlieka saugus. SHA-3 daugiausia tarnauja kaip planas B iškilus problemoms netikėtas SHA-2. Pasirinkite SHA-3, jei to reikalauja standartas arba jei norite įvairovės kriptografinė. Kitu atveju SHA-256 išlieka standartiniu pasirinkimu.

Ar galime pakeisti MD5 arba SHA-256 maišą?

Ne, pagal konstrukciją: maiša praranda informaciją. MD5 „iššifravimo“ svetainės to nedaro nei gigantiškų iš anksto apskaičiuotų maišų (vaivorykštinių lentelių) užklausų įrašams bendras. Ilgiems atsitiktiniams duomenims rasti įrašo neįmanoma naudojant abu algoritmai.

Ar SHA-256 sugadins kvantinis kompiuteris?

Groverio algoritmas perpus sumažina veiksmingą maišos apsaugą nuo užpuoliko kvantas: tada SHA-256 pasiūlytų maždaug 128 bitų saugumą, kuris iš esmės išlieka pakankamai. Skirtingai nei asimetrinė kriptografija, maišos pusėje nėra jokios skubos.