SHA-2
SHA-2 ( sv. Secure Hash Algorithm Version 2 - säker hashalgoritm, version 2) - en familj av kryptografiska algoritmer - enkelriktade hashfunktioner , inklusive algoritmerna SHA-224, SHA-256, SHA-384, SHA-512 , SHA -512/256 och SHA-512/224 .
Hash-funktioner är designade för att skapa "fingeravtryck" eller "sammandrag" av meddelanden av godtycklig längd. De används i olika applikationer eller komponenter relaterade till informationssäkerhet .
Historik
SHA-2 hash-funktioner utvecklades av US National Security Agency och publicerades av National Institute of Standards and Technology i Federal Information Processing Standard FIPS PUB 180-2 i augusti 2002 [1] . Denna standard inkluderade även hashfunktionen SHA-1 , utvecklad 1995. I februari 2004 lades SHA-224 [2] till FIPS PUB 180-2 . I oktober 2008 släpptes en ny upplaga av standarden - FIPS PUB 180-3 [3] . I mars 2012 släpptes den senaste versionen av FIPS PUB 180-4 , som lade till funktionerna SHA-512/256 och SHA-512/224 baserade på SHA-512 (eftersom SHA-512 är snabbare på 64-bitars arkitekturer än SHA- 256) [4] .
I juli 2006 dök RFC 4634 "U.S. Secure Hash Algorithms ( SHA and HMAC-SHA )" upp, som beskrev SHA-1 och SHA-2- familjen .
National Security Agency utfärdade på uppdrag av staten ett patent för SHA-2 [5] under en royaltyfri licens [6] .
Algoritm
Allmän beskrivning
Hashfunktionerna i SHA-2-familjen är byggda på basis av Merkle-Damgor-strukturen .
Det ursprungliga meddelandet efter tillägget är uppdelat i block, varje block i 16 ord. Algoritmen skickar varje meddelandeblock genom en loop med 64 eller 80 iterationer (rundor). Vid varje iteration transformeras 2 ord, transformationsfunktionen ställs in av de återstående orden. Resultaten av bearbetningen av varje block läggs ihop, summan är värdet av hashfunktionen. Initieringen av det interna tillståndet är emellertid resultatet av bearbetningen av föregående block. Därför kan du inte självständigt bearbeta block och lägga till resultat. Se pseudokod för detaljer .
Jämförelse av hashfunktioner
Följande tabell visar några av de tekniska egenskaperna hos de olika SHA-2-varianterna. "Internt tillstånd" hänvisar till den mellanliggande hashsumman efter bearbetning av nästa datablock:
hash-funktion
|
Längd på meddelandesammanfattning (bitar)
|
Intern tillståndslängd (bitar)
|
Blocklängd (bitar)
|
Maximal meddelandelängd (bitar)
|
Ordlängd (bitar)
|
Antal iterationer i en loop
|
Hastighet (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
|
Pseudokod
Pseudokoden använder följande bitvisa operationer:
SHA-256
Förklaringar: Alla
variabler är osignerade, har en storlek på 32
bitar
och summeras modulo 2 vid beräkningar 32 meddelande — original binärt meddelande
m — transformerat meddelande
h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5:= 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19
Konstanttabell
(första 32 bitarna av bråk -kubrötter av de första 64 primtal [2 till 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
Förbearbetning:
m := meddelande ǁ [ enkelbit ]
m := m ǁ [k noll bitar ],
där k är det minsta icke-negativa talet så att
(L + 1 + K) mod 512 = 448, där L är antalet bitar i meddelandet ( modulo 512 är jämförbart med 448)
m := m ǁ Längd (meddelande)
är längden på det ursprungliga meddelandet i bitar som en 64-bitars nummerbyteordning
från stor till liten
Därefter bearbetas meddelandet i på varandra följande delar om 512 bitar:
dela upp meddelandet i bitar om 512 bitar
för varje bit
dela upp biten i 16 ord med längden 32 bitar (med
byteordning från hög till låg del av ordet): w[0..15]
Generera ytterligare 48 ord:
för i från 16 till 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 av hjälpvariabler:
a := h0
b := hl
c:= h2
d := h3
e := h4
f := h5
g := h6
h := h7
Huvudslinga:
för i från 0 till 63
Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22)
Ma := (a och b) xor (a och c) xor (b och c)
t2 := Σ0 + Ma
Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch := (e och f) xor (( inte e) och g)
t1 := h + Σ1 + Ch + k[i] + w[i]
h := g
g := f
f := e
e := d + tl
d := c
c := b
b := a
a := t1 + t2
Lägg till de erhållna värdena till det tidigare beräknade resultatet:
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å det slutliga hashvärdet:
sammandrag = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7
SHA-224 är identisk med SHA-256 förutom:
- för att initiera variabler h0- h7andra initiala värden används,
- värde utelämnas från den slutliga hashen h7.
De initiala värdena för variablerna h0finns 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 är 64 bitar långa,
- 80 omgångar används istället för 64,
- meddelandet är uppdelat i bitar om 1024 bitar,
- initiala värden för variabler och konstanter utökas till 64 bitar,
- konstanterna för var och en av de 80 omgångarna är de 80 första primtalen,
- skift i operationer rotroch shrutförs på ett annat antal positioner.
De initiala värdena för variablerna h0finns h7i SHA-512:
h0 := 0x6a09e667f3bcc908,
h1 := 0xbb67ae8584caa73b,
h2 := 0x3c6ef372fe94f82b,
h3 := 0xa54ff53a5f1d36f1,
h4 := 0x510e527fade682d1,
h5 := 0x9b05688c2b3e6c1f,
h6 := 0x1f83d9abfb41bd6b,
h7 := 0x5be0cd19137e2179
SHA-384 är identisk med SHA-512 förutom:
- variabler h0- h7har olika initiala värden,
- h6och utelämnas från den slutliga hashen h7.
De initiala värdena för variablerna h0är h7i SHA-384
(de första 64 bitarna av bråkdelar av kvadratrötterna av primtal från 9:e till 16:e [från 23 till 53]):
h0 := CBBB9D5DC1059ED8
h1:= 629A292A367CD507
h2:= 9159015A3070DD17
h3 := 152FECD8F70E5939
h4 := 67332667FFC00B31
h5 := 8EB44A8768581511
h6 := DB0C2E0D64F98FA7
h7 := 47B5481DBEFA4FA4
SHA-512/256 är identisk med SHA-512 förutom:
- variabler h0- h7har olika initiala värden,
- den slutliga hashen trunkeras till vänster 256 bitar.
De initiala värdena för variablerna h0finns h7i SHA-512/256 :
h0 := 22312194FC2BF72C
h1 := 9F555FA3C84C64C2
h2:= 2393B86B6F53B151
h3 := 963877195940EABD
h4 := 96283EE2A88EFFE3
h5 := BE5E1E2553863992
h6 := 2B0199FC2C85B8AA
h7 := 0EB72DDC81C52CA2
SHA-512/224 är identisk med SHA-512 förutom:
- variabler h0- h7har olika initiala värden,
- den slutliga hashen trunkeras till vänster 224 bitar.
De initiala värdena för variablerna h0finns h7i SHA-512/224 :
h0 := 8C3D37C819544DA2
h1:= 73E1996689DCD4D6
h2 := 1DFAB7AE32FF9C82
h3 := 679DD514582F9FCF
h4 := 0F6D2B697BD44DA8
h5:= 77E36F7304C48942
h6 := 3F9D85A86A1D36C8
h7:= 1112E6AD91D692A1
Exempel
Nedan finns exempel på hash för samma text under olika versioner av SHA-2- protokollet . Alla exempel förutsätter användning av ASCII- kodning .
SHA-224("
Den kvicka bruna räven hoppar över den lata hunden ")
= 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256("Den kvicka bruna räven hoppar över den lata hunden")
= D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384("Den kvicka bruna räven hoppar över den lata hunden")
= CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50
9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512("Den kvicka bruna räven hoppar över den lata hunden")
= 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64
2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
SHA-512/256("Den kvicka bruna räven hoppar över den lata hunden")
= DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224("Den kvicka bruna räven hoppar över den lata hunden")
= 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37
Minsta förändring i budskapet leder i de allra flesta fall till en fullständig förändring av hashen på grund av lavineffekten . Till exempel, när du ändrar dogtill cog(ändringen påverkar bara en bit av 344 i den kodade frasen), kommer hashen att ändras dramatiskt:
SHA-256("Den kvicka bruna räven hoppar över den lata kuggen")
= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Kryptanalys
Krypteringsanalys av en hashfunktion involverar studiet av algoritmens stabilitet mot åtminstone följande typer av attacker:
- hitta kollisioner , det vill säga olika meddelanden med samma hash - säkerheten för en elektronisk digital signatur som använder denna hashalgoritm beror på detta;
- att hitta en prototyp , det vill säga ett okänt meddelande genom dess hash - säkerheten för att lagra lösenordshashar för autentiseringsändamål beror på detta .
År 2003 genomförde Gilbert och Handschuh en studie på SHA-2 , men fann inga sårbarheter [8] . Men i mars 2008 publicerade de indiska forskarna Somitra Kumar Sanadiya och Palash Sarkar de kollisioner som de hittade för 22 iterationer av SHA-256 och SHA-512 [9] . I september samma år presenterade de en metod för att konstruera kollisioner för trunkerade versioner av SHA-2 (21 iterationer) [10] [11] . Senare hittades metoder för att konstruera kollisioner för 31 iterationer av SHA-256 [12] och för 27 iterationer av SHA-512 [13] .
På grund av den algoritmiska likheten mellan SHA-2 och SHA -1 och närvaron av potentiella sårbarheter i den senare, beslutades att SHA-3 kommer att baseras på en helt annan algoritm [14] [15] . Den 2 oktober 2012 godkände NIST Keccak- algoritmen som SHA-3 .
Ansökan och certifiering
Se även Tillämpa hash
SHA-224 , SHA-256 , SHA-384 , SHA-512 , SHA-512/256 och SHA-512/224 är tillåtna enligt amerikansk lag för användning i vissa statliga tillämpningar, inklusive användning inom andra kryptografiska algoritmer och protokoll, för att skydda information , som inte har sekretessstämpel. Standarden tillåter även användning av SHA-2 av privata och kommersiella organisationer [16] .
SHA-2- hashfunktioner används för dataintegritetskontroller och i olika kryptografiska system. Från och med 2008 är SHA-2- familjen av hashfunktioner inte lika utbredd som MD5 och SHA-1 [17] , trots de brister som finns i den senare.
Några exempel på användningen av SHA-2 listas i tabellen:
Studier har visat [25] att SHA-2- algoritmer är 2-3 gånger långsammare än andra populära hashalgoritmer MD5 , SHA-1 , Tiger och RIPEMD-160 .
Certifiering
Implementeringar av SHA-2 , som alla federala informationsbehandlingsstandarder, kan certifieras för användning i vissa applikationer inom USA. Certifieringen sker som en del av Cryptographic Module Validation Program , som utförs av US National Institute of Standards and Technology i samarbete med Canadian Bureau of Communications Security.
Den 5 november 2008 har mer än 250 SHA-2- implementeringar certifierats , varav fyra kan hantera meddelanden med en bitlängd som inte är en multipel av åtta [26] .
Certifierad av FIPS PUB 180-4, CRYPTREC och NESSIE .
Se även
Anteckningar
- ↑ FIPS PUB 180-2 . - den ursprungliga versionen av standarden för SHA-2. Hämtad 19 november 2008. Arkiverad från originalet 18 mars 2012.
- ↑ FIPS PUB 180-2 med ändringsmeddelande . - en variant av standarden med SHA-224. Hämtad 19 november 2008. Arkiverad från originalet 18 mars 2012.
- ↑ FIPS PUB 180-3 . - Oktober 2008-utgåvan av Secure Hash Standard. Hämtad 19 november 2008. Arkiverad från originalet 18 mars 2012.
- ↑ FIPS PUB 180-4 (engelska) (länk ej tillgänglig) . — upplagan av Secure Hash Standard från augusti 2015. Hämtad 28 augusti 2015. Arkiverad från originalet 26 november 2016.
- ↑ US patent 6829355 . — Enhet för och metod för enkelriktad kryptografisk hashning. Hämtad 14 maj 2017. Arkiverad från originalet 27 juli 2016.
- ↑ Licensdeklaration för US patent 6829355. (neopr.) . (Engelsk)
- ↑ "Crypto++ 5.6.0 Benchmarks". Hämtad 2013-06-13. . Hämtad 25 september 2016. Arkiverad från originalet 14 oktober 2016. (obestämd)
- ↑ Gilbert H. , Handschuh H. Säkerhetsanalys av SHA-256 och systrar // Selected Areas in Cryptography : 10th Annual International Workshop , SAC 2003, Ottawa, Kanada, 14-15 augusti 2003. Revised Papers / M Matsui , R. J. Zuccher - Berlin , Heidelberg , New York, NY , London [etc.] : Springer Berlin Heidelberg , 2004. - P. 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-stegskollisioner för SHA-2 Arkiverad 30 mars 2010 på Wayback Machine
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. Deterministiska konstruktioner av 21-stegskollisioner för SHA-2 Hash- familjen
- ↑ Presentation "Deterministic Constructions of 21-Step Collisions for the SHA-2 Hash Family" Arkiverad 3 juli 2010 på Wayback Machine
- ↑ Mendel F. , Nad T. , Schläffer M. Improving Local Collisions: New Attacks on Reduced SHA-256 // Framsteg inom kryptologi – EUROCRYPT 2013 : 32nd Annual International Conference on the Theory and Applications of Cryptographic Techniques, Aten, Grekland, maj 26-30, 2013. Proceedings / T. Johansson , P. Q. Nguyen - Springer Berlin Heidelberg , 2013. - S. 262-278. — 736 sid. - ISBN 978-3-642-38347-2 - doi: 10.1007/978-3-642-38348-9_16
- ↑ Christoph Dobraunig, Maria Eichlseder och Florian Mendel. Analys av SHA-512/224 och SHA-512/256 (odefinierad) . — 2016.
- ↑ Schneier om säkerhet: NIST Hash Workshop Liveblogging (5) Arkiverad 7 oktober 2008 på Wayback Machine
- ↑ Hash cracked - heise Security Arkiverad 6 december 2008 på Wayback Machine
- ↑ FIPS 180-2: Secure Hash Standard (SHS): 6. Tillämpning Arkiverad från originalet den 18 mars 2012. (Engelsk)
- ↑ SHA-1 , SHA-256 i Googles sökmotorresultat
- ↑ draft-ietf-smime-sha2-08 Arkiverad 22 juni 2009 på Wayback Machine : Använda SHA2-algoritmer med kryptografisk meddelandesyntax
- ↑ SHA-2 hash-stöd i OpenLDAP Arkiverad 27 juli 2010 på Wayback Machine
- ↑ RFC 4509 : Användning av SHA-256 i DNSSEC Delegation Signer (DS) Resource Records (RR)
- ↑ RFC 4055 : Ytterligare algoritmer och identifierare för RSA-kryptering för användning i Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile
- ↑ RFC 4880 : OpenPGP -meddelandeformat
- ↑ Översikt över Windows Vista Service Pack 1: Nya standarder arkiverade 12 mars 2016 på Wayback Machine
- ↑ FIPS-186-2 Arkiverad 18 maj 2009. : Digital Signature Standard (DSS)]
- ↑ Hastighetsjämförelse av populära kryptoalgoritmer [1] Arkiverad 15 oktober 2008 på Wayback Machine
- ↑ SHS-valideringslista Arkiverad 23 augusti 2011 på Wayback Machine
Litteratur
Länkar
- FIPS 180-3 Arkiverad från originalet den 18 mars 2012. : Secure Hash Standard (SHS)
- RFC 3874 : En 224-bitars enkelriktad hashfunktion: SHA-224
- RFC 4634 : US Secure Hash Algorithms (SHA och HMAC-SHA)