SHA-3

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 3. januar 2016; checks kræver 57 redigeringer .
SHA-3, Keccak
Udviklere Guido Bertoni, Joan Dymen , Mikael Pieters, Gilles Van Asche
Oprettet 2008
offentliggjort 2008
Forgænger SHA-2
Hash størrelse 224, 256, 384, 512 (variabel, 0<d≤2 64 -1)
Antal runder 24 (standard)
Type hash funktion

SHA-3 ( Keccak  -udtales "kechak") er en hashing -algoritme med variabel længde udviklet af en gruppe forfattere ledet af Joan Dymen , medforfatter til Rijndael , forfatter til MMB , SHARK , Noekeon , SQUARE og BaseKing-cifre . Den 2. oktober 2012 blev Keccak vinderen af ​​den kryptografiske algoritmekonkurrence afholdt af US National Institute of Standards and Technology [1] . Den 5. august 2015 blev algoritmen godkendt og offentliggjort som en FIPS 202 [2] [3] standard . I softwareimplementering hævder forfatterne 12,5 cyklusser pr. byte, når de udføres på en pc med en Intel Core 2-processor . Men i hardwareimplementeringer viste Keccak sig at være meget hurtigere end alle de andre finalister. [fire]

SHA-3-algoritmen er bygget på princippet om en kryptografisk svamp (denne struktur af kryptografiske algoritmer blev foreslået tidligere af forfatterne af Keccak-algoritmen) [5] .

Historie

I 2004-2005 blev adskillige hashing-algoritmer angrebet, herunder alvorlige angreb offentliggjort mod National Institute of Standards and Technology (NIST) SHA-1-algoritme . Som svar afholdt NIST åbne workshops og annoncerede den 2. november 2007 en konkurrence om at udvikle en ny hashing-algoritme. Den 2. oktober 2012 blev Keccak-algoritmen vinderen af ​​konkurrencen og blev standardiseret som den nye SHA-3-algoritme [6] . Den 5. august 2015 blev algoritmen godkendt og offentliggjort som en FIPS 202 [2] [3] standard .

Algoritmen blev udviklet af Guido Bertoni , Joan Dymen , Gilles Van Asche fra STMicroelectronics og Mikael Pieters fra NXP [7] .

Algoritmen er baseret på de tidligere Panama og RadioGatún [8] hash-funktioner . Panama blev udviklet af Dimen og Craig Clapp i 1998, RadioGatún blev implementeret baseret på Panama af Dimen, Peters og Van Asche i 2006 [8] .

Under konkurrencen fik deltagerne lov til at foretage ændringer i deres algoritme for at rette op på problemer, der blev opdaget. Ændringer i Keccak-algoritmen [9] [10] :

Algoritme

Hash-funktionerne i SHA-3- familien er baseret på konstruktionen af ​​en kryptografisk svamp [5] , hvor data først "absorberes" i svampen, hvor den oprindelige besked udsættes for multi-runde permutationer , derefter resultatet "klemmes" ud af svampen. I "soak"-fasen summeres meddelelsesblokkene modulo 2 med en delmængde af tilstanden, hvorefter hele tilstanden transformeres ved hjælp af permutationsfunktionen . Under "push"-stadiet læses udgangsblokkene fra den samme delmængde af tilstanden, der er modificeret af permutationsfunktionen . Størrelsen af ​​den del af tilstanden, der skrives og læses, kaldes "hastigheden" ( eng. rate ) og er angivet med , og størrelsen af ​​den del, der er uberørt af input/output, kaldes "kapaciteten" ( eng . kapacitet ) og er angivet med .

Algoritmen til at opnå hashfunktionsværdien kan opdeles i flere trin [11] :

På grund af det faktum, at tilstanden indeholder yderligere bit, er algoritmen modstandsdygtig over for beskedforlængende angreb , som SHA-1- og SHA-2- algoritmerne er modtagelige for .

I SHA-3 er en tilstand en matrix på 5 × 5 ord med længde = 64 bit, i alt 5 × 5 × 64 = 1600 bit. Også i Keccak kan længder svarende til mindre potenser på 2 (fra = 1 til = 32) bruges.

Tillæg

For at den oprindelige besked M kan opdeles i blokke med længden r , kræves udfyldning . SHA-3 bruger pad10*1 [11] mønsteret: en 1 tilføjes til beskeden, efterfulgt af 0 eller flere nul bits (op til r-1 ), og en 1 i slutningen.

r-1 nul bit kan tilføjes, når den sidste meddelelsesblok er r-1 bit lang. Denne blok er polstret med en, den næste blok vil bestå af r-1 nuller og en.

To 1-bit tilføjes også, hvis længden af ​​den oprindelige besked M er delelig med r [11] . I dette tilfælde tilføjes en blok til meddelelsen, der starter og slutter med enere, mellem hvilke der er r-2 nul bits. Dette er nødvendigt, så for en meddelelse, der slutter med en sekvens af bit som i padding-funktionen, og for en meddelelse uden disse bits, er hash-værdierne forskellige.

Den første 1 bit er nødvendig, så resultaterne af hash-funktionen fra meddelelser, der adskiller sig med flere nulbit i slutningen, er forskellige [11] .

Permutationsfunktionen

Permutationsfunktionen, der bruges i SHA-3, inkluderer eksklusiv OR (XOR) , bitwise AND (AND) og bitwise negation (NOT) . Funktionen er defineret for strenge med længde-potens 2 . I hovedimplementeringen af ​​SHA-3 ( ).

Tilstanden kan repræsenteres som et tredimensionelt array med størrelsen 5 × 5 × . Så er array-elementet statuslinjebitten .

Funktionen indeholder flere trin: , , , , , som udføres i flere omgange [11] . Ved hvert trin betegner vi input-arrayet A, output-arrayet A'.

Trin

For alle og , sådan at , , vi sætter

For alle , sådan at , , ,

Trin

For alle , sådan at

Lad i begyndelsen . For 0 til 23:

  1. For alle , sådan at

Trin

For alle , sådan at , ,

Trin

For alle , sådan at , ,

Trin

Vi introducerer en ekstra funktion , hvor input er et heltal og output er lidt.

Algoritme
  1. Hvis , returneres 1
  2. Lade
  3. For i fra 1 til t mod 255:
    1. R = 0 || R
  4. Vender tilbage
Algoritme

 - rundt tal.

  1. For alle , sådan at , ,
  2. Lade være  en matrix af længde fyldt med nuller.
  3. For 0 til :
  4. For alle , sådan at

Permutationsalgoritme

  1. Oversættelse af en streng til et array
  2. For fra til
  3. Konvertering af et array til en længdestreng

Hashing-meddelelser af vilkårlig længde

Grundlaget for algoritmens kompressionsfunktion er funktionen f, som udfører blandingen af ​​algoritmens interne tilstand. Tilstanden (lad os betegne det A) er repræsenteret som et 5×5 array , hvis elementer er 64-bit ord initialiseret med nul bit (det vil sige størrelsen af ​​tilstanden er 1600 bit). Funktionen f udfører 24 runder, i hver af hvilke følgende handlinger udføres:

C[x] = A[x, 0] A[x, 1] A[x, 2] A[x, 3] A[x, 4], x = 0…4; D[x] = C[x - 1] (С[x + 1] >>> 1), x = 0...4; A[x, y] = A[x, y] D[x], x = 0...4, y = 0...4; B[y, 2x + 3y] = A[x, y] >>> r[x, y], x = 0...4, y = 0...4; A[x, y] = B[x, y] (~B[x + 1, y] & B[x + 2, y]), x = 0…4, y = 0…4,

Hvor:

B  er et midlertidigt array, der i struktur ligner tilstandsarrayet; C og D  er midlertidige arrays, der hver indeholder fem 64-bit ord; r  er et array, der definerer mængden af ​​cyklisk skift for hvert tilstandsord; ~x  er det bitvise komplement af x ; og operationer på array-indekser udføres modulo 5.

Ud over ovenstående operationer pålægger XOR-operationen i hver runde også en rundekonstant på ordet A[0, 0].

Før komprimeringsfunktionen udføres, overlejres driften af ​​XORing af fragmenter af den originale meddelelse med fragmenterne af den oprindelige tilstand. Resultatet behandles af f- funktionen . Denne overlejring udgør sammen med komprimeringsfunktionen udført for hver blok af inputdata den "absorberende" fase af den kryptografiske svamp.

Det er værd at bemærke, at f -funktionen kun bruger operationer, der er resistente over for side-kanal datalækageangreb.

Den resulterende hashværdi beregnes under squeezing-fasen af ​​den kryptografiske svamp, som også er baseret på f -funktionen beskrevet ovenfor . Mulige hash-størrelser er 224, 256, 384 og 512 bit.

Indstillinger

Den originale Keccak-algoritme har mange justerbare parametre [11] for at give den optimale balance mellem kryptografisk styrke og hastighed for en specifik anvendelse af algoritmen på en specifik platform. Justerbare værdier er: størrelsen af ​​datablokken, størrelsen af ​​algoritmetilstanden, antallet af runder i f() -funktionen og andre.

Under National Institute of Standards and Technology hashing-konkurrence havde deltagerne ret til at justere deres algoritmer for at løse problemer. Så der blev foretaget nogle ændringer i Keccak: antallet af runder blev øget fra 18 til 24 for at øge sikkerhedsmarginen.

Forfatterne af Keccak har etableret en række priser for præstationer i kryptoanalysen af ​​denne algoritme.

Den version af algoritmen, der blev vedtaget som den endelige SHA-3-standard, har et par mindre forskelle fra Keccaks oprindelige indsendelse til konkurrencen. Især nogle parametre var begrænsede (langsomme tilstande c=768 og c=1024 blev droppet), herunder for at øge ydeevnen [12] [13] [14] [15] . Standarden introducerede også "funktioner med et udvidet resultat" (XOF, Extendable Output Functions) SHAKE128 og SHAKE256, for hvilke det blev nødvendigt at supplere den hashed-meddelelse med et " suffiks " på 2 eller 4 bit, afhængigt af funktionstypen .

Fungere Formel
SHA3-224( M ) Keccak[448]( M ||01, 224)
SHA3-256( M ) Keccak[512]( M ||01, 256)
SHA3-384( M ) Keccak[768]( M ||01, 384)
SHA3-512( M ) Keccak[1024]( M ||01, 512)
SHAKE128( M , d ) Keccak[256]( M ||1111, d )
SHAKE256( M , d ) Keccak[512]( M ||1111, d )

Yderligere funktioner

I december 2016 offentliggjorde US National Institute of Standards and Technology et nyt dokument, NIST SP.800-185 [16] , der beskriver yderligere funktioner baseret på SHA-3:

Fungere Beskrivelse
cSHAKE128( X , L , N , S ) Parametriseret version af SHAKE
cSHAKE256( X , L , N , S )
KMAC128( K , X , L , S ) Imiteret indsats baseret på Keccak
KMAC256( K , X , L , S )
KMACXOF128( K , X , L , S )
KMACXOF256( K , X , L , S )
TupleHash128( X , L , S ) Hashing en tuple af strenge
TupleHash256( X , L , S )
TupleHashXOF128( X , L , S )
TupleHashXOF256( X , L , S )
ParallelHash128( X , B , L , S ) Parallellerbar hash-funktion baseret på Keccak
ParallelHash256( X , B , L , S )
ParallelHashXOF128( X , B , L , S )
ParallelHashXOF256( X , B , L , S )

Test vektorer

Værdier af forskellige hash-varianter fra en tom streng.

SHA3-224("") 6b4e03423667dbb73b6e15454f0eb1abd4597f9a1b078e3f5b5a6bc7 SHA3-256("") a7ffc6f8bf1ed76651c14756a061d662f580ff4de43b49fa82d80a4b80f8434a SHA3-384("") 0c63a75b845e4f7d01107d852e4c2485c51a50aaaa94fc61995e71bbee983a2ac3713831264adb47fb6bd1e058d5f004 SHA3-512("") a69f73cca23a9ac5c8b567dc185a756e97c982164fe25859e0d1dcc1475c80a615b2123af1f5f94c11e3e9402c3ac558f5050b165d5050b165d5cd2c165d5050b165d5050b165d5050165d5050165d5050165d9 SHAKE128("", 256) 7f9c2ba4e88f827d616045507605853ed73b8093f6efbc88eb1a6eacfa66ef26 SHAKE256("", 512) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f4864329bc2c429bc2c429bc2c429bc2c429b

En lille ændring i meddelelsen resulterer i en stor ændring i hashværdien på grund af lavineeffekten , som vist i følgende eksempler:

SHA3-224(" Den hurtige brune ræv hopper over den dovne hund ") d15dadceaa4d5d7bb3b48f446421d542e08ad8887305e28d58335795 SHA3-224("Den hurtige brune ræv hopper over den dovne hund . ") 2d0708903833afabdd232a20201176e8b58c5be8a6fe74265ac54db0 SHA3-256("Den hurtige brune ræv hopper over den dovne hund") 69070dda01975c8c120c3aada1b282394e7f032fa9cf32f4cb2259a0897dfc04 SHA3-256("Den hurtige brune ræv hopper over den dovne hund . ") a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d SHA3-384("Den hurtige brune ræv hopper over den dovne hund") 7063465e08a93bce31cd89d2e3ca8f602498696e253592ed26f07bf7e703cf328581e1471a7ba7ab119b1a9ebdf8be41 SHA3-384("Den hurtige brune ræv hopper over den dovne hund . ") 1a34d81695b622df178bc74df7124fe12fac0f64ba5250b78b99c1273d4b080168e10652894ecad5f1f4d5b965437fb9 SHA3-512("Den hurtige brune ræv hopper over den dovne hund") 01dedd5de4ef14642445ba5f5b97c15e47b9ad931326e4b0727cd94cefc44fff23f07bf543139939b49128caf436dc1bdee596dc1bdee594fcb5048b404fcb400f200f400f400f200f2000f SHA3-512("Den hurtige brune ræv hopper over den dovne hund . ") 18f4f4bd419603f95538837003d9d254c26c23765565162247483f65c50303597bc9ce4d289f21d1c2f1f458828e330506d38bae4e3d34e34e34e30506b8e3e4e34e3e3e3056b8e3e4e34e3e3056b8ba SHAKE128("Den hurtige brune ræv hopper over den dovne hund", 256) f4202e3c5852f9182a0430fd8144f0a74b95e7417ecae17db0f8cfeed0e3e66e SHAKE128("Den hurtige brune ræv hopper over den dovne dof " , 256) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10c

Krypteringsanalyse

Resultaterne af kryptoanalyse under konkurrencen [4] .
Mål Angrebstype Afslut Mulighed CF opkald Hukommelse
hash funktion kollision 160 r = {240, 640, 1440},

c=160

1, 2 omgange

hash funktion At finde prototypen 80 r = {240, 640, 1440},

c=160

1, 2 omgange

Permutationer angrebsdiskriminerende Alle 24 runder
Permutationer differentiel ejendom Alle 8 runder
hash funktion angrebsdiskriminerende 224, 256 4 runder
hash funktion kollision 224, 256 2 omgange
hash funktion At finde den anden prototype 224, 256 2 omgange
hash funktion At finde den anden prototype 512 6 runder
hash funktion At finde den anden prototype 512 7 runder
hash funktion At finde den anden prototype 512 8 runder
hash funktion kollision 224, 256 4 runder

Noter

  1. NIST udvælger vinder af Secure Hash Algorithm (SHA-3) konkurrence . Hentet 3. oktober 2012. Arkiveret fra originalen 5. oktober 2012.
  2. 1 2 NIST frigiver SHA-3 Cryptographic Hash Standard . Hentet 21. januar 2016. Arkiveret fra originalen 17. august 2015.
  3. 1 2 NIST-manuskriptpublikationssøgning . Hentet 21. januar 2016. Arkiveret fra originalen 12. august 2015.
  4. ↑ 1 2 Shu-jen Chang, Ray Perlner, William E. Burr, Meltem Sonmez Turan, John M. Kelsey. Tredje runde rapport af SHA-3 Cryptographic Hash Algorithm Competition . - doi : 10.6028/nist.ir.7896 .
  5. ↑ 1 2 Keccak Team  . keccak.team. Dato for adgang: 15. december 2017. Arkiveret fra originalen 16. december 2017.
  6. SHA-3-projekt - Hash-funktioner | CSRC . csrc.nist.gov. Hentet 7. november 2017. Arkiveret fra originalen 20. november 2017.
  7. NIST udvælger vinder af Secure Hash Algorithm (SHA-3) konkurrence . NIST (2. oktober 2012). Hentet 2. oktober 2012. Arkiveret fra originalen 30. april 2017.
  8. ↑ 1 2 Guido Bertoni, Joan Daemen, Michaël Peeters, Gilles Van Assche. Vejen fra Panama til Keccak via RadioGatún  // Symmetrisk kryptografi / Helena Handschuh, Stefan Lucks, Bart Preneel, Phillip Rogaway. - Dagstuhl, Tyskland: Schloss Dagstuhl - Leibniz-Zentrum fuer Informatik, Tyskland, 2009. Arkiveret fra originalen den 22. december 2017.
  9. Keccak  Team . keccak.team. Hentet 12. november 2017. Arkiveret fra originalen 13. november 2017.
  10. Keccak  Team . keccak.team. Hentet 12. november 2017. Arkiveret fra originalen 13. november 2017.
  11. ↑ 1 2 3 4 5 6 Morris J. Dworkin. SHA-3 Standard: Permutationsbaseret Hash og Udvidbare Output-funktioner . - doi : 10.6028/nist.fips.202 .
  12. Vil Keccak = SHA-3? (1. oktober 2013). Dato for adgang: 20. december 2013. Arkiveret fra originalen 30. januar 2014.
  13. Hvad pokker sker der med NIST's kryptografiske standard, SHA-3?  (engelsk)  (24. september 2013). Arkiveret fra originalen den 25. januar 2014. Hentet 20. december 2013.
  14. Ja, det er Keccak! (4. oktober 2013). Hentet 20. december 2013. Arkiveret fra originalen 8. december 2013.  - svarerklæring fra forfatterne af Keccak
  15. Keccak svampefunktionsfamilien (17. januar 2011). Hentet 30. september 2015. Arkiveret fra originalen 12. september 2015.  — ændring i udfyldningsalgoritmen i 3. runde af konkurrencen
  16. SHA-3-afledte funktioner: cSHAKE, KMAC, TupleHash og ParallelHash . Hentet 31. oktober 2017. Arkiveret fra originalen 31. oktober 2017.

Links

Implementeringer: