SHA-2
SHA-2 ( eng. Secure Hash Algorithm Version 2 - sikker hashalgoritme, version 2) - en familie af kryptografiske algoritmer - envejs hashfunktioner , herunder algoritmerne SHA-224, SHA-256, SHA-384, SHA-512 , SHA -512/256 og SHA-512/224 .
Hash-funktioner er designet til at skabe "fingeraftryk" eller "sammendrag" af meddelelser af vilkårlig længde. De bruges i forskellige applikationer eller komponenter relateret til informationssikkerhed .
Historie
SHA-2 hash-funktioner blev udviklet af US National Security Agency og udgivet af National Institute of Standards and Technology i Federal Information Processing Standard FIPS PUB 180-2 i august 2002 [1] . Denne standard inkluderede også SHA-1 hash-funktionen , udviklet i 1995. I februar 2004 blev SHA-224 [2] tilføjet til FIPS PUB 180-2 . I oktober 2008 udkom en ny udgave af standarden - FIPS PUB 180-3 [3] . I marts 2012 blev den seneste revision af FIPS PUB 180-4 udgivet , som tilføjede SHA-512/256 og SHA-512/224 funktioner baseret på SHA-512 (da SHA-512 er hurtigere på 64-bit arkitekturer end SHA- 256) [4] .
I juli 2006 dukkede RFC 4634 "U.S. Secure Hash Algorithms ( SHA and HMAC-SHA )" op, der beskriver SHA-1 og SHA-2- familien .
National Security Agency udstedte på vegne af staten et patent på SHA-2 [5] under en royaltyfri licens [6] .
Algoritme
Generel beskrivelse
Hash-funktionerne i SHA-2-familien er bygget på basis af Merkle-Damgor-strukturen .
Den oprindelige besked efter tilføjelsen er opdelt i blokke, hver blok i 16 ord. Algoritmen sender hver beskedblok gennem en løkke med 64 eller 80 iterationer (runder). Ved hver iteration transformeres 2 ord, transformationsfunktionen sættes af de resterende ord. Resultaterne af behandlingen af hver blok lægges sammen, summen er værdien af hash-funktionen. Imidlertid er initialiseringen af den interne tilstand resultatet af behandlingen af den foregående blok. Derfor kan du ikke selvstændigt behandle blokke og tilføje resultater. Se pseudokode for detaljer .
Sammenligning af hash-funktioner
Følgende tabel viser nogle af de tekniske karakteristika for de forskellige SHA-2 varianter. "Intern tilstand" refererer til den mellemliggende hash-sum efter behandling af den næste blok af data:
hash funktion
|
Længde på beskedsammendrag (bits)
|
Intern tilstandslængde (bits)
|
Bloklængde (bits)
|
Maksimal meddelelseslængde (bit)
|
Ordlængde (bits)
|
Antal iterationer i en loop
|
Hastighed (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
|
Pseudokode
Pseudokoden bruger følgende bitvise operationer:
SHA-256
Forklaringer: Alle
variable er uden fortegn, har en størrelse på 32
bit
og summeres modulo 2 under beregninger 32 besked — original binær besked
m — transformeret besked
h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5:= 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19
Konstant tabel
(første 32 bit af brøkterningrødderne af de første 64 primtal [2 til 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
Forbehandling:
m := besked ǁ [ enkelt bit ]
m := m ǁ [k nul bits ],
hvor k er det mindste ikke-negative tal, således at
(L + 1 + K) mod 512 = 448, hvor L er antallet af bit i meddelelsen ( modulo 512 er sammenlignelig med 448)
m := m ǁ Længde (meddelelse)
er længden af den oprindelige meddelelse i bits som en 64-bit nummerbyte rækkefølge
fra stor til lille
Derefter behandles meddelelsen i successive dele af 512 bit:
opdel beskeden i bidder af 512 bit
for hvert stykke
opdel klumpen i 16 ord med en længde på 32 bit (med
byte rækkefølge fra høj til lav ende af ordet): w[0..15]
Generer yderligere 48 ord:
for i fra 16 til 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
Initialisering af hjælpevariable:
a := h0
b := h1
c:= h2
d := h3
e := h4
f := h5
g := h6
h := h7
Hovedløkke:
for i fra 0 til 63
Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22)
Ma := (a og b) xor (a og c) xor (b og c)
t2 := Σ0 + Ma
Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch := (e og f) xor (( ikke e) og 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
Tilføj de opnåede værdier til det tidligere beregnede resultat:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
h4 := h4 + e
h5 := h5 + f
h6 := h6 + g
h7 := h7 + h
Få den endelige hashværdi:
digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7
SHA-224 er identisk med SHA-256 bortset fra:
- for at initialisere variabler h0- h7andre begyndelsesværdier bruges,
- værdi er udeladt fra den endelige hash h7.
De indledende værdier af variablerne h0er h7i SHA-224:
h0 := 0xC1059ED8
h1 := 0x367CD507
h2 := 0x3070DD17
h3 := 0xF70E5939
h4 := 0xFFC00B31
h5 := 0x68581511
h6 := 0x64F98FA7
h7 := 0xBEFA4FA4
SHA-512 har en identisk struktur, men:
- ord er 64 bit lange,
- Der bruges 80 runder i stedet for 64,
- beskeden er opdelt i bidder af 1024 bit,
- begyndelsesværdier af variabler og konstanter udvides til 64 bit,
- konstanter for hver af de 80 runder er de 80 første primtal,
- skift i operationer rotrog shrudføres på et andet antal positioner.
De indledende værdier af variablerne h0er h7i SHA-512:
h0 := 0x6a09e667f3bcc908,
h1 := 0xbb67ae8584caa73b,
h2 := 0x3c6ef372fe94f82b,
h3 := 0xa54ff53a5f1d36f1,
h4 := 0x510e527fade682d1,
h5 := 0x9b05688c2b3e6c1f,
h6 := 0x1f83d9abfb41bd6b,
h7 := 0x5be0cd19137e2179
SHA-384 er identisk med SHA-512 bortset fra:
- variable h0- h7har forskellige begyndelsesværdier,
- h6og er udeladt fra den endelige hash h7.
De indledende værdier af variablerne h0er h7i SHA-384
(de første 64 bit af brøkdelene af kvadratrødderne af primtal fra 9. til 16. [fra 23 til 53]):
h0 := CBBB9D5DC1059ED8
h1:= 629A292A367CD507
h2 := 9159015A3070DD17
h3 := 152FECD8F70E5939
h4 := 67332667FFC00B31
h5 := 8EB44A8768581511
h6 := DB0C2E0D64F98FA7
h7 := 47B5481DBEFA4FA4
SHA-512/256 er identisk med SHA-512 bortset fra:
- variable h0- h7har forskellige begyndelsesværdier,
- den endelige hash afkortes til venstre 256 bit.
De indledende værdier af variablerne h0er h7i SHA-512/256 :
h0 := 22312194FC2BF72C
h1 := 9F555FA3C84C64C2
h2:= 2393B86B6F53B151
h3 := 963877195940EABD
h4 := 96283EE2A88EFFE3
h5 := BE5E1E2553863992
h6 := 2B0199FC2C85B8AA
h7 := 0EB72DDC81C52CA2
SHA-512/224 er identisk med SHA-512 bortset fra:
- variable h0- h7har forskellige begyndelsesværdier,
- den endelige hash afkortes til venstre 224 bit.
De indledende værdier af variablerne h0er h7i SHA-512/224 :
h0 := 8C3D37C819544DA2
h1:= 73E1996689DCD4D6
h2 := 1DFAB7AE32FF9C82
h3 := 679DD514582F9FCF
h4 := 0F6D2B697BD44DA8
h5:= 77E36F7304C48942
h6 := 3F9D85A86A1D36C8
h7 := 1112E6AD91D692A1
Eksempler
Nedenfor er eksempler på hashes for den samme tekst under forskellige versioner af SHA-2- protokollen . Alle eksempler antager brugen af ASCII- kodning .
SHA-224 ("
Den hurtige brune ræv hopper over den dovne hund ")
= 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256("Den hurtige brune ræv hopper over den dovne hund")
= D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384("Den hurtige brune ræv hopper over den dovne hund")
= CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50
9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512("Den hurtige brune ræv hopper over den dovne hund")
= 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64
2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
SHA-512/256("Den hurtige brune ræv hopper over den dovne hund")
= DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224("Den hurtige brune ræv hopper over den dovne hund")
= 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37
Den mindste ændring i budskabet fører i langt de fleste tilfælde til en fuldstændig ændring af hashen på grund af lavineeffekten . For eksempel, når du skifter dogtil cog(ændringen påvirker kun én bit ud af 344 i den kodede sætning), vil hashen ændre sig dramatisk:
SHA-256("Den hurtige brune ræv hopper over det dovne tandhjul")
= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Krypteringsanalyse
Krypteringsanalyse af en hashfunktion involverer studiet af algoritmens stabilitet mod mindst følgende typer angreb:
- at finde kollisioner , det vil sige forskellige meddelelser med samme hash - sikkerheden af en elektronisk digital signatur ved hjælp af denne hash-algoritme afhænger af dette;
- at finde en prototype , det vil sige en ukendt besked ved dens hash - sikkerheden ved lagring af password-hash til godkendelsesformål afhænger af dette .
I 2003 gennemførte Gilbert og Handschuh en undersøgelse af SHA-2 , men fandt ingen sårbarheder [8] . Men i marts 2008 offentliggjorde de indiske forskere Somitra Kumar Sanadiya og Palash Sarkar de kollisioner, de fandt for 22 iterationer af SHA-256 og SHA-512 [9] . I september samme år præsenterede de en metode til at konstruere kollisioner for trunkerede versioner af SHA-2 (21 iterationer) [10] [11] . Senere blev der fundet metoder til at konstruere kollisioner for 31 iterationer af SHA-256 [12] og for 27 iterationer af SHA-512 [13] .
På grund af den algoritmiske lighed mellem SHA-2 og SHA-1 og tilstedeværelsen af potentielle sårbarheder i sidstnævnte, blev det besluttet, at SHA-3 vil være baseret på en helt anden algoritme [14] [15] . Den 2. oktober 2012 godkendte NIST Keccak -algoritmen som SHA-3 .
Ansøgning og certificering
Se også Anvendelse af hashing
SHA-224 , SHA-256 , SHA-384 , SHA-512 , SHA-512/256 og SHA-512/224 er tilladt i henhold til amerikansk lovgivning til brug i visse offentlige applikationer, herunder brug inden for andre kryptografiske algoritmer og protokoller, for at beskytte oplysninger , som ikke har et tavshedsstempel. Standarden tillader også private og kommercielle organisationers brug af SHA-2 [16] .
SHA-2 hash-funktioner bruges til dataintegritetstjek og i forskellige kryptografiske skemaer. Fra 2008 er SHA-2- familien af hashfunktioner ikke så udbredt som MD5 og SHA-1 [17] , på trods af manglerne fundet i sidstnævnte.
Nogle eksempler på brugen af SHA-2 er angivet i tabellen:
Anvendelsesområde
|
detaljer
|
S/MIME
|
SHA-224 , SHA-256 , SHA-384 eller SHA-512 beskedsammendrag [18]
|
ÅbnLDAP
|
SHA-256 , SHA-384 eller SHA-512 hash - kodeord [19]
|
DNSSEC
|
SHA-256 DNSKEY fordøjelser i DNSSEC -protokollen [20]
|
X.509
|
SHA-224 , SHA-256 , SHA-384 og SHA-512 bruges til at skabe en elektronisk digital signatur af et certifikat [21]
|
PGP
|
SHA-256 , SHA-384 , SHA-512 bruges til at skabe en elektronisk digital signatur [22]
|
IPSec
|
Nogle implementeringer understøtter SHA-256 i ESP- og IKE-protokollerne [23]
|
DSA
|
SHA-2- familien bruges til at skabe en elektronisk digital signatur [24]
|
SHACAL-2
|
SHACAL-2 blokkrypteringsalgoritmen er baseret på SHA-256 hash-funktionen
|
bitcoin
|
At finde en kombination af data, hvis SHA-256- hash opfylder den angivne betingelse, er bevis på det udførte arbejde, når du udsteder en kryptovaluta
|
Undersøgelser har vist [25] at SHA-2 algoritmer er 2-3 gange langsommere end andre populære hashalgoritmer MD5 , SHA-1 , Tiger og RIPEMD-160 .
Certificering
Implementeringer af SHA-2 , som alle føderale informationsbehandlingsstandarder, kan certificeres til brug i visse applikationer i USA. Certificering finder sted som en del af Cryptographic Module Validation Program , som udføres af US National Institute of Standards and Technology i samarbejde med Canadian Bureau of Communications Security.
Fra den 5. november 2008 er mere end 250 SHA-2 implementeringer blevet certificeret , hvoraf fire kan håndtere beskeder med en bitlængde, der ikke er et multiplum af otte [26] .
Certificeret af FIPS PUB 180-4, CRYPTREC og NESSIE .
Se også
Noter
- ↑ FIPS PUB 180-2 . - den originale version af standarden for SHA-2. Hentet 19. november 2008. Arkiveret fra originalen 18. marts 2012.
- ↑ FIPS PUB 180-2 med ændringsmeddelelse . - en variant af standarden med SHA-224. Hentet 19. november 2008. Arkiveret fra originalen 18. marts 2012.
- ↑ FIPS PUB 180-3 . - Oktober 2008-udgaven af Secure Hash Standard. Hentet 19. november 2008. Arkiveret fra originalen 18. marts 2012.
- ↑ FIPS PUB 180-4 (engelsk) (link ikke tilgængeligt) . — udgave af Secure Hash Standard fra august 2015. Hentet 28. august 2015. Arkiveret fra originalen 26. november 2016.
- ↑ US patent 6829355 . — Enhed til og metode til envejs kryptografisk hashing. Hentet 14. maj 2017. Arkiveret fra originalen 27. juli 2016.
- ↑ Licenserklæring for US patent 6829355. (neopr.) . (Engelsk)
- ↑ "Crypto++ 5.6.0 Benchmarks". Hentet 2013-06-13. . Hentet 25. september 2016. Arkiveret fra originalen 14. oktober 2016. (ubestemt)
- ↑ Gilbert H. , Handschuh H. Security Analysis of SHA-256 and Sisters // Selected Areas in Cryptography : 10th Annual International Workshop , SAC 2003, Ottawa, Canada, 14.-15. august 2003. Revised Papers / M Matsui , R. J. Zuccher - Berlin , Heidelberg , New York, NY , London [etc.] : Springer Berlin Heidelberg , 2004. - S. 175-193. - ( Lecture Notes in Computer Science ; Vol. 3006) - ISBN 978-3-540-21370-3 - ISSN 0302-9743 ; 1611-3349 - doi:10.1007/978-3-540-24654-1_13
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. 22-trins kollisioner for SHA-2 Arkiveret 30. marts 2010 på Wayback Machine
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. Deterministiske konstruktioner af 21-trins kollisioner for SHA-2 Hash- familien
- ↑ Præsentation "Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family" Arkiveret 3. juli 2010 på Wayback Machine
- ↑ Mendel F. , Nad T. , Schläffer M. Improving Local Collisions: New Attacks on Reduced SHA-256 // Advances in Cryptology – EUROCRYPT 2013 : 32nd Annual International Conference on the Theory and Applications of Cryptographic Techniques, Athen , Grækenland, maj 26-30, 2013. Proceedings / T. Johansson , P. Q. Nguyen - Springer Berlin Heidelberg , 2013. - S. 262-278. — 736 s. - ISBN 978-3-642-38347-2 - doi: 10.1007/978-3-642-38348-9_16
- ↑ Christoph Dobraunig, Maria Eichlseder og Florian Mendel. Analyse af SHA-512/224 og SHA-512/256 (udefineret) . – 2016.
- ↑ Schneier om sikkerhed: NIST Hash Workshop Liveblogging (5) Arkiveret 7. oktober 2008 på Wayback Machine
- ↑ Hash cracked - heise Security Arkiveret 6. december 2008 på Wayback Machine
- ↑ FIPS 180-2: Secure Hash Standard (SHS): 6. Anvendelse Arkiveret fra originalen den 18. marts 2012. (Engelsk)
- ↑ SHA-1 , SHA-256 i Googles søgemaskineresultater
- ↑ draft-ietf-smime-sha2-08 Arkiveret 22. juni 2009 på Wayback Machine : Brug af SHA2-algoritmer med kryptografisk meddelelsessyntaks
- ↑ SHA-2 hash-understøttelse i OpenLDAP Arkiveret 27. juli 2010 på Wayback Machine
- ↑ RFC 4509 : Brug af SHA-256 i DNSSEC Delegation Signer (DS) Resource Records (RR'er)
- ↑ RFC 4055 : Yderligere algoritmer og identifikatorer til RSA-kryptering til brug i Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
- ↑ RFC 4880 : OpenPGP Message Format
- ↑ Oversigt over Windows Vista Service Pack 1: Nye standarder arkiveret 12. marts 2016 på Wayback Machine
- ↑ FIPS-186-2 Arkiveret 18. maj 2009. : Digital Signature Standard (DSS)]
- ↑ Hastighedssammenligning af populære kryptoalgoritmer [1] Arkiveret 15. oktober 2008 på Wayback Machine
- ↑ SHS-valideringsliste Arkiveret 23. august 2011 på Wayback Machine
Litteratur
Links
- FIPS 180-3 Arkiveret fra originalen den 18. marts 2012. : Secure Hash Standard (SHS)
- RFC 3874 : En 224-bit One-way Hash-funktion: SHA-224
- RFC 4634 : US Secure Hash Algorithms (SHA og HMAC-SHA)