MD6 | |
---|---|
Oprettet | 2008 |
offentliggjort | 2008 |
Hash størrelse | variabel, 0<d≤512 |
Antal runder | variabel. Standard, Uden nøgle=40+[d/4], med nøgle=max(80,40+(d/4)) |
Type | hash funktion |
MD6 ( Message Digest 6 ) er en hashingalgoritme med variabel længde udviklet af professor Ronald Rivest fra Massachusetts Institute of Technology i 2008 [1] . Designet til at skabe "fingeraftryk" eller beskedsammendrag af vilkårlig længde. Foreslået at erstatte den mindre avancerede MD5 . Ifølge forfatterne er algoritmen modstandsdygtig over for differentiel kryptoanalyse. Bruges til at kontrollere integriteten og i en vis forstand ægtheden af offentliggjorte meddelelser ved at sammenligne meddelelsesoversigten med den offentliggjorte meddelelse. Denne operation kaldes hashcheck. Hash-funktioner er også meget brugt til at generere nøgler med fast længde til krypteringsalgoritmer baseret på en given nøglestreng.
MD6 er en af en række algoritmer for meddelelsesfordøjelse udviklet af professor Ronald L. Rivest fra Massachusetts Institute of Technology. MD6 blev først introduceret på Crypto 2008-konferencen som en kandidat til SHA-3- standarden . Men senere i 2009 på samme konference udtalte Rivest, at MD6 endnu ikke var klar til at blive en standard. På den officielle MD6 hjemmeside udtalte han, at selvom ansøgningen ikke formelt er trukket tilbage, har algoritmen stadig problemer med hastighed og manglende evne til at levere sikkerhed i versionen med et reduceret antal runder [2] . Som følge heraf kvalificerede MD6 sig ikke til anden runde af konkurrencen. Tidligere, i december 2008, opdagede en forsker hos Fortify Software en bufferoverløbsfejl i den originale MD6-implementering. Den 19. februar 2009 offentliggjorde professor Rivest detaljerne om denne fejl og leverede også en implementeringsrettelse [3] .
Hash-funktionsalgoritmen bruger nogle meget originale ideer. I én omgang behandles 512 bytes, hvilket gør det vanskeligt at udføre en række angreb og letter parallelisering, som også bruges til træstrukturer.
M | original besked med længden m , 1 ≤ m ≤ (2 64 - 1) bit |
---|---|
d | længden af den resulterende hash i bit, 1 ≤ d ≤ 512 |
K | vilkårlig nøgleværdi af længde keylen bytes (0 ≤ keylen ≤ 64), polstret med nuller til højre med et tal på 64 - keylen |
L | ikke-negativ 1-byte parameter, 0 ≤ L ≤ 64 (standard L = 64), der angiver antallet af parallelle beregninger og trædybden |
r | 12-bit ikke-negativ parameter: antal runder (standard r = 40 + [ d /4]) |
Q | en matrix af 15 elementer af 8 bytes, dens værdi er angivet nedenfor |
ƒ | MD6-komprimeringsfunktion, der konverterer 712 bytes inputdata (inklusive blok B på 512 bytes) til resultat C på 128 bytes ved hjælp af r runder af evaluering |
PAR | parallel krympeoperation for hvert træniveau, kaldes aldrig, når L = 0 |
SEQ | seriel kompressionsoperation, kaldet aldrig, når L = 64 |
Q-array
Betegn l = 0, M 0 = M , m 0 = m .
HovedsløjfePAR returnerer en meddelelse med længden m l = 1024 * max(1, [ m l-1 / 4096])
ProceduretekstSEQ returnerer en hash af længden d bits. Denne operation kaldes aldrig, hvis L = 64.
ProceduretekstFunktionen tager som input et array N , bestående af n = 89 8-byte ord (712 bytes) og antallet af runder r .
Funktionen returnerer et array C med 16 elementer på 8 bytes.
t0 _ | t1 _ | t2 _ | t3 _ | t4 _ |
---|---|---|---|---|
17 | atten | 21 | 31 | 67 |
( i - n ) mod 16 | 0 | en | 2 | 3 | fire | 5 | 6 | 7 | otte | 9 | ti | elleve | 12 | 13 | fjorten | femten |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
r i-n | ti | 5 | 13 | ti | elleve | 12 | 2 | 7 | fjorten | femten | 7 | 13 | elleve | 7 | 6 | 12 |
l i-n | elleve | 24 | 9 | 16 | femten | 9 | 27 | femten | 6 | 2 | 29 | otte | femten | 5 | 31 | 9 |
Si -n = S | (in)/
16S | 0 = 0x0123456789abcde
S* = 0x7311c2812425cfa0
S | j+1 = ( S | j <<< 1) ⊕ ( S | j ^ S*)
Angiv t = 16 r . (Der vil være 16 trin i hver runde)
Lad A [0.. t + n - 1] være en matrix af t + n 8-byte elementer. De første n elementer skal kopieres fra input-arrayet N .
Hovedfunktionsløkken ser sådan ud:
for i = n til t + n - 1: /* t trin */
Returner A [ t + n - 16 .. t + n - 1].
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|