Tiger er en kryptografisk hashfunktion udviklet af Ros Anderson og Eli Biham i 1995.
Tiger er designet til at køre særligt hurtigt på 64-bit computere. Tiger har ingen patentrestriktioner, kan frit bruges både med referenceimplementeringen og med dens modifikationer. Størrelsen af hashværdien er 192 bit (Tiger/192), selvom der også er kortere versioner for kompatibilitet med SHA-1 (Tiger/160) og med MD4 , MD5 , RIPEMD, Snefru (Tiger/128). Driftshastighed - 132 Mbps (testet på én Alpha 7000-processor, model 660). På moderne processorer er det meget hurtigere (selv når det testes på en 32-bit AMD Sempron 3000+, er hastigheden omkring 225 Mbps).
Tiger2 er en version af Tiger, der kun adskiller sig fra den primære i en anden bit-tilføjelsesalgoritme, der ligner MD5 / SHA-1 . Testvektorer er tilgængelige for Tiger2.
Algoritmen blev udviklet i 1995 af Ross Anderson og Eli Biham. Den tid var præget af, at man allerede fandt kollisioner for de populære hash-funktioner MD4 og Snefru . Sidstnævnte satte ifølge forfatterne spørgsmålstegn ved pålideligheden af deres derivater, såsom MD5 og Snefru-8 . Hovedmålene i udviklingen af Tiger var:
Antallet af brugte S-bokse er 4. S-boks konverterer 8 bit til 64 bit. Det vil sige, at hver af dem har 256 64-bit ord, og den samlede mængde hukommelse, der kræves til at gemme S-bokse, er 4*256*8 = 8192 = 8 KB. Til dette er cachen på de fleste processorer nok, selvom det kan være svært at implementere på mikrocontrollere.
Som med MD4- familien tilføjes en "1" bit til meddelelsen efterfulgt af nuller. Indgangsdataene er opdelt i n blokke af 512 bit.
Vælg den første 512-bit blok. Denne blok er opdelt i otte 64-bit ord x0, x1, ..., x7. Byte-rækkefølgen er little-endian .
Tre 64-bit registre tages med startværdier (hashværdi ):
a = 0x0123456789ABCDEF b=0xFEDCBA9876543210 c = 0xF096A5B4C3B2E187For nu at gå fra værdi til værdi udføres følgende handlinger:
Her gemmer save_abc værdien :
aa = a bb = b cc=cpass(a, b, c, mul) betyder:
runde(a,b,c,x0,mul) rund(b,c,a,x1,mul) rund(c,a,b,x2,mul) rund(a,b,c,x3,mul) rund(b,c,a,x4,mul) rund(c,a,b,x5,mul) rund(a,b,c,x6,mul) rund(b,c,a,x7,mul)hvor runde (a, b, c, x, mul) :
c ^= x a -= t1[c_0] ^ t2[c_2] ^ t3[c_4] ^ t4[c_6] b += t4[c_1] ^ t3[c_3] ^ t2[c_5] ^ t1[c_7] b *= mulc_i — i-te byte c (0 <= i <= 7);
^ - XOR operation;
ti - i-te S-kasse
key_schedule - nøglegenerering, en reversibel funktion , der er ansvarlig for at ændre et lille antal bits af beskeden x for at få et stort antal bit til at ændre sig ved næste udførelse af pass :
x0 -= x7^0xA5A5A5A5A5A5A5A5 x1 ^= x0 x2 += x1 x3 -= x2 ^ ((~x1)<<19) x4 ^= x3 x5 += x4 x6 -= x5 ^ ((~x4)>>23) x7 ^= x6 x0 += x7 x1 -= x0 ^ ((~x7)<<19) x2 ^= x1 x3 += x2 x4 -= x3 ^ ((~x2)>>23) x5 ^= x4 x6 += x5 x7 -= x6^0x0123456789ABCDEFhvor <<og >> er logiske skift til venstre og højre, ~ er inversionen
feedforward - feedback:
a ^= aa b -= bb c += ccDet vil sige, at vi får 24 runder i alt. Sammenkædningen af de modtagne værdier a , b , c giver en mellemliggende hashværdi , som bruges som startværdien for den næste 512-bit datablok. En mellemværdi på den sidste blok giver en 192-bit Tiger/192 værdi.
Eksempler på hash-værdier opnået ved hjælp af testtiger-programmet fra forfatterens side [1] .
Hash("") = 24F0130C63AC9332 16166E76B1BB925F F373DE2D49584E7A Hash("Tiger") = 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDFVigtigste sikkerhedsaspekter af tigeren:
Et koblet nøgleangreb er et angreb, hvor en kryptoanalytiker kan beregne en hash for flere forskellige værdier af initialiseringsvektorer, som han ikke kender, men kender et forhold mellem dem (for eksempel at de adskiller sig med en bit eller en del af alle vektorer er en og samme). På grund af denne type angreb måtte WEP -kryptering skiftes til WPA .
Et mellemliggende fødselsdagsangreb er et fødselsdagsangreb, der anvendes i mellemrunder for at opnå de ønskede hashværdier. Selvom angreb af denne type ifølge forfatterne næppe vil føre til mindre kompleksitet (i overensstemmelse med fødselsdagsparadokset ).
Lad h(x, m) være en hashfunktion , hvor x er en initialiseringsvektor, m er en beskedblok. ^ er XOR-operationen, w{} er Hamming-vægten (antallet af ikke-nul-komponenter af det binære tal ). Derefter:
Ideelt set, i overensstemmelse med fødselsdagsparadokset , ville det i det mindste kræve operationer at finde en kollision af en N-bit hashfunktion .
I 2006 introducerede John Kelsey og Stefan Lax en Tiger-16- kollision (med 16 runder i stedet for 24) med besvær , og en næsten pseudo-kollision for Tiger-20 med besvær . Senere samme år viste Florian Mendel et al., hvordan man anvender John Kelsey og Stefan Lax' angrebsteknik for at få en Tiger-19 kollision, og foreslog også to forskellige teknikker til at få denne kollision med og .
Antal runder | Type | Kompleksitet | Beskrivelse |
Tiger-16 | kollision | [artikel 1] | |
Tiger-19 | kollision | og | [artikel 2] |
Tiger-19 | pseudokollision | [artikel 2] | |
Tiger-21 | pseudokollision | [artikel 2] | |
Tiger-23/128 | pseudokollision | [artikel 2] | |
Tiger-23 | pseudokollision | [artikel 3] | |
Tiger-20 | næsten pseudo-kollision | [artikel 1] | |
Tiger-21 | næsten pseudo-kollision | [artikel 2] | |
Tiger-22 | næsten pseudo-kollision | [artikel 2] | |
Tiger-24 | næsten pseudo-kollision | [artikel 3] |
Lad os forklare ideen om at finde en kollision for Tiger-16, dvs. for en Tiger med 16 runder, skitseret af John Kelsey og Stefan Laks [artikel 1] .
Vi betragter 64-bit ord. Vi vil beskæftige os med en forskel mellem to typer ord: xor-forskellen og den additive forskel . Den første af dem er resultatet af den sædvanlige difference modulo , og den anden er resultatet af XOR-operationen. Normalt er transformationen af en type forskel til en anden et spørgsmål om tilfældigheder. Men der er et tilfælde, hvor to typer forskelle er lig med hinanden med sandsynlighed 1. Nemlig, når forskellen , er gyldig i dette tilfælde, adskiller ordene sig simpelthen fra hinanden med den mest signifikante bit. Vi bemærker også differenceegenskaben - den ændrer sig ikke, hvis ordet ganges med et ulige tal (hvilket er meget praktisk, da algoritmen bruger ulige mul = 5, 7, 9).
Lad . Under sæt
(I0, I1, I2, I3, I4, I5, I6, I7)vi mener, at forskellen mellem nøglernes j-th (j = 0, 1, ..., 7) 64-bit ord er ens (det er lige meget hvilken type, da vi kun vil overveje forskelle og 0) . Det vil sige = xj ^ xj'.
John Kelsey og Stefan Laks foreslog at tage to blokke (512 bit hver) med en forskelsvektor . Hvis du følger algoritmen, under hensyntagen til egenskaberne af forskelle, kan du vise, at efter det første gennemløb (efter runder 0, 1, ..., 7) og key_schedule vil der være en vektor . Efter runde 8-9 får vi , og runder 10-15 påvirker ikke forskellen. Således får vi teknikken til at holde forskelle mellem nøgler med en sandsynlighed på 1.
Samtidig løses problemet med at opretholde forskellen i hashværdierne a, b, c ved hjælp af meddelelsesændringer gennem mellemliggende angreb af fødselsdage , så der efter runde 6 var en forskelsvektor og efter runder 7-9 - . Meddelelsesmodifikationsteknikken er den mest tidskrævende, og det er her den resulterende kompleksitet opnås . Runde 10-15 vil ikke gøre nogen forskel (faktisk, nøglerne til dette trin er allerede de samme).
Det vil sige, at efter 16 runder vil hashværdierne matche.
Tiger bruges i TTH -teknologi , hvor hashen beregnes i træform. TTH bruges igen i fildelingsprotokollerne Gnutella , Gnutella2 , Direct Connect samt Phex, BearShare, LimeWire , Shareaza , DC++ og Valknut filhosting .
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|