SHA-2

SHA-2
Creată 2002
publicat 2002
Succesor Keccak
Dimensiunea hash 224, 256, 384 sau 512 biți
Numărul de runde 64 sau 80
Tip de familia de funcții hash

SHA-2 ( ing. Secure Hash Algorithm Versiunea 2  - algoritm de hashing securizat, versiunea 2) - o familie de algoritmi criptografici - funcții hash  unidirecționale , inclusiv algoritmii SHA-224, SHA-256, SHA-384, SHA-512 , SHA -512/256 și SHA-512/224 .

Funcțiile hash sunt concepute pentru a crea „amprente” sau „resumare” de mesaje de lungime arbitrară. Sunt utilizate în diverse aplicații sau componente legate de securitatea informațiilor .

Istorie

Funcțiile hash SHA-2 au fost dezvoltate de Agenția Națională de Securitate din SUA și publicate de Institutul Național de Standarde și Tehnologie în Standardul Federal de Procesare a Informației FIPS PUB 180-2 în august 2002 [1] . Acest standard a inclus și funcția hash SHA-1 , dezvoltată în 1995. În februarie 2004, SHA-224 [2] a fost adăugat la FIPS PUB 180-2 . În octombrie 2008, a fost lansată o nouă ediție a standardului - FIPS PUB 180-3 [3] . În martie 2012, a fost lansată cea mai recentă revizuire a FIPS PUB 180-4 , care a adăugat funcții SHA-512/256 și SHA-512/224 bazate pe SHA-512 (deoarece SHA-512 este mai rapid pe arhitecturile pe 64 de biți decât SHA- 256) [4] .

În iulie 2006, a apărut RFC 4634 „U.S. Secure Hash Algorithms ( SH and HMAC-SHA ) ”, care descrie SHA-1 și familia SHA-2 .

Agenția Națională de Securitate a emis în numele statului un brevet pentru SHA-2 [5] sub o licență fără drepturi de autor [6] .

Algoritm

Descriere generală

Funcțiile hash ale familiei SHA-2 sunt construite pe baza structurii Merkle-Damgor .

Mesajul original după adăugare este împărțit în blocuri, fiecare bloc în 16 cuvinte. Algoritmul trece fiecare bloc de mesaj printr-o buclă cu 64 sau 80 de iterații (runde). La fiecare iterație, 2 cuvinte sunt transformate, funcția de transformare este setată de cuvintele rămase. Rezultatele procesării fiecărui bloc se adună, suma este valoarea funcției hash. Totuși, inițializarea stării interne este rezultatul procesării blocului anterior. Prin urmare, nu puteți procesa în mod independent blocurile și adăugați rezultate. Consultați pseudocodul pentru detalii .

Comparația funcțiilor hash

Următorul tabel prezintă câteva dintre caracteristicile tehnice ale diferitelor variante SHA-2. „Starea internă” se referă la suma hash intermediară după procesarea următorului bloc de date:

funcția hash Lungimea rezumatului mesajului (biți) Lungimea stării interne (biți) Lungimea blocului (biți) Lungimea maximă a
mesajului (biți)
Lungimea cuvântului (biți) Numărul de iterații într-o buclă Viteza (MiB/s) [7]
SHA-256 , SHA-224 256/224 256 (8×32) 512 2 64 - 1 32 64 139
SHA‑512 , SHA‑384 , SHA‑512/256 , SHA‑512/224 512/384/256/224 512 (8×64) 1024 2 128 - 1 64 80 154

Pseudocod

Pseudocodul utilizează următoarele operații pe biți:

SHA-256

Explicații: Toate variabilele sunt nesemnate, au o dimensiune de 32 de biți și sunt însumate modulo 2 în timpul calculelor 32 mesaj —  mesaj binar original m  — mesaj transformat h0 := 0x6A09E667 h1 := 0xBB67AE85 h2 := 0x3C6EF372 h3 := 0xA54FF53A h4 := 0x510E527F h5 := 0x9B05688C h6 := 0x1F83D9AB h7 := 0x5BE0CD19 Tabel de constante (primii 32 de biți ai rădăcinilor cubice fracționale ale primelor 64 de numere prime [2 la 311]): k[0..63] := 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2 Preprocesare: m := mesaj ǁ [ single bit ] m := m ǁ [k zero biți ], unde k  este cel mai mic număr nenegativ astfel încât (L + 1 + K) mod 512 = 448, unde L este numărul de biți din mesaj ( modulo 512 este comparabil cu 448) m := m ǁ Lungimea (mesajul) este lungimea mesajului original în biți ca număr pe 64 de bițiordinea octetilor de la mare la mic În continuare, mesajul este procesat în porțiuni succesive de 512 biți: împărțiți mesajul în bucăți de 512 biți pentru fiecare bucată împărțiți fragmentul în 16 cuvinte cu lungimea de 32 de biți (cu ordinea octeților de la capătul superior la cel de jos al cuvântului): w[0..15] Generați 48 de cuvinte suplimentare: pentru i de la 16 la 63 s0 := (w[i-15] rotr 7) xor (w[i-15] rotr 18) xor (w[i-15] shr 3) s1 := (w[i-2] rotr 17) xor (w[i-2] rotr 19) xor (w[i-2] shr 10) w[i] := w[i-16] + s0 + w[i-7] + s1 Inițializarea variabilelor auxiliare: a := h0 b := h1 c := h2 d := h3 e := h4 f := h5 g := h6 h := h7 Bucla principală: pentru i de la 0 la 63 Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22) Ma := (a și b) xor (a și c) xor (b și c) t2 := Σ0 + Ma Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25) Ch := (e și f) xor (( nu e) și g) t1 := h + Σ1 + Ch + k[i] + w[i] h := g g := f f:= e e := d + t1 d := c c:= b b:= a a := t1 + t2 Adăugați valorile obținute la rezultatul calculat anterior: h0 := h0 + a h1 := h1 + b h2 := h2 + c h3 := h3 + d h4 := h4 + e h5 := h5 + f h6 := h6 + g h7 := h7 + h Obțineți valoarea hash finală: digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7

SHA-224 este identic cu SHA-256, cu excepția:

Valorile inițiale ale variabilelor h0sunt h7în SHA-224: h0 := 0xC1059ED8 h1 := 0x367CD507 h2 := 0x3070DD17 h3 := 0xF70E5939 h4 := 0xFFC00B31 h5 := 0x68581511 h6 := 0x64F98FA7 h7 := 0xBEFA4FA4

SHA-512 are o structură identică, dar:

Valorile inițiale ale variabilelor h0sunt h7în SHA-512: h0 := 0x6a09e667f3bcc908, h1 := 0xbb67ae8584caa73b, h2 := 0x3c6ef372fe94f82b, h3 := 0xa54ff53a5f1d36f1, h4 := 0x510e527fade682d1, h5 := 0x9b05688c2b3e6c1f, h6 := 0x1f83d9abfb41bd6b, h7 := 0x5be0cd19137e2179

SHA-384 este identic cu SHA-512, cu excepția:

Valorile inițiale ale variabilelor h0sunt h7în SHA-384 (primii 64 de biți ai părților fracționale ale rădăcinilor pătrate ale numerelor prime de la 9 la 16 [de la 23 la 53]): h0 := CBBB9D5DC1059ED8 h1 := 629A292A367CD507 h2 := 9159015A3070DD17 h3 := 152FECD8F70E5939 h4 := 67332667FFC00B31 h5 := 8EB44A8768581511 h6 := DB0C2E0D64F98FA7 h7 := 47B5481DBEFA4FA4

SHA-512/256 este identic cu SHA-512, cu excepția:

Valorile inițiale ale variabilelor h0sunt h7în SHA-512/256 : h0 := 22312194FC2BF72C h1 := 9F555FA3C84C64C2 h2 := 2393B86B6F53B151 h3 := 963877195940EABD h4 := 96283EE2A88EFFE3 h5 := BE5E1E2553863992 h6 := 2B0199FC2C85B8AA h7 := 0EB72DDC81C52CA2

SHA-512/224 este identic cu SHA-512, cu excepția:

Valorile inițiale ale variabilelor h0sunt h7în SHA-512/224 : h0 := 8C3D37C819544DA2 h1 := 73E1996689DCD4D6 h2 := 1DFAB7AE32FF9C82 h3 := 679DD514582F9FCF h4 := 0F6D2B697BD44DA8 h5 := 77E36F7304C48942 h6 := 3F9D85A86A1D36C8 h7 := 1112E6AD91D692A1

Exemple

Mai jos sunt exemple de hashuri pentru același text în diferite versiuni ale protocolului SHA-2 . Toate exemplele presupun utilizarea codificării ASCII .

SHA-224 (" Vulpea maro iute sare peste câinele leneș ") = 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525 SHA-256 ("Vulpea maro iute sare peste câinele leneș") = D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592 SHA-384 ("Vulpea maro iute sare peste câinele leneș") = CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50 9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1 SHA-512 ("Vulpea maro iute sare peste câinele leneș") = 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64 2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6 SHA-512/256 ("Vulpea maro iute sare peste câinele leneș") = DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D SHA-512/224 ("Vulpea maro iute sare peste câinele leneș") = 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37

Cea mai mică modificare a mesajului în marea majoritate a cazurilor duce la o schimbare completă a hașului din cauza efectului de avalanșă . De exemplu, când treceți dogla cog(modificarea afectează doar un bit din 344 din fraza codificată), hash-ul se va schimba dramatic:

SHA-256 ("Vulpea maro iute sare peste roțile leneș") = E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE

Criptanaliză

Criptanaliza unei funcții hash implică studiul stabilității algoritmului față de cel puțin următoarele tipuri de atacuri:

În 2003, Gilbert și Handschuh au efectuat un studiu asupra SHA-2 , dar nu au găsit vulnerabilități [8] . Cu toate acestea, în martie 2008, cercetătorii indieni Somitra Kumar Sanadiya și Palash Sarkar au publicat coliziunile pe care le-au găsit pentru 22 de iterații ale lui SHA-256 și SHA-512 [9] . În septembrie același an, au prezentat o metodă de construire a coliziunilor pentru versiunile trunchiate ale SHA-2 (21 de iterații) [10] [11] . Mai târziu, s-au găsit metode de construire a coliziunilor pentru 31 de iterații ale lui SHA-256 [12] și pentru 27 de iterații ale lui SHA-512 [13] .

Datorită asemănării algoritmice a SHA-2 cu SHA-1 și a prezenței potențialelor vulnerabilități în acesta din urmă, s-a decis ca SHA-3 să se bazeze pe un algoritm complet diferit [14] [15] . Pe 2 octombrie 2012, NIST a aprobat algoritmul Keccak ca SHA-3 .

Cerere și certificare

Consultați și Aplicarea hashingului

SHA-224 , SHA-256 , SHA-384 , SHA-512 , SHA-512/256 și SHA-512/224 sunt permise de legea SUA pentru utilizare în anumite aplicații guvernamentale, inclusiv utilizarea în cadrul altor algoritmi și protocoale criptografice, pentru a proteja informație, care nu are ștampila de secret. Standardul permite, de asemenea, utilizarea SHA-2 de către organizații private și comerciale [16] .

Funcțiile hash SHA-2 sunt utilizate pentru verificările integrității datelor și în diferite scheme criptografice. Începând cu 2008, familia SHA-2 de funcții hash nu este la fel de răspândită ca MD5 și SHA-1 [17] , în ciuda deficiențelor găsite la acestea din urmă.

Câteva exemple de utilizare a SHA-2 sunt enumerate în tabel:

Zona de aplicare Detalii
S/MIME Rezumate mesaje SHA-224 , SHA-256 , SHA-384 sau SHA-512 [18]
OpenLDAP Hash-uri pentru parole SHA -256 , SHA-384 sau SHA-512 [19]
DNSSEC SHA-256 DNSKEY digerează în protocolul DNSSEC [20]
X.509 SHA-224 , SHA-256 , SHA-384 și SHA-512 sunt utilizate pentru a crea o semnătură digitală electronică a unui certificat [21]
PGP SHA-256 , SHA-384 , SHA-512 sunt folosite pentru a crea o semnătură digitală electronică [22]
IPSec Unele implementări acceptă SHA-256 în protocoalele ESP și IKE [23]
DSA Familia SHA-2 este utilizată pentru a crea o semnătură digitală electronică [24]
SHACAL-2 Algoritmul de criptare bloc SHACAL-2 se bazează pe funcția hash SHA-256
bitcoin Găsirea unei combinații de date al cărei hash SHA-256 îndeplinește condiția specificată este o dovadă a muncii efectuate la emiterea unei criptomonede

Studiile au arătat [25] că algoritmii SHA-2 sunt de 2-3 ori mai lenți decât alți algoritmi hash populari MD5 , SHA-1 , Tiger și RIPEMD-160 .

Certificare

Implementările lui SHA-2 , ca toate standardele federale de procesare a informațiilor, pot fi certificate pentru utilizare în anumite aplicații din Statele Unite. Certificarea are loc ca parte a Programului de validare a modulelor criptografice , care este realizat de Institutul Național de Standarde și Tehnologie din SUA în colaborare cu Biroul Canadian de Securitate a Comunicațiilor.

Începând cu 5 noiembrie 2008, au fost certificate peste 250 de implementări SHA-2 , dintre care patru pot gestiona mesaje cu o lungime de biți care nu este un multiplu de opt [26] .

Certificat de FIPS PUB 180-4, CRYPTREC și NESSIE .

Vezi și

Note

  1. ↑ FIPS PUB 180-2  . - versiunea originală a standardului pentru SHA-2. Consultat la 19 noiembrie 2008. Arhivat din original pe 18 martie 2012.
  2. FIPS PUB 180-2 cu  notificare de modificare . - o variantă a standardului cu SHA-224. Consultat la 19 noiembrie 2008. Arhivat din original pe 18 martie 2012.
  3. ↑ FIPS PUB 180-3  . - Ediția din octombrie 2008 a Standardului Secure Hash. Consultat la 19 noiembrie 2008. Arhivat din original pe 18 martie 2012.
  4. FIPS PUB 180-4  (engleză)  (link nu este disponibil) . — ediția Standardului Secure Hash din august 2015. Preluat la 28 august 2015. Arhivat din original la 26 noiembrie 2016.
  5. ↑ Brevetul SUA 6829355  . — Dispozitiv și metodă de hashing criptografic unidirecțional. Preluat la 14 mai 2017. Arhivat din original la 27 iulie 2016.
  6. Declarație de licență pentru brevetul SUA 6829355.  (neopr.) .  (Engleză)
  7. „Crypto++ 5.6.0 Benchmarks”. Accesat 2013-06-13. . Preluat la 25 septembrie 2016. Arhivat din original la 14 octombrie 2016.
  8. ^ Gilbert H. , Handschuh H. Security Analysis of SHA-256 and Sisters  // Selected Areas in Cryptography : 10th Annual International Workshop , SAC 2003, Ottawa, Canada, August 14-15, 2003. Revised Papers / M Matsui , R. J. Zuccherato - Berlin , Heidelberg , New York, NY , Londra [etc.] : Springer Berlin Heidelberg , 2004. - P. 175-193. - ( Note de curs în Informatică ; Vol. 3006) - ISBN 978-3-540-21370-3 - ISSN 0302-9743 ; 1611-3349 - doi:10.1007/978-3-540-24654-1_13
  9. Somitra Kumar Sanadhya, Palash Sarkar. Coliziuni în 22 de pași pentru SHA-2 Arhivat la 30 martie 2010 la Wayback Machine 
  10. Somitra Kumar Sanadhya, Palash Sarkar. Construcții deterministe ale coliziunilor în 21 de pași pentru familia Hash SHA-  2
  11. Prezentare „Construcții deterministe ale coliziunilor în 21 de pași pentru familia SHA-2 Hash” Arhivată 3 iulie 2010 la Wayback Machine 
  12. Mendel F. , Nad T. , Schläffer M. Improving Local Collisions: New Attacks on Reduced SHA-256  // Advances in Cryptology – EUROCRYPT 2013 : 32th Annual International Conference on theory and Applications of Cryptographic Techniques, Atena, mai, Grecia, 26-30, 2013. Proceedings / T. Johansson , P. Q. Nguyen - Springer Berlin Heidelberg , 2013. - P. 262-278. — 736 p. - ISBN 978-3-642-38347-2 - doi: 10.1007/978-3-642-38348-9_16
  13. Christoph Dobraunig, Maria Eichlseder și Florian Mendel. Analiza SHA-512/224 și SHA-512/256  (nedefinit) . — 2016.
  14. Schneier despre securitate: NIST Hash Workshop Liveblogging (5) Arhivat 7 octombrie 2008 la Wayback Machine 
  15. Hash cracked - heise Security Arhivat 6 decembrie 2008 la Wayback Machine 
  16. FIPS 180-2: Secure Hash Standard (SHS): 6. Aplicabilitate Arhivat din original pe 18 martie 2012.  (Engleză)
  17. SHA-1 , SHA-256 în rezultatele motorului de căutare Google
  18. draft-ietf-smime-sha2-08 Arhivat 22 iunie 2009 la Wayback Machine  : Utilizarea algoritmilor SHA2 cu sintaxa mesajelor criptografice
  19. Suport hash SHA-2 în OpenLDAP Arhivat 27 iulie 2010 la Wayback Machine 
  20. RFC 4509 : Utilizarea SHA-256 în înregistrările de resurse (RR) DNSSEC Delegation Signer (DS)
  21. RFC 4055 : Algoritmi și identificatori suplimentari pentru criptografia RSA pentru utilizare în certificatul de infrastructură a cheii publice X.509 și profilul listei de revocare a certificatelor (CRL)
  22. RFC 4880 : Format mesaj OpenPGP
  23. Prezentare generală a Windows Vista Service Pack 1: noi standarde arhivate pe 12 martie 2016 la Wayback Machine 
  24. FIPS-186-2 Arhivat 18 mai 2009. : Standard de semnătură digitală (DSS)]
  25. Speed ​​​​Comparison of Popular Crypto Algorithms [1] Arhivat 15 octombrie 2008 la Wayback Machine 
  26. Lista de validare SHS Arhivată 23 august 2011 la Wayback Machine 

Literatură

Link -uri