Jag är ny om kryptografi, jag lärde mig att SHA-3
(Secure Hash Algorithm 3) är den senaste medlemmen i Secure Hash Algorithm-familjen av standarder, släppt av NIST.
Men jag såg nyligen SHA-256
men jag får inte vad det är i jämförelse med SHA-3
?
Kommentarer
- SHA-256 är SHA-2 med 256-bitars utdata. SHA-2 är föregångaren till SHA-3. De delar väldigt lite utöver namnet.
- Men namnet fångar kärnan. Om du inte gör kryptografi är det här alla säkra hash-algoritmer. Kontraktet och säkerhetsanspråken är nästan identiska .
- @MeirMaor Med tanke på förekomsten av SHA-1 som verkar vara ett djärvt uttalande.
- @Maeher skapades SHA1 med i princip samma krav, vi vet nu att det inte ' t uppfyller dem. Åtminstone kraven på kollisionsmotstånd. Det har också en mindre utmatningsstorlek medan SHA3 kan ha samma utmatningsstorlek som SHA2.
Svar
De viktigaste skillnaderna mellan den äldre SHA-256 av SHA-2-familjen FIPS 180 och den nyare SHA3-256 av SHA-3-familjen av FIPS 202 , är:
-
Motstånd mot längdförlängningsattacker. Med SHA-256, ges $ H (m) $ men inte $ m $ , det är lätt att hitta $ H (m \ mathbin \ | m ”) $ för vissa suffix $ m” $ . Inte så med någon av SHA-3-funktionerna.
Detta betyder, t.ex. , att $ m \ mapsto H (k \ mathbin \ | m) $ är inte en säker meddelandeautentiseringskod under nyckel $ k $ när $ H $ är SHA-256, eftersom du vet att autentiseraren i ett meddelande låter dig smida autentiseraren till ett annat. Längdsförlängningsegenskapen rörde delvis utvecklingen av HMAC.
Däremot är nyckelprefixkonstruktionen säker som en MAC när $ H $ är någon av SHA-3-funktionerna — eller någon av de nyare SHA-2-funktionerna SHA-512/224 och SHA-512/256. För SHA-224, som i huvudsak är 224-bitars avkortning av SHA-256 (men med en annan IV), har motståndaren en $ 2 ^ {- 32} $ chans att gissa de kasserade bitarna av utdata i en enda testversion – liten men inte försumbar.
-
Prestanda. SHA-2-funktionerna – särskilt SHA-512, SHA-512/224 och SHA-512/256 – har i allmänhet högre prestanda än SHA-3-funktionerna. Delvis var detta av paranoia och politiska skäl i SHA-3-designprocessen.
(Som svar svarades en av SHA-3-finalisterna ut i den mycket snabbare BLAKE2 , som också används ofta på internet idag, och SHA-3-vinnaren Keccak spreds ut i den mycket snabbare KangarooTwelve . )
-
Helt annorlunda intern design. SHA-2 använder Davies –Meyer-struktur, en förekomst av Merkle-Damgård-strukturen, med en blockchiffer (ibland kallad SHACAL-2) byggd av ett ARX-nätverk, som MD4; SHA-3 använder svampstrukturen med Keccak-permutationen.
Det finns ingen användarsynlig skillnad här, men det gjorde skillnad för kryptografernas förtroende för designen efter många DM / ARX-design baserade på MD4 bröts i slutet av 90- och början av 2000-talet.
Historia. Det har funnits en lång rad hashfunktioner standardiserade av NIST i FIPS 180, Secure Hash Standard och senare FIPS 202¸ SHA-3-standarden: Permutationsbaserad och utdragbar utgång Funktioner. Mer information och historik, inklusive relaterade MD4- och MD5-hashfunktioner som SHA-0, SHA-1 och SHA-2 – men inte SHA-3 – baserades på:
\ begin {ekvation} \ börjar {array} {ccc} \ text {hash} & \ text {år} & \ text {koll. res.} & \ text {size (bits)} & \ text {design} & \ text {trasig?} \\ \ hline \ text {MD4} & 1990 & 64 & 128 & \ text {32-bitars ARX DM} & 1995 \\ \ text {SHA-0 (SHA)} & 1993 & 80 & 160 & \ text {32 -bit ARX DM} & 1998 \\ \ text {MD5} & 1993 & 64 & 128 & \ text {32-bitars ARX DM} & 2004 \\ \ text {SHA-1} & 1995 & 80 & 160 & \ text {32-bitars ARX DM} & 2005 \\ \ hline \ text {SHA-256 (SHA-2)} & 2002 & 128 & 256 & \ text { 32-bitars ARX DM} & \\ \ te xt {SHA-384 (SHA-2)} & 2002 & 192 & 384 & \ text {64-bitars ARX DM} & \\ \ text {SHA-512 (SHA-2)} & 2002 & 256 & 512 & \ text {64-bitars ARX DM} & \\ \ hline \ text {SHA-224 (SHA-2)} & 2008 & 112 & 224 & \ text {32-bitars ARX DM} & \\ \ text {SHA-512/224} & 2012 & 112 & 224 & \ text {64-bitars ARX DM} & \\ \ text {SHA-512/256 } & 2012 & 128 & 256 & \ text {64-bitars ARX DM} & \\ \ hli ne \ text {SHA3-224} & 2013 & 112 & 224 & \ text {64-bitars Keccak-svamp} & \\ \ text {SHA3-256} & 2013 & 128 & 256 & \ text {64-bitars Keccak-svamp} & \\ \ text {SHA3-384} & 2013 & 192 & 384 & \ text {64-bitars Keccak-svamp} & \\ \ text {SHA3-512 } & 2013 & 256 & 512 & \ text {64-bitars Keccak-svamp} & \\ \ text {SHAKE128} & 2013 & {\ leq} 128 & \ text {any} & \ text {64-bitars Keccak-svamp} \\ \ text {SHAKE256} & 2013 & {\ leq} 256 & \ text {any} & \ text {64-bitars Keccak-svamp} \ end {array} \ end {ekvation}
-
1993 publicerade NIST FIPS 180 , Secure Hash Standard, som definierar SHA-0 , ursprungligen bara namnet SHA för Secure Hash-algoritm, avsedd för användning med den nyligen publicerade DSA. SHA-0 är en enda 160-bitars hashfunktion som syftar till 80-bitars kollisionssäkerhet (och nu helt trasig) , baserat om den relativt nya och snabba designen av MD4 1990.
-
1995 drog NIST tyst tillbaka FIPS 180 och ersatte den med FIPS 180-1 definierar SHA-1 , vilket skiljer sig från SHA-0 genom att inkludera en enda -bit rotation. Liksom SHA-0 är SHA-1 en enda 160-bitars hashfunktion som syftar till 80-bitars kollisionssäkerhet (och nu helt trasig).
Ingen allmän förklaring gavs för förändringen, men det dröjde inte länge innan Eli Biham hade publicerat differentiell kryptanalys och det akademiska samfundet insåg att NSA: s tweaks till DES S-boxarna på 1970-talet förbättrade faktiskt säkerheten (tänk inte på att de minskade 128-bitars nyckelstorlek för Lucifer till 56 bitar för DES, vilket helt förstörde säkerheten samtidigt). Samma år bröt Dobbertin MD4 [1] och nästa år allvarligt skadad MD5 [2] . Inte långt efter det, 1998, Florent Chabaud och Antoine Joux rapporterade en $ 2 ^ {61} $ -kollisionsattack på SHA-0 [3] .
-
År 2002 publicerade NIST FIPS 180-2 och definierade SHA-2 , en familj av relaterade hashfunktioner med olika storlekar: SHA- 256, SHA-384 och SHA-512, namngivna för sina utmatningsstorlekar och riktar sig mot 112-, 128-, 192- och 256-bitars kollisionsmotstånd. SHA -2 funktioner fortsatte designprinciperna för MD4, MD5, SHA-0 och SHA-1, med fler omgångar och större tillstånd. Inte långt efter det, 2004, rapporterade Xiaoyun Wangs team fullständiga kollisioner på MD5 och andra hashfunktioner [4] och publicerade 2005 en $ 2 ^ {69} $ -kostnadsattack mot SHA-1 [5] , betydligt billigare än generisk. Eftersom många av designen baserade på MD4 har gått sönder nu blev alla nervösa för den designen, så …
-
2007 lanserade NIST SHA-3-tävlingen för att designa en efterträdare till SHA-2, om designen skulle bli dålig. Tävlingen skulle äga rum under flera år.
-
Under tiden 2008 uppdaterade NIST Secure Hash Standard med FIPS 180-3 och lägger till SHA-224 till SHA-2-familjen, och sedan 2012 uppdaterade NIST den igen med FIPS 180-4 (2012) och lade till SHA-512/224 och SHA-512/256 , snabbare 256-bitars och 384-bitars hashfunktioner på 64-bitars maskiner med motstånd mot längdförlängningsattacker som låter en beräkna $ H (m \ mathbin \ | m ”) $ givet $ H (m) $ och vissa $ m” $ utan vet $ m $ .
-
År 2013 avslutades SHA-3-tävlingen med Keccak som NIST: s utvalda vinnare , som de publicerade i FIPS 202 . SHA-3 innehåller fyra hashfunktioner i fast storlek, SHA3-224, SHA3-256, SHA3-384, SHA3-512 och två hashfunktioner för utdragbar utgång SHAKE128 och SHAKE256 som uppnår upp till en 128-bit eller 256 -bit säkerhetsnivå om utdata är tillräckligt långa.
Designen av SHA-3 är helt annorlunda än SHA-2, vilket ger förtroende för att kryptanalytiska genombrott på designlinjer baserade på MD4 troligen inte påverkar SHA-3, men ett och ett halvt decennium efter blodbadet i början av 2000-talet finns det inget bi n mycket framsteg på SHA-2 heller. Parametrarna som valdes för SHA-3-funktionerna i fast storlek var typiskt överdesignade av politiska skäl [6] , så SHA-3-funktioner som SHA3-256 är långsammare än de behöver vara, och du bör i allmänhet bara använda SHAKE128 eller SHAKE256.
Kommentarer
- När du säg " helt trasigt ", såvitt jag förstår det är det möjligt att beräkna m1 , m2 så att H ( m1 ) = H ( m2 ). Ingen har dock lyckats, med ett fast meddelande M , att beräkna ett meddelande m (inte lika med M ) så att H ( M ) = H ( m ).
- @MartinBonner Ja, jag ' jag talar om kollisionsmotstånd här, varför de två orden precis före ”och nu helt brutna” är ”kollisionssäkerhet”. Jag ' jag tar inte upp förebildsmotstånd här eftersom säker användning av en förbildsresistent men inte kollisionsresistent hashfunktion är väldigt subtil och jag ' försöker att inte lämna fällor för oförsiktiga läsare ; Jag adresserar tillståndet för MD5 ' s preimage motstånd någon annanstans när det ' frågas särskilt.
Svar
Skillnad mellan SHA256 och SHA3
Huvudskillnaden för SHA256 och SHA3 är deras intern algoritmdesign .
SHA2 (och SHA1) är byggda med Merkle – Damgård-strukturen .
SHA3 å andra sidan är byggd med en Svampfunktion och tillhör Keccak-familjen.
Namnet kan vara vilseledande att tro att SHA3 jämfört med SHA2 bara är en " nyare " version av algoritmen. Som SEJPM sa: " […] De delar väldigt lite utöver namnet." Namnet ges bara från NIST och betyder " Säker hashingalgoritm ", en familj av officiella standarder.
Även om du kan konstruera MAC s med både SHA256 och SHA3 är SHA3 MAC lättare att använda (se fgrieus kommentar nedan).
Utdata
SHA256 matar ut en 256-bitars hash.
SHA3 tillåter utdata av
- 224-bit
- 256-bit
- 384-bit
- 512-bitars
hash, även om SHA2-varianterna (SHA256 är en av dessa varianter) också möjliggör dessa längder.
SHA3-algoritmer kan modifieras till " SHAKE " algoritmer och de tillåter en utdata av godtycklig längd. Du kan hitta ytterligare information i denna tidigare ställda fråga .
Säkerhet
Hash som bara använder Merkle – Damgård-strukturen och levererar sin fulla L (eller nästan full) tillstånd är sårbara för längdförlängningsattacker .
SHAKE-algoritmer är också användbara för Optimal asymmetrisk kryptering vaddering .
Du kan se en direkt jämförelse här (wikipedia) .
Kommentarer
- Strikt taget " Hash som använder Merkle – Damg å rd struktur är sårbara för längdförlängningsattacker " är felaktig. Motexempel inkluderar SHA-512/256 och SHA-384, eftersom de inte matar ut sitt fullständiga tillstånd. En annan är SHA-256d, definierad som SHA-256d (m) = SHA-256 (SHA-256 (m)), eftersom den döljer tillståndet för den första hash. Vad som gäller är att " Hashes som bara använder Merkle – Damg å rd struktur och mata ut deras fullständiga (eller nästan fulla) tillstånd är sårbara för längdförlängningsattacker ". Det finns ' en annan skillnad mellan SHA-2 och SHA-3: den senare är lättare att använda som en MAC.
- Vad menar du med " enklare att använda " som MAC? Säkrare / snabbare / implementering?
- Vi kan bygga en MAC med ett säkerhetsargument från SHA-3 som $ \ text {SHA-3} (K \ | M) $ (för en viss längd av $ K $ det beror på SHA-3-varianten och borde vara öh, jag vet inte ' säkert); när vi inte ' t har ett sådant argument med SHA-2 (även när egenskapen längdförlängning inte gäller). Se avsnitt 5.1.12 i Kryptografiska svampfunktioner .