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] .
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] :
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.
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, 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'.
For alle og , sådan at , , vi sætter
For alle , sådan at , , ,
For alle , sådan at
Lad i begyndelsen . For 0 til 23:
For alle , sådan at , ,
For alle , sådan at , ,
Vi introducerer en ekstra funktion , hvor input er et heltal og output er lidt.
Algoritme- rundt tal.
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.
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 ) |
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 ) |
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) 46b9dd2b0ba88d13233b3feb743eeb243fcd52ea62b81b82b50c27646ed5762fd75dc4ddd8c0f200cb05019d67b592f4864329bc2c429bc2c429bc2c429bc2c429bEn 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) 853f4538be0db9621a6cea659a06c1107b1f83f02b13d18297bd39d7411cf10cMå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 |
Implementeringer:
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|