Sunt nou despre criptografie, am aflat că SHA-3
(Secure Hash Algorithm 3) este cel mai recent membru al familia de standarde Secure Hash Algorithm, lansată de NIST.
Dar recent am văzut SHA-256
dar nu obțin ce este în comparație cu SHA-3
?
Comentarii
- SHA-256 este SHA-2 cu ieșire pe 256 de biți. SHA-2 este predecesorul SHA-3. Acestea împărtășesc foarte puțin dincolo de nume.
- Dar numele surprinde esența, dacă nu faceți criptografie, acestea sunt toate algoritmi Secure Hash. Reclamațiile contractuale și de securitate sunt aproape identice. .
- @MeirMaor Având în vedere existența SHA-1 care pare a fi o afirmație îndrăzneață.
- @Maeher, SHA1 a fost creat în esență cu aceleași cerințe, acum știm că nu ‘ nu le îndeplinește. Cel puțin cerințele de rezistență la coliziune. De asemenea, are o dimensiune de ieșire mai mică în timp ce SHA3 poate avea aceeași dimensiune de ieșire ca SHA2.
Răspuns
Principalele diferențe dintre SHA-256 mai vechi din familia SHA-2 din FIPS 180 și cea mai nouă SHA3-256 din familia SHA-3 din FIPS 202 , sunt:
-
Rezistență la atacuri de extensie de lungime. Cu SHA-256, dat $ H (m) $ dar nu $ m $ , este ușor de găsit $ H (m \ mathbin \ | m „) $ pentru anumite sufixe $ m” $ . Nu este așa cu oricare dintre funcțiile SHA-3.
Aceasta înseamnă, ex , că $ m \ mapsto H (k \ mathbin \ | m) $ nu este nu un cod de autentificare a mesajului securizat sub cheia $ k $ când $ H $ este SHA-256, deoarece cunoașterea autentificatorului dintr-un mesaj vă permite să falsificați autentificatorul pe altul. Proprietatea de extensie a lungimii a modificat parțial dezvoltarea HMAC.
În schimb, construcția cheii-prefix este sigură ca MAC când $ H $ este una dintre funcțiile SHA-3 – sau oricare dintre cele mai noi funcții SHA-2 SHA-512/224 și SHA-512/256. Pentru SHA-224, care este în esență trunchierea de 224 biți a SHA-256 (dar cu un IV diferit), adversarul are o șansă $ 2 ^ {- 32} $ de a ghici bucățile de ieșire aruncate într-o singură încercare – mică, dar nu neglijabilă.
-
Performanță. Funcțiile SHA-2 – în special SHA-512, SHA-512/224 și SHA-512/256 – au, în general, performanțe mai mari decât funcțiile SHA-3. În parte, acest lucru a fost din paranoia și din motive politice în procesul de proiectare SHA-3.
(Ca răspuns, unul dintre finaliștii SHA-3 a fost transformat în mult mai rapid BLAKE2 , de asemenea utilizat pe scară largă pe internet astăzi, iar câștigătorul SHA-3 Keccak a fost transformat în KangarooTwelve mult mai rapid. )
-
Design intern complet diferit. SHA-2 utilizează Davies – Structura Meyer, o instanță a structurii Merkle – Damgård, cu un cifru bloc (uneori numit SHACAL-2) construit dintr-o rețea ARX, cum ar fi MD4; SHA-3 folosește structura de burete cu permutația Keccak.
Nu există nicio diferență vizibilă de utilizator , dar a făcut o diferență pentru încrederea criptografilor în design după multe DM / Proiectele ARX bazate pe MD4 au fost rupte la sfârșitul anilor 90 și începutul anilor 2000.
Istoric. A existat o lungă linie de funcții hash standardizate de NIST în FIPS 180, Secure Hash Standard și ulterior FIPS 202¸ SHA-3 Standard: Permutation-based and Extendable-Output Funcții. Mai multe detalii și istoric, inclusiv funcțiile hash MD4 și MD5 asociate pe care s-au bazat SHA-0, SHA-1 și SHA-2 – dar nu SHA-3 -:
\ begin {equation} \ begin {array} {ccc} \ text {hash} & \ text {year} & \ text {col. res.} & \ text {size (biți)} & \ text {design} & \ text {spart?} \\ \ hline \ text {MD4} & 1990 & 64 & 128 & \ text {32-bit ARX DM} & 1995 \\ \ text {SHA-0 (SHA)} & 1993 & 80 & 160 & \ text {32 -bit ARX DM} & 1998 \\ \ text {MD5} & 1993 & 64 & 128 & \ text {32-bit ARX DM} & 2004 \\ \ text {SHA-1} & 1995 & 80 & 160 & \ text {32-bit ARX DM} & 2005 \\ \ hline \ text {SHA-256 (SHA-2)} & 2002 & 128 & 256 & \ text { 32-bit ARX DM} & \\ \ te xt {SHA-384 (SHA-2)} & 2002 & 192 & 384 & \ text {64-bit ARX DM} & \\ \ text {SHA-512 (SHA-2)} & 2002 & 256 & 512 & \ text {64-bit ARX DM} & \\ \ hline \ text {SHA-224 (SHA-2)} & 2008 & 112 & 224 & \ text {32-bit ARX DM} & \\ \ text {SHA-512/224} & 2012 & 112 & 224 & \ text {64-bit ARX DM} & \\ \ text {SHA-512/256 } & 2012 & 128 & 256 & \ text {64-bit ARX DM} & \\ \ hli ne \ text {SHA3-224} & 2013 & 112 & 224 & \ text {64-bit Keccak burete} & \\ \ text {SHA3-256} & 2013 & 128 & 256 & \ text {64-bit Keccak sponge} & \\ \ text {SHA3-384} & 2013 & 192 & 384 & \ text {64-bit Keccak burete} & \\ \ text {SHA3-512 } & 2013 & 256 & 512 & \ text {64-bit Keccak sponge} & \\ \ text {SHAKE128} & 2013 & {\ leq} 128 & \ text {any} & \ text {64-bit Keccak sponge} \\ \ text {SHAKE256} & 2013 & {\ leq} 256 & \ text {any} & \ text {64-bit Keccak sponge} \ end {array} \ end {ecuație}
-
În 1993, NIST a publicat FIPS 180 , Secure Hash Standard, definind SHA-0 , numit inițial SHA pentru Secure Hash Algorithm, destinat utilizării cu DSA nou publicat. SHA-0 este o singură funcție hash de 160 de biți care vizează securitatea coliziunii de 80 de biți (și acum complet ruptă) pe designul relativ nou și rapid al MD4 în 1990.
-
În 1995, NIST a retras în liniște FIPS 180 și l-a înlocuit cu FIPS 180-1 definind SHA-1 , care diferă de SHA-0 prin includerea unuia singur -rotație de biți. La fel ca SHA-0, SHA-1 este o singură funcție hash de 160 de biți care vizează securitatea coliziunii de 80 de biți (și acum complet ruptă).
Nu s-a dat nicio explicație publică pentru schimbare, dar nu a trecut mult timp înainte ca Eli Biham să fi publicat criptanaliza diferențială și comunitatea academică să-și dea seama că modificările NSA la casetele DES S în anii 1970, de fapt, a îmbunătățit securitatea (nu contează că au redus dimensiunea cheii de 128 de biți a lui Lucifer la 56 de biți pentru DES, distrugând complet securitatea în același timp). În același an, Dobbertin a spart MD4 [1] , iar în anul următor, MD5 grav deteriorat [2] . Nu după mult timp, în 1998, Florent Chabaud și Antoine Joux a raportat un atac de coliziune $ 2 ^ {61} $ -cost asupra SHA-0 [3] .
În 2002, NIST a publicat FIPS 180-2 , definind SHA-2 , o familie de funcții hash conexe cu dimensiuni diferite: SHA- 256, SHA-384 și SHA-512, denumite după dimensiunile lor de ieșire și care vizează, respectiv, rezistența la coliziune de 112, 128, 192 și 256 de biți. SHA -2 funcții au continuat principiile de proiectare ale MD4, MD5, SHA-0 și SHA-1, cu mai multe runde și stare mai mare. Nu după mult timp, în 2004, echipa lui Xiaoyun Wang a raportat coliziuni complete pe MD5 și alte funcții hash [4] , iar în 2005 a publicat un $ 2 ^ {69} $ -cost atac asupra SHA-1 [5] , substanțial mai ieftin decât generic. Deoarece multe dintre proiectele bazate pe MD4 au fost rupte acum, toată lumea a fost nervoasă în legătură cu acel design, așa că …
În 2007, NIST a lansat concursul SHA-3 pentru a proiecta un succesor al SHA-2, în cazul în care proiectul s-ar dovedi a fi rău. Concurența va avea loc pe parcursul mai multor ani.
Între timp, în 2008, NIST a actualizat Secure Hash Standard cu FIPS 180-3 , adăugând SHA-224 familiei SHA-2 și apoi în 2012, NIST l-a actualizat din nou cu FIPS 180-4 (2012) , adăugând SHA-512/224 și SHA-512/256 , funcții hash mai rapide de 256 de biți și 384 de biți pe mașini pe 64 de biți cu rezistență la atacurile de extensie de lungime care permit un computer $ H (m \ mathbin \ | m „) $ dat $ H (m) $ și anumite $ m” $ fără știind $ m $ .
În 2013, competiția SHA-3 s-a încheiat cu Keccak ca câștigător ales de NIST , pe care l-au publicat în FIPS 202 . SHA-3 include patru funcții hash de dimensiuni fixe, SHA3-224, SHA3-256, SHA3-384, SHA3-512 și două funcții hash cu ieșire extensibilă SHAKE128 și SHAKE256 care ating până la 128-bit sau 256 -nivel de securitate pe biți dacă ieșirea este suficient de lungă.
Designul SHA-3 este complet diferit de SHA-2, ceea ce oferă încredere că descoperirile criptanalitice pe linia proiectelor bazate pe MD4 probabil nu vor afecta SHA-3, deși la un deceniu și jumătate după baia de sânge de la începutul anilor 2000 nu există albină Nici progrese în ceea ce privește SHA-2. Parametrii aleși pentru funcțiile SHA-3 de dimensiuni fixe au fost supradiseși accidental din motive politice [6] , deci funcțiile SHA-3 precum SHA3-256 sunt mai lent decât trebuie și, în general, ar trebui să folosiți SHAKE128 sau SHAKE256.
Comentarii
- Când spune ” complet rupt „, din câte înțeleg eu, este posibil să calculezi m1 , m2 astfel încât H ( m1 ) = H ( m2 ). Cu toate acestea, nimeni nu a reușit încă, dat un mesaj fix M , să calculeze un mesaj m (care nu este egal cu M ) astfel încât H ( M ) = H ( m ).
- @MartinBonner Da, ‘ vorbesc despre rezistența la coliziune aici, motiv pentru care cele două cuvinte chiar înainte de „și acum complet rupte” sunt „securitate de coliziune”. ‘ nu abordez rezistența la preimagine aici, deoarece utilizarea în siguranță a unei funcții hash rezistente la preimagini dar nu este foarte subtil și ‘ încerc să nu las capcane pentru cititorii neatenți ; Abordez starea MD5 ‘ s preimage rezistență în altă parte când ‘ s-a întrebat în mod specific.
Răspuns
Diferența dintre SHA256 și SHA3
Principala diferență dintre SHA256 și SHA3 sunt designul algoritmului intern .
SHA2 (și SHA1) sunt construite folosind structura Merkle – Damgård .
SHA3 pe de altă parte este construit utilizând un Funcția burete și aparține familiei Keccak.
Numele ar putea fi înșelător să credem că SHA3 în comparație cu SHA2 este doar un ” versiune mai nouă ” a algoritmului. Așa cum a spus SEJPM: ” […] Ei împărtășesc foarte puțin dincolo de nume.” Numele este dat doar de la NIST și înseamnă ” Algoritm securizat de hash „, o familie de standarde oficiale.
Deși puteți construi MAC s atât cu SHA256, cât și cu SHA3, SHA3 MAC este mai ușor de utilizat (vezi comentariul lui fgrieu mai jos).
Ieșire
SHA256 generează un hash de 256 de biți.
SHA3 permite ieșiri de
- 224-bit
- 256-bit
- 384-bit
- 512-bit
hash, deși variantele SHA2 (SHA256 este una dintre aceste variante) permite și aceste lungimi.
Algoritmii SHA3 pot fi modificați la ” SHAKE ” algoritmi și permit o ieșire de lungime arbitrară. Puteți găsi informații suplimentare în această întrebare adresată anterior .
Securitate
Hash-urile care folosesc doar structura Merkle-Damgård și produc rezultatele lor Starea (sau aproape completă) este vulnerabilă la atacuri de extensie de lungime .
Algoritmii SHAKE sunt utili și pentru Completarea criptării asimetrice optime .
Puteți vedea o comparație directă aici (wikipedia) .
Comentarii
- Strict vorbind, ” Hash care folosesc Merkle – Damg å structura rd este vulnerabilă la atacurile de extensie de lungime ” este incorectă. Contraexemplele includ SHA-512/256 și SHA-384, deoarece nu produc ieșirea completă. Un alt este SHA-256d, definit ca SHA-256d (m) = SHA-256 (SHA-256 (m)), deoarece ascunde starea primului hash. Ceea ce susține este că ” Hash-uri care numai folosesc structura Merkle – Damg å rd și afișează starea lor completă (sau aproape completă) sunt vulnerabile la atacurile de extensie de lungime „. Există ‘ o altă diferență între SHA-2 și SHA-3: ulterior este mai ușor de utilizat ca MAC.
- Ce vrei să spui cu ” mai ușor de utilizat ” ca MAC? Mai sigur / mai rapid / implementare?
- Putem construi un MAC cu un argument de securitate de la SHA-3 ca $ \ text {SHA-3} (K \ | M) $ (pentru o anumită lungime de $ K $ asta depinde de varianta SHA-3 și ar trebui să fie uh, nu ‘ nu știu sigur); atunci când ‘ nu avem un astfel de argument cu SHA-2 (chiar și atunci când proprietatea de extindere a lungimii nu se aplică). Consultați secțiunea 5.1.12 din Funcții de burete criptografic .