SHA-2
SHA-2 ( eng. Secure Hash Algorithm Version 2 – Secure Hash Algorithm, Version 2) – kriptográfiai algoritmusok családja – egyirányú hash függvények , beleértve az SHA-224, SHA-256, SHA-384, SHA-512 algoritmusokat , SHA -512/256 és SHA-512/224 .
A hash függvények tetszőleges hosszúságú üzenetek "ujjlenyomatait" vagy "kivonatait" készítik. Különböző, információbiztonsággal kapcsolatos alkalmazásokban vagy összetevőkben használják őket .
Történelem
Az SHA-2 hash függvényeket az Egyesült Államok Nemzetbiztonsági Ügynöksége fejlesztette ki , és a National Institute of Standards and Technology publikálta a FIPS PUB 180-2 szövetségi információfeldolgozási szabványban 2002 augusztusában [1] . Ez a szabvány tartalmazza az 1995-ben kifejlesztett SHA-1 hash függvényt is. 2004 februárjában az SHA-224 [2] hozzáadásra került a FIPS PUB 180-2 -hez . 2008 októberében megjelent a szabvány új kiadása - FIPS PUB 180-3 [3] . 2012 márciusában megjelent a FIPS PUB 180-4 legújabb verziója , amely SHA-512/256 és SHA-512/224 funkciókkal egészítette ki az SHA-512 alapú (mivel az SHA-512 gyorsabb 64 bites architektúrákon, mint az SHA- 256) [4] .
2006 júliusában jelent meg az RFC 4634 "U.S. Secure Hash Algorithms ( SHA and HMAC-SHA )", amely leírja az SHA-1- et és az SHA-2 családot .
A Nemzetbiztonsági Ügynökség az állam nevében szabadalmat adott ki az SHA-2- re [5] jogdíjmentes licenc [6] alapján .
Algoritmus
Általános leírás
Az SHA-2 család hash funkciói a Merkle-Damgor struktúra alapján épülnek fel .
Az eredeti üzenet a hozzáadás után blokkra van osztva, mindegyik blokk 16 szóból áll. Az algoritmus minden üzenetblokkot 64 vagy 80 iterációt (kört) tartalmazó hurkon halad át. Minden iterációnál 2 szó transzformálásra kerül, a transzformációs függvényt a maradék szavak állítják be. Az egyes blokkok feldolgozási eredményeit összeadjuk, az összeg a hash függvény értéke. A belső állapot inicializálása azonban az előző blokk feldolgozásának eredménye. Ezért nem dolgozhat fel önállóan blokkokat és nem adhat hozzá eredményeket. Lásd a pszeudokódot a részletekért .
A hash függvények összehasonlítása
Az alábbi táblázat a különböző SHA-2 változatok néhány műszaki jellemzőjét mutatja be. A „belső állapot” a következő adatblokk feldolgozása utáni közbenső hash összegre utal:
hash függvény
|
Üzenet kivonat hossza (bit)
|
Belső állapot hossza (bit)
|
Blokkhossz (bit)
|
Üzenet maximális hossza (bit)
|
Szóhossz (bit)
|
Az iterációk száma egy ciklusban
|
Sebesség (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
|
Pszeudokód
A pszeudokód a következő bitenkénti műveleteket használja:
SHA-256
Magyarázatok: Minden
változó előjel nélküli , 32
bites
, és a számítások során modulo 2 összegzésre kerül 32 üzenet — eredeti bináris üzenet
m — transzformált üzenet
h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5 := 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19
Állandó táblázat (az első 64 prím
tört kockagyökeinek első 32 bitje [2-től 311-ig]):
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
Előfeldolgozás:
m := üzenet ǁ [ single bit ]
m := m ǁ [k nulla bit ],
ahol k a legkisebb nemnegatív szám,
(L + 1 + K) mod 512 = 448, ahol L az üzenet bitjeinek száma (az 512 modul 448-hoz hasonlítható)
m := m ǁ Hossz (üzenet)
az eredeti üzenet hossza bitben. 64 bites számbájtok sorrendje
nagytól kicsiig
Ezután az üzenetet 512 bites egymást követő részekben dolgozzuk fel:
az üzenetet 512 bites darabokra bontja
minden darabhoz
osszuk fel a darabot 16, 32 bites szóra (
bájtsorrenddel a magastól az alsóig): w[0..15]
További 48 szó létrehozása:
i - hez 16 -tól 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
A segédváltozók inicializálása:
a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7
Fő hurok:
i - hez 0 -tól 63
Σ0 := (egy rotr 2) xor (egy rotr 13) xor (egy rotr 22)
Ma := (a és b) xor (a és c) xor (b és c)
t2 := Σ0 + Ma
Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch := (e és f) xor (( nem e) és 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
Adja hozzá a kapott értékeket az előzőleg kiszámított eredményhez:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
h4 := h4 + e
h5 := h5 + f
h6 := h6 + g
h7 := h7 + h
Szerezze meg a végső hash értéket:
digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7
Az SHA-224 megegyezik az SHA-256-tal , kivéve:
- a változók inicializálásához h0- h7más kezdeti értékeket használnak,
- érték kimarad a végső hashből h7.
A változók kezdeti értékei az h0SHA h7-224-ben vannak:
h0 := 0xC1059ED8
h1 := 0x367CD507
h2 := 0x3070DD17
h3 := 0xF70E5939
h4 := 0xFFC00B31
h5 := 0x68581511
h6 := 0x64F98FA7
h7 := 0xBEFA4FA4
Az SHA-512 szerkezete azonos, de:
- a szavak 64 bitesek,
- 80 lövést használnak 64 helyett,
- az üzenet 1024 bites darabokra van felosztva,
- a változók és állandók kezdeti értéke 64 bitre bővül,
- a 80 kör mindegyikének állandója a 80 első prím,
- eltolódás a műveletekben rotr, és shrkülönböző számú pozícióban hajtják végre.
A változók kezdeti értékei az h0SHA h7-512-ben vannak:
h0 := 0x6a09e667f3bcc908,
h1 := 0xbb67ae8584caa73b,
h2 := 0x3c6ef372fe94f82b,
h3 := 0xa54ff53a5f1d36f1,
h4 := 0x510e527fade682d1,
h5 := 0x9b05688c2b3e6c1f,
h6 := 0x1f83d9abfb41bd6b,
h7 := 0x5be0cd19137e2179
Az SHA-384 megegyezik az SHA-512-vel, kivéve:
- változók h0– h7eltérő kezdeti értékük van,
- h6és kimaradnak a végső hashből h7.
A változók kezdeti értékei az h0SHA h7-384-ben vannak
(a prímszámok négyzetgyökeinek tört részeinek első 64 bitje 9-től 16-ig [23-tól 53-ig]):
h0 := CBBB9D5DC1059ED8
h1 := 629A292A367CD507
h2 := 9159015A3070DD17
h3 := 152FECD8F70E5939
h4 := 67332667FFC00B31
h5 := 8EB44A8768581511
h6 := DB0C2E0D64F98FA7
h7 := 47B5481DBEFA4FA4
Az SHA-512/256 megegyezik az SHA-512-vel, kivéve:
- változók h0– h7eltérő kezdeti értékük van,
- a végső hash-t balra 256 bitre csonkolják.
A változók kezdeti értéke az h0SHA h7-512/256-ban található :
h0 := 22312194FC2BF72C
h1 := 9F555FA3C84C64C2
h2 := 2393B86B6F53B151
h3 := 963877195940EABD
h4 := 96283EE2A88EFFE3
h5 := BE5E1E2553863992
h6 := 2B0199FC2C85B8AA
h7 := 0EB72DDC81C52CA2
Az SHA-512/224 megegyezik az SHA-512-vel, kivéve:
- változók h0– h7eltérő kezdeti értékük van,
- az utolsó hash-t balra 224 bitre csonkolják.
A változók kezdeti értéke az h0SHA h7-512/224-ben található :
h0 := 8C3D37C819544DA2
h1 := 73E1996689DCD4D6
h2 := 1DFAB7AE32FF9C82
h3 := 679DD514582F9FCF
h4 := 0F6D2B697BD44DA8
h5 := 77E36F7304C48942
h6 := 3F9D85A86A1D36C8
h7 := 1112E6AD91D692A1
Példák
Az alábbiakban példák láthatók az SHA-2 protokoll különböző verziói alatti kivonatokra ugyanarra a szövegre . Minden példa ASCII kódolás használatát feltételezi .
SHA-224 ("
A gyors barna róka átugrik a lusta kutyán ")
= 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256 ("A gyors barna róka átugrik a lusta kutyán")
= D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384 ("A gyors barna róka átugrik a lusta kutyán")
= CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50
9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512 ("A gyors barna róka átugrik a lusta kutyán")
= 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64
2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
SHA-512/256 ("A gyors barna róka átugrik a lusta kutyán")
= DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224 ("A gyors barna róka átugrik a lusta kutyán")
= 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37
Az üzenet legkisebb változása az esetek túlnyomó többségében a hash teljes megváltozásához vezet a lavinahatás miatt . Például a következőre dogváltáskor cog(a változás csak egy bitet érint a kódolt frázis 344-éből), a hash drámaian megváltozik:
SHA-256 ("A gyors barna róka átugrik a lusta fogaskeréken")
= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Kriptanalízis
A hash függvény kriptoanalízise magában foglalja az algoritmus stabilitásának tanulmányozását legalább a következő típusú támadásokkal szemben:
- ütközések keresése , azaz különböző üzenetek ugyanazzal a hash-sel - ettől függ az elektronikus digitális aláírás biztonsága ezzel a hash algoritmussal;
- prototípus , azaz ismeretlen üzenet keresése a hash alapján - ettől függ a jelszókivonatok hitelesítési célú tárolásának biztonsága .
2003- ban Gilbert és Handschuh tanulmányt végzett az SHA-2-vel kapcsolatban , de nem találtak sebezhetőséget [8] . 2008 márciusában azonban Somitra Kumar Sanadiya és Palash Sarkar indiai kutatók közzétették az SHA-256 és SHA-512 22 iterációja során talált ütközéseket [9] . Ugyanezen év szeptemberében bemutattak egy módszert az SHA-2 csonka verzióinak ütközések létrehozására (21 iteráció) [10] [11] . Később találtak módszereket ütközések létrehozására az SHA-256 [12] 31 és az SHA-512 [13] 27 iterációjához .
Az SHA-2 és az SHA-1 algoritmikus hasonlósága és az utóbbi lehetséges sebezhetősége miatt úgy döntöttek, hogy az SHA-3 egy teljesen más algoritmuson fog alapulni [14] [15] . 2012. október 2-án a NIST jóváhagyta a Keccak algoritmust SHA-3 néven .
Pályázat és tanúsítás
Lásd még: Kivonat alkalmazása
Az Egyesült Államok törvényei engedélyezik az SHA-224 , SHA-256 , SHA-384 , SHA-512 , SHA-512/256 és SHA-512/224 használatát bizonyos kormányzati alkalmazásokban, ideértve az egyéb kriptográfiai algoritmusokon és protokollokon belüli felhasználást is a védelem érdekében. információ , amely nem rendelkezik titkosítási bélyegzővel. A szabvány magán- és kereskedelmi szervezetek számára is lehetővé teszi az SHA-2 használatát [16] .
Az SHA-2 hash függvények az adatok integritásának ellenőrzésére és különféle kriptográfiai sémákban használatosak. 2008 -tól az SHA-2 hash-függvénycsalád nem olyan elterjedt, mint az MD5 és az SHA-1 [17] , az utóbbiban talált hiányosságok ellenére.
Néhány példa az SHA-2 használatára a táblázatban található:
Alkalmazási terület
|
Részletek
|
S/MIME
|
SHA-224 , SHA-256 , SHA-384 vagy SHA-512 üzenet kivonatok [18]
|
OpenLDAP
|
SHA-256 , SHA-384 vagy SHA -512 jelszókivonatok [19]
|
DNSSEC
|
SHA-256 DNSKEY kivonatok a DNSSEC protokollban [20]
|
X.509
|
Az SHA-224 , SHA-256 , SHA-384 és SHA-512 egy tanúsítvány elektronikus digitális aláírásának létrehozására szolgál [21]
|
PGP
|
Az SHA-256 , SHA-384 , SHA-512 elektronikus digitális aláírás létrehozására szolgál [22]
|
IPSec
|
Egyes megvalósítások támogatják az SHA-256 -ot az ESP és IKE protokollokban [23]
|
DSA
|
Az SHA-2 családot elektronikus digitális aláírás létrehozására használják [24]
|
SHACAL-2
|
A SHACAL-2 blokk titkosítási algoritmus az SHA-256 hash függvényen alapul
|
bitcoin
|
Az olyan adatok kombinációjának megtalálása, amelyek SHA-256 hashje megfelel a megadott feltételnek, a kriptovaluta kibocsátása
során végzett munka bizonyítéka |
Tanulmányok kimutatták [25] , hogy az SHA-2 algoritmusok 2-3-szor lassabbak, mint a többi népszerű hash algoritmus ( MD5 , SHA-1 , Tiger és RIPEMD-160 ).
Minősítés
Az SHA-2 implementációi , mint minden szövetségi információfeldolgozási szabvány, tanúsíthatók bizonyos alkalmazásokban az Egyesült Államokban. A tanúsítás a Cryptographic Module Validation Program részeként történik, amelyet az Egyesült Államok Nemzeti Szabványügyi és Technológiai Intézete hajt végre a Kanadai Kommunikációs Biztonsági Irodával közösen.
2008. november 5- ig több mint 250 SHA-2 implementációt tanúsítottak , amelyek közül négy olyan üzenetet képes kezelni, amelynek bithossza nem a nyolcszoros [26] .
A FIPS PUB 180-4, CRYPTREC és NESSIE tanúsítványa .
Lásd még
Jegyzetek
- ↑ FIPS PUB 180-2 . - az SHA-2 szabvány eredeti verziója. Letöltve: 2008. november 19. Az eredetiből archiválva : 2012. március 18..
- ↑ FIPS PUB 180-2 változási értesítéssel . - a szabvány változata SHA-224-gyel. Letöltve: 2008. november 19. Az eredetiből archiválva : 2012. március 18..
- ↑ FIPS PUB 180-3 . - A Secure Hash Standard 2008. októberi kiadása. Letöltve: 2008. november 19. Az eredetiből archiválva : 2012. március 18..
- ↑ FIPS PUB 180-4 (angol) (hivatkozás nem érhető el) . – a Secure Hash Standard 2015. augusztusi kiadása. Letöltve: 2015. augusztus 28. Az eredetiből archiválva : 2016. november 26..
- ↑ US 6829355 szabadalom . — Eszköz és módszer az egyirányú kriptográfiai kivonatoláshoz. Letöltve: 2017. május 14. Az eredetiből archiválva : 2016. július 27.
- ↑ Licencnyilatkozat a 6829355 számú amerikai egyesült államokbeli szabadalomhoz . (neopr.) . (Angol)
- ↑ "Crypto++ 5.6.0 benchmarks". Letöltve: 2013-06-13. . Letöltve: 2016. szeptember 25. Az eredetiből archiválva : 2016. október 14.. (határozatlan)
- ↑ Gilbert H. , Handschuh H. SHA-256 és nővérek biztonsági elemzése // Selected Areas in Cryptography : 10th Annual International Workshop , SAC 2003, Ottawa, Kanada, 2003. augusztus 14-15. Revised Papers / M Matsui Zuccherato J. - Berlin , Heidelberg , New York, NY , London [stb.] : Springer Berlin Heidelberg , 2004. - P. 175-193. - ( Számítástechnikai előadások jegyzetei ; 3006. évf.) - 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-Step Collisions for SHA-2 Archiválva : 2010. március 30. a Wayback Machine -nél
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. 21 lépéses ütközések determinisztikus konstrukciói az SHA-2 hash- családhoz
- ↑ "21 lépéses ütközések determinisztikus konstrukciói az SHA-2 hash családhoz" előadás archiválva 2010. július 3-án a Wayback Machine -nél
- ↑ Mendel F. , Nad T. , Schläffer M. Improving Local Collisions: New Attacks on Redduced SHA-256 // Advances in Cryptology – EUROCRYPT 2013 : 32nd Annual International Conference on the Theory and Applications of Cryptographic Techniques, May Athén, Görögország, 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
- ↑ Christoph Dobraunig, Maria Eichlseder és Florian Mendel. Az SHA-512/224 és az SHA-512/256 elemzése (undefined) . — 2016.
- ↑ Schneier a biztonságról: NIST Hash Workshop Liveblogging (5) Archivált : 2008. október 7. a Wayback Machine -nél
- ↑ Hash cracked - heise Security Archiválva : 2008. december 6. a Wayback Machine -nél
- ↑ FIPS 180-2: Secure Hash Standard (SHS): 6. Alkalmazhatóság Az eredetiből archiválva : 2012. március 18. (Angol)
- ↑ SHA-1 , SHA-256 a Google keresőmotor eredményeiben
- ↑ draft-ietf-smime-sha2-08 Archivált : 2009. június 22. a Wayback Machine -nél : SHA2 algoritmusok használata kriptográfiai üzenet szintaxissal
- ↑ SHA-2 hash támogatás az OpenLDAP-ban Archiválva : 2010. július 27. a Wayback Machine -nél
- ↑ RFC 4509 : SHA-256 használata a DNSSEC Delegation Signer (DS) erőforrásrekordokban (RR)
- ↑ RFC 4055 : További algoritmusok és azonosítók az RSA kriptográfiához az Internet X.509 nyilvános kulcsú infrastruktúra tanúsítvány és tanúsítvány visszavonási lista (CRL) profiljában
- ↑ RFC 4880 : OpenPGP üzenetformátum
- ↑ A Windows Vista Service Pack 1 áttekintése: Új szabványok archiválva 2016. március 12-én a Wayback Machine -nél
- ↑ FIPS-186-2 Archiválva : 2009. május 18. : Digitális aláírás szabvány (DSS)]
- ↑ Népszerű kriptoalgoritmusok sebesség-összehasonlítása [1] Archiválva : 2008. október 15. a Wayback Machine -nél
- ↑ SHS-ellenőrzési lista archiválva : 2011. augusztus 23. a Wayback Machine -nél
Irodalom
Linkek
- FIPS 180-3 , archiválva az eredetiből: 2012. március 18. : Secure Hash Standard (SHS)
- RFC 3874 : 224 bites egyirányú hash-funkció: SHA-224
- RFC 4634 : US Secure Hash Algorithms (SHA és HMAC-SHA)