A Tiger egy kriptográfiai hash függvény , amelyet Ros Anderson és Eli Biham fejlesztett ki 1995-ben.
A Tigert úgy tervezték, hogy különösen gyorsan fusson 64 bites számítógépeken. A Tigernek nincs szabadalmi korlátozása, szabadon használható mind a referencia megvalósítással, mind annak módosításaival. A hash érték mérete 192 bit (Tiger/192), bár vannak rövidebb verziók is az SHA-1 (Tiger/160) és az MD4 , MD5 , RIPEMD, Snefru (Tiger/128) kompatibilitás érdekében. Működési sebesség - 132 Mbps (egy Alpha 7000 processzoron tesztelve, 660-as modell). A modern processzorokon sokkal gyorsabb (még 32 bites AMD Sempron 3000+-on tesztelve is körülbelül 225 Mbps).
A Tiger2 a Tiger egy olyan verziója, amely csak az MD5 / SHA-1- hez hasonló bit-hozzáadási algoritmusban különbözik a fő verziótól . A Tiger2 tesztvektorai elérhetők.
Az algoritmust 1995-ben fejlesztette ki Ross Anderson és Eli Biham. Ezt az időt az jellemezte, hogy a népszerű MD4 és Snefru hash függvényeknél már találtak ütközéseket . Ez utóbbiak a szerzők szerint megkérdőjelezték származékaik, például az MD5 és a Snefru-8 megbízhatóságát . A Tiger fejlesztésének fő céljai a következők voltak:
A felhasznált S-boxok száma 4. Az S-box 8 bitet konvertál 64 bitessé. Vagyis mindegyikben 256 64 bites szó van, és az S-boxok tárolásához szükséges teljes memóriamennyiség 4*256*8 = 8192 = 8 KB. Ehhez a legtöbb processzor gyorsítótára is elegendő, bár mikrokontrollereken nehézkes lehet megvalósítani.
Az MD4 családhoz hasonlóan az üzenethez egy "1" bit kerül hozzáadásra, amelyet nullák követnek. A bemeneti adatok n darab 512 bites blokkra vannak osztva.
Válassza ki az első 512 bites blokkot. Ez a blokk nyolc 64 bites szóra van osztva: x0, x1, ..., x7. A bájtok sorrendje little -endian .
Három 64 bites regiszter indul kezdeti értékekkel (hash érték ):
a = 0x0123456789ABCDEF b=0xFEDCBA9876543210 c = 0xF096A5B4C3B2E187Most, hogy értékről értékre váltson , a következő műveleteket kell végrehajtani:
Itt save_abc menti az értéket :
aa = a bb = b cc=cpass(a, b, c, mul) jelentése:
kerek(a,b,c,x0,mul) kerek(b,c,a,x1,mul) kerek(c,a,b,x2,mul) kerek (a,b,c,x3,mul) kerek (b,c,a,x4,mul) kerek (c,a,b,x5,mul) kerek (a,b,c,x6,mul) kerek(b,c,a,x7,mul)ahol kerek (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-edik bájt c (0 <= i <= 7);
^ - XOR művelet;
ti - i-edik S-doboz
key_schedule - kulcsgenerálás, egy megfordítható függvény , amely az x üzenet kis számú bitjének megváltoztatásáért felelős, hogy az átadás következő végrehajtása során nagy számú bit megváltozzon :
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^0x0123456789ABCDEFahol <<és >> a logikai eltolások balra és jobbra, ~ az inverzió
visszacsatolás - visszajelzés:
a ^= aa b -= bb c += ccVagyis összesen 24 kört kapunk. A kapott a , b , c értékek összefűzése közbenső hash értéket ad , amely a következő 512 bites adatblokk kezdőértékeként szolgál. Az utolsó blokkban egy köztes érték 192 bites Tiger/192 értéket ad.
Példák a testtiger programmal nyert hash értékekre a szerző oldaláról [1] .
Hash("") = 24F0130C63AC9332 16166E76B1BB925F F373DE2D49584E7A Hash("Tigris") = 9F00F599072300DD 276ABB38C8EB6DEC 37790C116F9D2BDFA Tigris legfontosabb biztonsági szempontjai:
A linkelt kulcsú támadás olyan támadás, amelyben a kriptoanalitikus kivonatot tud kiszámítani több olyan inicializálási vektor értékéhez, amelyeket nem ismer, de tud ezek között valamilyen kapcsolatot (például, hogy egy bittel különböznek egymástól, vagy egy részük). az összes vektor közül egy és ugyanaz). Az ilyen típusú támadások miatt a WEP titkosítást WPA -ra kellett váltani .
A köztes születésnapi támadás egy születésnapi támadás , amelyet köztes körökben alkalmaznak a kívánt hash értékek elérése érdekében. Bár a szerzők szerint az ilyen típusú támadások valószínűleg nem vezetnek kevésbé bonyolultsághoz ( a születésnapi paradoxonnak megfelelően ).
Legyen h(x, m) egy hash függvény , ahol x egy inicializálási vektor, m egy üzenetblokk. ^ az XOR művelet, w{} a Hamming-súly (a bináris szám nullától eltérő összetevőinek száma ). Akkor:
Ideális esetben a születésnapi paradoxonnak megfelelően egy N bites hash függvény ütközésének megtalálásához legalább műveletekre lenne szükség.
2006-ban John Kelsey és Stefan Lax egy Tiger-16 ütközést mutatott be (24 helyett 16 lövés) , és egy majdnem pszeudo-ütközést a Tiger-20 esetében nehézségekkel . Ugyanebben az évben Florian Mendel és munkatársai megmutatták, hogyan kell alkalmazni John Kelsey és Stefan Lax támadási technikáját a Tiger-19 ütközésének eléréséhez, és két különböző technikát is javasoltak a és -vel való ütközéshez .
A körök száma | Típusú | Bonyolultság | Leírás |
Tigris-16 | ütközés | [1. cikk] | |
Tigris-19 | ütközés | és | [2. cikk] |
Tigris-19 | pszeudoütközést | [2. cikk] | |
Tigris-21 | pszeudoütközést | [2. cikk] | |
Tigris-23/128 | pszeudoütközést | [2. cikk] | |
Tigris-23 | pszeudoütközést | [3. cikk] | |
Tigris-20 | szinte álütközés | [1. cikk] | |
Tigris-21 | szinte álütközés | [2. cikk] | |
Tigris-22 | szinte álütközés | [2. cikk] | |
Tigris-24 | szinte álütközés | [3. cikk] |
Magyarázzuk el a John Kelsey és Stefan Laks által felvázolt Tiger-16, azaz egy 16 töltényű Tigris ütközésének megtalálásának ötletét [1. cikk] .
A 64 bites szavakat tekintjük. Kétféle szó közötti különbséggel fogunk foglalkozni: a xor különbséggel és az additív különbséggel . Ezek közül az első a szokásos differencia modulo eredménye, a második pedig az XOR művelet eredménye. Általában az egyik típusú különbség átalakulása a másikba a véletlen műve. De van olyan eset is, amikor 1-es valószínűséggel kétféle különbség egyenlő egymással. Ha ugyanis ebben az esetben a , különbség érvényes, akkor a szavak egyszerűen a legjelentősebb bittel különböznek egymástól. Megjegyezzük a különbség tulajdonságot is - ez nem változik, ha a szót páratlan számmal szorozzuk (ami nagyon kényelmes, mivel az algoritmus páratlan mul = 5, 7, 9 értéket használ).
Hadd . Beállítás alatt
(I0, I1, I2, I3, I4, I5, I6, I7)azt értjük, hogy a kulcsok j-edik (j = 0, 1, ..., 7) 64 bites szavai közötti különbség egyenlő (nem mindegy, hogy milyen típusú, mert csak a különbségeket és a 0-t vesszük figyelembe) . Vagyis = xj ^ xj'.
John Kelsey és Stefan Laks azt javasolta, hogy vegyenek fel két blokkot (mindegyik 512 bites) különbségvektorral . Ha követi az algoritmust, figyelembe véve a különbségek tulajdonságait, akkor megmutathatja, hogy az első lépés (0, 1, ..., 7 körök után) és a key_schedule után egy vektor lesz . A 8-9. kör után kapunk , a 10-15. fordulók pedig nem befolyásolják a különbséget. Így megkapjuk a kulcsok közötti különbségek 1-es valószínűséggel való megtartásának technikáját.
Ugyanakkor a születésnapok közbenső támadásain keresztül végrehajtott üzenetmódosítások segítségével megoldódik az a, b, c hash-értékek különbségének fenntartásának problémája, így a 6. kör után különbségvektor volt , körök után pedig 7-9 - . Az üzenetmódosítási technika a legidőigényesebb, ebből adódik a komplexitás . A 10-15. körök nem változtatnak (sőt, ennek a lépésnek a kulcsai már ugyanazok).
Ez azt jelenti, hogy 16 kör után a hash értékek megegyeznek.
A Tigert a TTH technológiában használják , ahol a hash-t fa formában számítják ki. A TTH -t viszont a Gnutella , a Gnutella2 , a Direct Connect fájlmegosztó protokollok, valamint a Phex, a BearShare, a LimeWire , a Shareaza , a DC++ és a Valknut fájltárolási protokollok használják .
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|