Grostl | |
---|---|
Dezvoltatori | Soren Stefan Thompson, Lars Knudsen , Martin Schlaffer, Christian Rechberger, Florian Mendel, Christian Matusevich, Praaven Gauravaram |
Dimensiunea hash | 224, 256, 384, 512 (variabil, 8-512 biți) |
Numărul de runde | 9 (recomandat) |
Tip de | funcția hash |
Grøstl ( Groestl ) este o funcție hash criptografică iterativă . Unul dintre cei cinci finaliști în competiția SHA-3 organizată de NIST . Funcția de contracție Grøstl constă din două permutări fixe de 2n biți P și Q, a căror structură este împrumutată din cifrul AES . În special, este folosită aceeași S-box . Rezultatul funcției hash poate avea o lungime de la 8 la 512 biți cu un pas de 8 biți. Varianta care returnează n biți se numește Grøstl-n.
Algoritmul Grøstl a fost conceput special pentru competiția de funcții criptografice SHA-3 de o echipă de criptografi [1] de la Universitatea Tehnică Daneză . Funcția a fost inițial numită Grøstl-0. Cu toate acestea, diferențele structurale dintre permutări au fost crescute pentru a se califica în finală. Au fost modificate valorile ShiftBytes în permutarea Q. Au fost modificate și constantele rotunde din P și Q. Funcția hash actualizată a fost numită Grøstl. Cu toate acestea, după ce a demonstrat o putere criptografică bună , a fost inferior celorlalți participanți în runda finală într-un număr de indicatori și nu a putut deveni un câștigător.
Gröstl este un fel de mâncare austriac . Rețeta este foarte apropiată de felul de mâncare numit „Hash” în SUA . Litera „ö” din numele funcției a fost înlocuită cu litera „ø” din alfabetul danez, care are aceeași pronunție.
Grøstl este o rețea SP orientată pe octeți . În structura sa, diferă semnificativ de algoritmii familiei SHA. Multe componente ale funcției hash sunt împrumutate de la cifrul AES. La fel ca AES, permutările sunt dezvoltate folosind strategia de proiectare Wide Trail , ale cărei principii principale sunt că cifrul bloc are :
Dimensiunea stării interne a funcției este mult mai mare decât dimensiunea datelor de ieșire. Aceasta este așa-numita „construcție cu țevi late”.
În primul rând, mesajul este împărțit în blocuri , ,…, fiecare bit cu bit. Pentru variantele de funcție care returnează până la 256 de biți = 512. Pentru variantele care returnează valori mari = 1024.
Apoi, o funcție hash este construită folosind o metodă de calcul recurentă. Fiecare bloc este procesat secvenţial de o funcţie de compresie conform formulei , .
, ,…, este așa-numita intrare de înlănțuire.
Valoarea inițială = .
După procesarea ultimului bloc, valoarea -bit este introdusă în funcția de transformare Ω , care returnează un mesaj de lungime , astfel încât ≤ .
Astfel, rezultatul funcției hash Ω
Valoarea inițială a funcției Grøstl-n i se atribuie o reprezentare -bit a numărului n. Tabelul arată valorile inițiale pentru diferite funcții hash.
224 | 00…00 00 e0 |
256 | 00...00 01 00 |
384 | 00...00 01 80 |
512 | 00...00 02 00 |
Pentru a lucra cu mesaje de lungime arbitrară, utilizați funcția . Acesta convertește un mesaj de lungime arbitrară într-un mesaj cu o lungime care este un multiplu de . Pentru a face acest lucru, la mesaj se adaugă mai întâi un bit cu valoarea 1. Apoi se adaugă zero biți, unde . Și, în final, se adaugă o reprezentare pe 64 de biți a numărului . Același număr determină numărul de blocuri în care va fi împărțit mesajul.
Funcția de comprimare sau funcția de compresie constă din permutări de doi biți și și este definită ca .
Funcția de transformare de ieșire este definită ca Ω , unde este o funcție care returnează ultimii biți ai valorii de intrare .
Funcția de compresie Grøstl poate funcționa cu mesaje scurte (512 biți) și mesaje lungi (1024 biți). În consecință, există 4 permutări , și , .
Fiecare permutare este efectuată în runde, în fiecare dintre acestea fiind efectuate 4 transformări runde:
Aceste transformări controlează starea, care este reprezentată de o matrice A care conține 1 octet de informații în fiecare celulă. Pentru a lucra cu rezumate de mesaje scurte, matricea are o dimensiune de 8X8, pentru rezumate lungi - 8X16.
În primul rând, matricea A este umplută cu o secvență de octeți. De exemplu, pentru secvența 00 01 02 … 3f matricea A arată astfel.
Matricea 8 X 16 este umplută în același mod.
În continuare, se efectuează transformări rotunde pe matricea A.
AddRoundConstantAceastă transformare realizează o operație XOR între matricea de stări și o constantă specifică rotundei: A←A , unde este o constantă specifică rotunjii. Aceste constante sunt diferite pentru fiecare permutare a lui P și Q:
512
1024
512
1024
unde este numărul rotund reprezentat de o valoare de 8 biți.
SuboctețiAceastă transformare înlocuiește fiecare octet al matricei de stare cu o valoare luată din S-box. Funcția hash Grøstl folosește aceeași casetă S ca și cifrul AES. Prin urmare, transformarea arată astfel: ← , unde este un element al matricei A. Și S-box arată astfel:
00 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 0a | 0b | 0c | 0d | 0e | 0f | |
00 | 63 | 7c | 77 | 7b | f2 | 6b | 6f | c5 | treizeci | 01 | 67 | 2b | fe | d7 | ab | 76 |
zece | ca | 82 | c9 | 7d | fa | 59 | 47 | f0 | anunț | d4 | a2 | af | 9c | a4 | 72 | c0 |
douăzeci | b7 | fd | 93 | 26 | 36 | 3f | f7 | cc | 34 | a5 | e5 | f1 | 71 | d8 | 31 | cincisprezece |
treizeci | 04 | c7 | 23 | c3 | optsprezece | 96 | 05 | 9a | 07 | 12 | 80 | e2 | eb | 27 | b2 | 75 |
40 | 09 | 83 | 2c | 1a | 1b | 6e | 5a | a0 | 52 | 3b | d6 | b3 | 29 | e3 | 2f | 84 |
cincizeci | 53 | d1 | 00 | ed | douăzeci | fc | b1 | 5b | 6a | cb | fi | 39 | 4a | 4c | 58 | cf |
60 | d0 | ef | aa | fb | 43 | 4d | 33 | 85 | 45 | f9 | 02 | 7f | cincizeci | 3c | 9f | a8 |
70 | 51 | a3 | 40 | 8f | 92 | 9d | 38 | f5 | bc | b6 | da | 21 | zece | ff | f3 | d2 |
80 | CD | 0c | 13 | ec | 5f | 97 | 44 | 17 | c4 | a7 | 7e | 3d | 64 | 5d | 19 | 73 |
90 | 60 | 81 | 4f | DC | 22 | 2a | 90 | 88 | 46 | ee | b8 | paisprezece | de | 5e | 0b | db |
a0 | e0 | 32 | 3a | 0a | 49 | 06 | 24 | 5c | c2 | d3 | ac | 62 | 91 | 95 | e4 | 79 |
b0 | e7 | c8 | 37 | 6d | 8 D | d5 | 4e | a9 | 6c | 56 | f4 | ea | 65 | 7a | ae | 08 |
c0 | ba | 78 | 25 | 2e | 1c | a6 | b4 | c6 | e8 | dd | 74 | 1f | 4b | bd | 8b | 8a |
d0 | 70 | 3e | b5 | 66 | 48 | 03 | f6 | 0e | 61 | 35 | 57 | b9 | 86 | c1 | 1d | 9e |
e0 | e1 | f8 | 98 | unsprezece | 69 | d9 | 8e | 94 | 9b | 1e | 87 | e9 | ce | 55 | 28 | df |
f0 | 8c | a1 | 89 | 0d | bf | e6 | 42 | 68 | 41 | 99 | 2d | 0f | b0 | 54 | bb | 16 |
Transformarea caută elementele din prima coloană și elementul din primul rând.( este un „sau”) logic. Ieșirea este elementul situat la intersecția lor.
Fie α=[α 1 , α 2 ,…, α 7 ] o mulțime de numere întregi de la 1 la 7. Transformarea ShiftBytes rotește toți octeții din rândul i a matricei de stare A cu pozițiile α i la stânga. Pentru permutările P și Q, aceste seturi de numere sunt diferite:
În consecință, pentru funcția ShiftBytesWide:
Cu această transformare, fiecare coloană a matricei A este înmulțită cu o matrice constantă B într-un câmp finit . Matricea B este definită ca
Transformarea MixBytes poate fi notată ca: A←B A.
Fiabilitatea unei funcții hash depinde direct de numărul de runde. Ca rezultat al criptoanalizei, a fost posibil să se producă doar primele 3 runde. Tabelul arată câteva dintre rezultatele criptoanalizei efectuate în runda finală a concursului de funcție hash SHA-3:
Ținta atacului | Tip de atac | Numărul de biți de ieșire | numărul de runde | Numărul de operații |
---|---|---|---|---|
funcția hash | găsirea coliziunilor | 224, 256 | 3 | 264 _ |
funcția hash | găsirea coliziunilor | 512 | 3 | 2192 _ |
Funcția de compresie | găsirea coliziunilor parțiale | 256 | 6 | 2 120 |
Funcția de compresie | găsirea coliziunilor parțiale | 384 | 6 | 2 180 |
Funcția de compresie | găsirea coliziunilor parțiale | 512 | 6 | 2 180 |
Permutare | proprietate diferenţială | 256 | 9 | 2368 _ |
Permutare | proprietate diferenţială | 512 | opt | 2280 _ |
Permutare | proprietate diferenţială | 512 | 9 | 2328 _ |
Permutare | proprietate diferenţială | 512 | zece | 2392 _ |
transformarea ieșirii | Găsirea prototipului | 256 | 6 | 2251 _ |
transformarea ieșirii | Găsirea prototipului | 256 | 5 | 2206 _ |
transformarea ieșirii | Găsirea prototipului | 512 | opt | 2495 _ |
funcția hash | găsirea unei pseudo-preimagine | 256 | 5 | 2245 _ |
funcția hash | găsirea unei pseudo-preimagine | 512 | opt | 2507 _ |
Implementarea software a lui Grøstl este concepută în principal pentru un procesor pe 64 de biți, dar este posibil să se lucreze și pe procesoare pe 32 de biți. În timpul testelor desfășurate în finala competiției NIST, performanța funcției hash a fost cea mai scăzută în comparație cu ceilalți participanți la competiție. Cu toate acestea, la executarea algoritmului pe un microcontroler, viteza de funcționare a acestuia s-a dovedit a fi mult mai mare decât cea a concurenților. Tabelul arată viteza implementărilor software ale diferitelor versiuni ale funcției.
CPU | Varianta caracteristică | Viteza (ciclu/octet) |
---|---|---|
Intel Core i7 M620 | Grøstl-224/256 | 12.45 |
Intel Core i7 M620 | Grøstl-384/512 | 17.85 |
Următorul tabel arată implementarea pe 8 biți pe microcontrolerul ATmega 163.
funcția hash | CPU | Memorie | Viteza (ciclu/octet) |
---|---|---|---|
Grøstl-256 | ATmega163 | 994 | 469 |
Grøstl-256 | ATmega163 | 226 | 531 |
Grøstl-256 | ATmega163 | 164 | 760 |
Valorile diferitelor variante hash dintr-un șir gol.
Grøstl-224("") 0x f2e180fb5947be964cd584e22e496242c6a329c577fc4ce8c36d34c3 Grøstl-256("") 0x 1a52d11d550039be16107f9c58db9ebcc417f16f736adb2502567119f0083467 Grøstl-384("") 0x ac353c1095ace21439251007862d6c62f829ddbe6de4f78e68d310a9205a736d8b11d99bffe448f57a1cfa2934f044a5 Grøstl-5 0x 6d3ad29d279110eef3adbd66de2a0345a77baede1557f5d099fce0c03d6dc2ba8e6d4a6633dfbd66053c20faa87d1a11f39a8081f04a96082f040000000O mică modificare a mesajului poate duce la o modificare mare a valorii hash din cauza efectului de avalanșă , așa cum se arată în exemplul următor:
Grøstl-256 ("Vulpea maro iute sare peste câinele leneș") 0x 8c7ad62eb26a21297bc39c2d7293b4bd4d3399fa8afab29e970471739e28b301 Grøstl-256(„Vulpea maro iute sare peste câinele leneș”) 0x f48290b1bcacee406a0429b993adb8fb3d065f4b09cbcdb464a631d4a0080aaf Grøstl-512 ("Vulpea maro iute sare peste câinele leneș") 0x badc1f70ccd69e0cf3760c3f93884289da84ec13c70b3d12a53a7a8a4a513f99715d46288f55e1dbf926e6d084a0538e6d084a0538e6d084a0538e614eeebst2c91429292c91429292c91429292000 0x 518a55cc274fc887d8dcbd0bb24000395f6d3be62445d84cc9e85d419161a968268e490f7537e475e57d8c009b095702caaccd58202caaccd5820cabcd58Funcții hash | |
---|---|
scop general | |
Criptografic | |
Funcții de generare a cheilor | |
Numărul de verificare ( comparație ) | |
Hashes |
|