SHA-2
SHA-2 ( angl. Secure Hash Algorithm Version 2 - bezpečný hashovací algoritmus, verze 2) - rodina kryptografických algoritmů - jednosměrné hashovací funkce , včetně algoritmů SHA-224, SHA-256, SHA-384, SHA-512 , SHA-512/256 a SHA-512/224 .
Hashovací funkce jsou navrženy tak, aby vytvářely „otisky prstů“ nebo „výběry“ zpráv libovolné délky. Používají se v různých aplikacích nebo součástech souvisejících s informační bezpečností .
Historie
Hashovací funkce SHA-2 byly vyvinuty americkou Národní bezpečnostní agenturou a publikovány Národním institutem pro standardy a technologie ve Federálním standardu zpracování informací FIPS PUB 180-2 v srpnu 2002 [1] . Tento standard také zahrnoval hashovací funkci SHA-1 , vyvinutou v roce 1995. V únoru 2004 byl do FIPS PUB 180-2 přidán SHA-224 [2] . V říjnu 2008 byla vydána nová edice standardu - FIPS PUB 180-3 [3] . V březnu 2012 byla vydána nejnovější revize FIPS PUB 180-4 , která přidala funkce SHA-512/256 a SHA-512/224 založené na SHA-512 (protože SHA-512 je rychlejší na 64bitových architekturách než SHA- 256) [4] .
V červenci 2006 se objevil RFC 4634 „U.S. Secure Hash Algorithms ( SHA a HMAC-SHA )“, který popisuje SHA-1 a rodinu SHA-2 .
Národní bezpečnostní agentura jménem státu vydala patent na SHA-2 [5] v rámci bezlicenční licence [6] .
Algoritmus
Obecný popis
Hashovací funkce rodiny SHA-2 jsou postaveny na základě struktury Merkle-Damgor .
Původní zpráva po přidání je rozdělena do bloků, každý blok na 16 slov. Algoritmus prochází každý blok zpráv smyčkou s 64 nebo 80 iteracemi (koly). Při každé iteraci jsou transformována 2 slova, transformační funkce je nastavena zbývajícími slovy. Výsledky zpracování každého bloku se sečtou, součet je hodnota hashovací funkce. Inicializace vnitřního stavu je však výsledkem zpracování předchozího bloku. Proto nemůžete samostatně zpracovávat bloky a přidávat výsledky. Podrobnosti viz pseudokód .
Porovnání hašovacích funkcí
Následující tabulka ukazuje některé technické charakteristiky různých variant SHA-2. „Vnitřní stav“ odkazuje na mezilehlý hash součet po zpracování dalšího bloku dat:
hashovací funkce
|
Délka přehledu zprávy (bity)
|
Délka vnitřního stavu (bity)
|
Délka bloku (bity)
|
Maximální délka zprávy (bity)
|
Délka slova (bity)
|
Počet iterací ve smyčce
|
Rychlost (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
|
Pseudokód
Pseudokód používá následující bitové operace:
SHA-256
Vysvětlivky: Všechny
proměnné jsou bez znaménka, mají velikost 32
bitů
a při výpočtech se sčítají modulo 2 32 zpráva — původní binární zpráva
m — transformovaná zpráva
h0 := 0x6A09E667
h1 := 0xBB67AE85
h2 := 0x3C6EF372
h3 := 0xA54FF53A
h4 := 0x510E527F
h5 := 0x9B05688C
h6 := 0x1F83D9AB
h7 := 0x5BE0CD19
Tabulka konstant
(prvních 32 bitů zlomkové odmocniny prvních 64 prvočísel [2 až 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
Předzpracování:
m := zpráva ǁ [ jeden bit ]
m := m ǁ [k nulových bitů ],
kde k je nejmenší nezáporné číslo takové, že
(L + 1 + K) mod 512 = 448, kde L je počet bitů ve zprávě ( modulo 512 je srovnatelné s 448)
m := m ǁ Délka (zpráva)
je délka původní zprávy v bitech jako 64bitové číslopořadí bajtů
od velkého po malý
Dále je zpráva zpracována v po sobě jdoucích částech 512 bitů:
rozdělit zprávu na části po 512 bitech
za každý kus
rozdělte blok na 16 slov o délce 32 bitů (s
pořadím bajtů od horního k dolnímu konci slova): w[0..15]
Vygenerujte dalších 48 slov:
pro i od 16 do 63
s0 := (w[i-15] rotr 7) xor (w[i-15] rottr 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
Inicializace pomocných proměnných:
a := h0
b := h1
c := h2
d := h3
e := h4
f := h5
g := h6
h := h7
Hlavní smyčka:
pro i od 0 do 63
Σ0 := (a rotr 2) xor (a rotr 13) xor (a rotr 22)
Ma := (a a b) xor (a a c) xor (ba c )
t2 := Σ0 + Ma
Σ1 := (e rotr 6) xor (e rotr 11) xor (e rotr 25)
Ch := (e a f) xor (( nikoli e) a 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
Přidejte získané hodnoty k dříve vypočítanému výsledku:
h0 := h0 + a
h1 := h1 + b
h2 := h2 + c
h3 := h3 + d
h4 := h4 + e
h5 := h5 + f
h6 := h6 + g
h7 := h7 + h
Získejte konečnou hodnotu hash:
digest = hash = h0 ǁ h1 ǁ h2 ǁ h3 ǁ h4 ǁ h5 ǁ h6 ǁ h7
SHA-224 je identický s SHA-256 kromě:
- k inicializaci proměnných h0- h7používají se jiné počáteční hodnoty,
- hodnota je vynechána z konečného hash h7.
Počáteční hodnoty proměnných h0jsou h7v SHA-224:
h0 := 0xC1059ED8
h1 := 0x367CD507
h2 := 0x3070DD17
h3 := 0xF70E5939
h4 := 0xFFC00B31
h5 := 0x68581511
h6 := 0x64F98FA7
h7 := 0xBEFA4FA4
SHA-512 má identickou strukturu, ale:
- slova jsou dlouhá 64 bitů,
- 80 ran se používá místo 64,
- zpráva je rozdělena na části po 1024 bitech,
- počáteční hodnoty proměnných a konstant jsou rozšířeny na 64 bitů,
- konstanty pro každé z 80 kol jsou 80 prvních prvočísel,
- posun v operacích rotra shrprovádí se na různém počtu pozic.
Počáteční hodnoty proměnných h0jsou h7v SHA-512:
h0 := 0x6a09e667f3bcc908,
h1 := 0xbb67ae8584caa73b,
h2 := 0x3c6ef372fe94f82b,
h3 := 0xa54ff53a5f1d36f1,
h4 := 0x510e527fade682d1,
h5 := 0x9b05688c2b3e6c1f,
h6 := 0x1f83d9abfb41bd6b,
h7 := 0x5be0cd19137e2179
SHA-384 je identický s SHA-512 kromě:
- proměnné h0- h7mají různé počáteční hodnoty,
- h6a jsou vynechány z konečného hash h7.
Počáteční hodnoty proměnných h0jsou h7v SHA-384
(prvních 64 bitů zlomkových částí odmocnin prvočísel od 9. do 16. [od 23 do 53]):
h0 := CBBB9D5DC1059ED8
h1 := 629A292A367CD507
h2 := 9159015A3070DD17
h3 := 152FECD8F70E5939
h4 := 67332667FFC00B31
h5 := 8EB44A8768581511
h6 := DB0C2E0D64F98FA7
h7 := 47B5481DBEFA4FA4
SHA-512/256 je identický s SHA-512 kromě:
- proměnné h0- h7mají různé počáteční hodnoty,
- konečný hash je zkrácen o 256 bitů doleva.
Počáteční hodnoty proměnných h0jsou h7v SHA-512/256 :
h0 := 22312194FC2BF72C
h1 := 9F555FA3C84C64C2
h2 := 2393B86B6F53B151
h3 := 963877195940EABD
h4 := 96283EE2A88EFFE3
h5 := BE5E1E2553863992
h6 := 2B0199FC2C85B8AA
h7 := 0EB72DDC81C52CA2
SHA-512/224 je identický s SHA-512 kromě:
- proměnné h0- h7mají různé počáteční hodnoty,
- konečný hash je zkrácen o 224 bitů doleva.
Počáteční hodnoty proměnných h0jsou h7v SHA-512/224 :
h0 := 8C3D37C819544DA2
h1 := 73E1996689DCD4D6
h2 := 1DFAB7AE32FF9C82
h3 := 679DD514582F9FCF
h4 := 0F6D2B697BD44DA8
h5 := 77E36F7304C48942
h6 := 3F9D85A86A1D36C8
h7 := 1112E6AD91D692A1
Příklady
Níže jsou uvedeny příklady hodnot hash pro stejný text v různých verzích protokolu SHA-2 . Všechny příklady předpokládají použití kódování ASCII .
SHA-224("
Rychlá hnědá liška skáče přes líného psa ")
= 730E109B D7A8A32B 1CB9D9A0 9AA2325D 2430587D DBC0C38B AD911525
SHA-256 („Rychlá hnědá liška skáče přes líného psa“)
= D7A8FBB3 07D78094 69CA9ABC B0082E4F 8D5651E4 6D3CDB76 2D02D0BF 37C9E592
SHA-384 („Rychlá hnědá liška skáče přes líného psa“)
= CA737F10 14A48F4C 0B6DD43C B177B0AF D9E51693 67544C49 4011E331 7DBF9A50
9CB1E5DC 1E85A941 BBEE3D7F 2AFBC9B1
SHA-512 („Rychlá hnědá liška skáče přes líného psa“)
= 07E547D9 586F6A73 F73FBAC0 435ED769 51218FB7 D0C8D788 A309D785 436BBB64
2E93A252 A954F239 12547D1E 8A3B5ED6 E1BFD709 7821233F A0538F3D B854FEE6
SHA-512/256 („Rychlá hnědá liška skáče přes líného psa“)
= DD9D67B3 71519C33 9ED8DBD2 5AF90E97 6A1EEEFD 4AD3D889 005E532F C5BEF04D
SHA-512/224 („Rychlá hnědá liška skáče přes líného psa“)
= 944CD284 7FB54558 D4775DB0 485A5000 3111C8E5 DAA63FE7 22C6AA37
Sebemenší změna zprávy v naprosté většině případů vede k úplné změně hashe vlivem lavinového efektu . Například při změně dogna cog(změna ovlivní pouze jeden bit z 344 v zakódované frázi) se hash dramaticky změní:
SHA-256 („Rychlá hnědá liška skáče přes líné kolečko“)
= E4C4D8F3 BF76B692 DE791A17 3E053211 50F7A345 B46484FE 427F6ACC 7ECC81BE
Kryptoanalýza
Kryptoanalýza hashovací funkce zahrnuje studium stability algoritmu proti alespoň následujícím typům útoků:
- nalezení kolizí , tedy různých zpráv se stejným hashem - na tom závisí bezpečnost elektronického digitálního podpisu pomocí tohoto hashovacího algoritmu;
- nalezení prototypu , tedy neznámé zprávy podle jejího hashe - na tom závisí bezpečnost ukládání hash hesel pro účely autentizace .
V roce 2003 Gilbert a Handschuh provedli studii o SHA-2 , ale nenašli žádné zranitelnosti [8] . V březnu 2008 však indičtí výzkumníci Somitra Kumar Sanadiya a Palash Sarkar zveřejnili srážky, které našli pro 22 iterací SHA-256 a SHA-512 [9] . V září téhož roku představili metodu pro konstrukci kolizí pro zkrácené verze SHA-2 (21 iterací) [10] [11] . Později byly nalezeny metody pro konstrukci kolizí pro 31 iterací SHA-256 [12] a pro 27 iterací SHA-512 [13] .
Vzhledem k algoritmické podobnosti SHA-2 s SHA-1 a přítomnosti potenciálních zranitelností v SHA-1 bylo rozhodnuto, že SHA-3 bude založen na zcela jiném algoritmu [14] [15] . 2. října 2012 NIST schválil algoritmus Keccak jako SHA-3 .
Aplikace a certifikace
Viz také Použití hashování
SHA-224 , SHA-256 , SHA-384 , SHA-512 , SHA-512/256 a SHA-512/224 je zákonem USA povoleno pro použití v určitých vládních aplikacích, včetně použití v rámci jiných kryptografických algoritmů a protokolů, k ochraně informace, která není opatřena razítkem tajemství. Standard také umožňuje použití SHA-2 soukromými a komerčními organizacemi [16] .
Hashovací funkce SHA-2 se používají pro kontrolu integrity dat a v různých kryptografických schématech. Od roku 2008 není rodina hašovacích funkcí SHA-2 tak rozšířená jako MD5 a SHA-1 [17] , navzdory nedostatkům zjištěným u posledně jmenovaných.
Některé příklady použití SHA-2 jsou uvedeny v tabulce:
Oblast použití
|
Podrobnosti
|
S/MIME
|
Přehledy zpráv SHA-224 , SHA-256 , SHA-384 nebo SHA-512 [18]
|
OpenLDAP
|
Hash hesel SHA -256 , SHA-384 nebo SHA-512 [19]
|
DNSSEC
|
Digesty SHA-256 DNSKEY v protokolu DNSSEC [20]
|
X.509
|
SHA-224 , SHA-256 , SHA-384 a SHA-512 se používají k vytvoření elektronického digitálního podpisu certifikátu [21]
|
PGP
|
SHA-256 , SHA-384 , SHA-512 se používají k vytvoření elektronického digitálního podpisu [22]
|
IPSec
|
Některé implementace podporují SHA-256 v protokolech ESP a IKE [23]
|
DSA
|
Rodina SHA-2 se používá k vytvoření elektronického digitálního podpisu [24]
|
SHACAL-2
|
Algoritmus blokového šifrování SHACAL-2 je založen na hašovací funkci SHA-256
|
bitcoin
|
Nalezení kombinace dat, jejichž hash SHA-256 splňuje zadanou podmínku, je důkazem práce vykonané při vydávání kryptoměny
|
Studie ukázaly [25] , že algoritmy SHA-2 jsou 2–3krát pomalejší než jiné populární hashovací algoritmy MD5 , SHA-1 , Tiger a RIPEMD-160 .
Certifikace
Implementace SHA-2 , stejně jako všechny federální standardy zpracování informací, mohou být certifikovány pro použití v určitých aplikacích ve Spojených státech. Certifikace probíhá jako součást Cryptographic Module Validation Program , kterou provádí americký Národní institut pro standardy a technologie ve spolupráci s Kanadským úřadem pro bezpečnost komunikací.
K 5. listopadu 2008 bylo certifikováno více než 250 implementací SHA-2 , z nichž čtyři dokážou zpracovat zprávy s bitovou délkou, která není násobkem osmi [26] .
Certifikováno FIPS PUB 180-4, CRYPTREC a NESSIE .
Viz také
Poznámky
- ↑ FIPS PUB 180-2 . - původní verze standardu pro SHA-2. Získáno 19. listopadu 2008. Archivováno z originálu 18. března 2012.
- ↑ FIPS PUB 180-2 s upozorněním na změnu . - varianta standardu s SHA-224. Získáno 19. listopadu 2008. Archivováno z originálu 18. března 2012.
- ↑ FIPS PUB 180-3 . - Vydání Secure Hash Standard z října 2008. Získáno 19. listopadu 2008. Archivováno z originálu 18. března 2012.
- ↑ FIPS PUB 180-4 (anglicky) (odkaz není k dispozici) . — vydání standardu Secure Hash Standard ze srpna 2015. Získáno 28. srpna 2015. Archivováno z originálu dne 26. listopadu 2016.
- ↑ Americký patent 6829355 . — Zařízení a metoda jednosměrného kryptografického hašování. Staženo 14. 5. 2017. Archivováno z originálu 27. 7. 2016.
- ↑ Licenční prohlášení pro US patent 6829355. (neopr.) . (Angličtina)
- ↑ "Crypto++ 5.6.0 Benchmarky". Získáno 2013-06-13. . Získáno 25. září 2016. Archivováno z originálu 14. října 2016. (neurčitý)
- ↑ 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. Zuccher - Berlín , Heidelberg , New York, NY , Londýn [atd.] : 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. Kolize 22 kroků pro SHA-2 Archivováno 30. března 2010 na Wayback Machine
- ↑ Somitra Kumar Sanadhya, Palash Sarkar. Deterministické konstrukce kolizí o 21 krocích pro rodinu hash SHA-2
- ↑ Prezentace „Deterministické konstrukce kolizí o 21 krocích pro rodinu hash SHA-2“ Archivována 3. července 2010 na 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, Mayths, Greece 26-30, 2013. Sborník příspěvků / 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 a Florian Mendel. Analýza SHA-512/224 a SHA-512/256 (nedefinováno) . — 2016.
- ↑ Schneier on Security: NIST Hash Workshop Liveblogging (5) Archivováno 7. října 2008 na Wayback Machine
- ↑ Hash cracked - heise Security Archivováno 6. prosince 2008 na Wayback Machine
- ↑ FIPS 180-2: Secure Hash Standard (SHS): 6. Použitelnost Archivováno z originálu 18. března 2012. (Angličtina)
- ↑ SHA-1 , SHA-256 ve výsledcích vyhledávače Google
- ↑ draft-ietf-smime-sha2-08 Archivováno 22. června 2009 na Wayback Machine : Použití algoritmů SHA2 se syntaxí kryptografických zpráv
- ↑ Podpora SHA-2 hash v OpenLDAP Archivováno 27. července 2010 na Wayback Machine
- ↑ RFC 4509 : Použití SHA-256 v záznamech zdrojů (RR) DNSSEC Delegation Signer (DS)
- ↑ RFC 4055 : Další algoritmy a identifikátory pro kryptografii RSA pro použití v profilu Internetové infrastruktury veřejného klíče X.509 Certifikát a seznam odvolaných certifikátů (CRL)
- ↑ RFC 4880 : Formát zpráv OpenPGP
- ↑ Přehled aktualizace Windows Vista Service Pack 1: Nové standardy archivované 12. března 2016 na Wayback Machine
- ↑ FIPS-186-2 Archivováno 18. května 2009. : Standard digitálního podpisu (DSS)]
- ↑ Porovnání rychlosti populárních krypto algoritmů [1] Archivováno 15. října 2008 na Wayback Machine
- ↑ SHS Validation List Archivováno 23. srpna 2011 na Wayback Machine
Literatura
Odkazy
- FIPS 180-3 Archivováno z originálu 18. března 2012. : Secure Hash Standard (SHS)
- RFC 3874 : 224bitová jednosměrná hashovací funkce: SHA-224
- RFC 4634 : US Secure Hash Algorithms (SHA a HMAC-SHA)