A szivárványos tábla (szó szerint szivárványos égbolt-tábla ) kriptanalízisben van , egy adatstruktúra, amelyet 2003-ban az EPFL-ből Philippe Oechslin hozott létre, hogy helyreállítson egy jelszót a lábnyomából . Ez az idő-memória kompromisszumok javulása, amelyet Martin Hellman az 1980-as években javasolt .
A táblázat, amely csak a figyelembe vett hash függvénytől függ, nagyszámú jelszó párból áll . E párok megszerzéséhez jelszóval kezdjük, és kiszámoljuk az ujjlenyomatát. A táblázatban található pozíciótól függően változó " csökkentési funkció " lehetővé teszi új jelszó újrateremtését ebből az ujjlenyomatból. Megismételjük ezt a folyamatot, és fix számú ismétlés után kapunk egy jelszót, amely a pár második elemét képezi. Az egyszer elkészített táblázat lehetővé teszi a jelszó keresését, ismerve ujjlenyomatát a figyelembe vett hash függvény alapján.
Az Oechslin által kifejlesztett algoritmus optimalizálja az ütközések észlelését és a bejárást a táblázatban. Javaslatokat tettek az asztal méretének csökkentésére is. Számos táblázat készíthető a siker esélyeinek javítása érdekében.
A helyesen kivonatolt jelszavakkal már hatékony algoritmus (a Windows "Fgpyyih804423" jelszó 160 másodperc alatt megtalálható) még inkább a LAN Manager jelszavakkal rendelkezik , amelyek LM hash-t (és ezért nagyon alacsony biztonsági szintet) használnak. Ezek tehát néhány másodpercen belül megtalálhatók, ha alfanumerikusak. A táblázatok bármely más kivonatolási funkcióval együtt használhatók, például MD5 vagy SHA-1 , az utóbbiak lényegesen rejtélyesebbek, mint a LAN Manager, és nagyobb táblákat igényelnek.
A jelszavak használatának egyik fő veszélye a felhasználói jelszavakat tartalmazó adatbázisok megsértése. A támadók az esetleges jogsértéseket kihasználva lekérik a rendszer jelszótábláját. Indokolt lehet azt feltételezni, hogy egy támadó, amely képes megsérteni a rendszer jelszótábláját, már rendelkezik elegendő hozzáféréssel ahhoz, hogy az korlátozottan érdekelje őt. Viselkedési vizsgálatok azt mutatják, hogy a felhasználók elterjedtek ugyanazon jelszó újrafelhasználása a különböző helyszínek vagy rendszerek számára, ezért az a támadó, aki egy adott rendszer jelszavát veszélyezteti, gyakran képes levezetni belőlük a szavakat.
Ennek a jelenségnek a leküzdése érdekében a modern biztonsági előírások tiltják a jelszavak egyszerű szövegben történő tárolását a hitelesítés-kezelő rendszerek által, éppen ellenkezőleg, csak a jelszavak kivonatolt verzióinak megőrzését ösztönzik .
Az erre a célra használt kriptográfiai kivonatoló funkciókat kifejezetten matematikailag nehéz visszafordítani, ezért a támadót gyakran arra korlátozzák, hogy durva erővel támadó módszereket alkalmazzon .
A hash függvények itt is optimalizálva vannak, hogy növeljék az egyes összehasonlítási kísérletek idejét.
Az ilyen típusú támadások végrehajtási idejének csökkentésére használt egyik fő módszer az idő-memória kompromisszumok használatán alapul . A szivárványos égbolt asztal ( angolul : rainbow table ) az ilyen típusú támadások kifinomult formája.
A szivárványos tábla pár jelszóból áll (azaz minden sorban van egy kezdő és egy befejező jelszó). A táblázat kiszámításához a karakterláncokat egy kezdeti jelszóval hozzák létre. Ez egy sor redukción és kivonuláson megy keresztül a köztes elemek (jelszavak és a megfelelő ujjlenyomatok) megszerzése érdekében. A kicsinyítési funkció az ujjlenyomatot új jelszóvá változtatja. Az ütközési problémák elkerülése érdekében számos redukciós funkciót használnak. Több ezer ismétlés után jelszót kapunk a lánc végén. Ezt tárolja a karakterláncot létrehozó jelszóval. A lánc többi részét nem tartják meg a szükséges memória korlátozása érdekében. Megtalálható azonban, ha kiszámítja a teljes láncot a lista tetején lévő elemből.
Újból egy új jelszóval kezdjük, hogy létrehozzunk egy új láncot, és így tovább, amíg össze nem áll egy táblázat, amelynek statisztikája elegendő a támadás sikerének garantálásához.
Formálisabban: a lánc kiszámítása a kezdeti P jelszó és a redukciós függvények alapján történik (az egyes iterációkban az ütközések korlátozásához különbözőek):
Jelszó keresés
Figyelembe vesszük a P jelszóból előállított H ujjlenyomatot. Az első lépés abban áll, hogy H-t veszünk, alkalmazzuk rá a táblázatban használt utolsó csökkentési függvényt, és megnézzük, hogy ez a jelszó megjelenik-e a táblázat utolsó oszlopában. Ha ez az előfordulás nem található meg, akkor arra következtethetünk, hogy a lenyomat nem a vizsgált lánc végén volt. Vissza kell mennünk egy lépést. Ismét H-t veszünk, alkalmazzuk rá az utolsó előtti csökkentési funkciót, új jelszót kapunk. Kiválasztjuk ezt a jelszót, alkalmazzuk az utolsó csökkentési funkciót, és megnézzük, hogy a jelszó megjelenik-e a táblázatban.
Ez az iteratív eljárás addig folytatódik, amíg a karakterlánc végén kiszámított jelszó meg nem jelenik a táblázatban (ha nem találunk semmit, a támadás nem sikerül). Miután felfedezte a jelszót az utolsó oszlopban, helyreállítjuk a jelszót, amely ugyanazon sor első oszlopában található. Újra kiszámoljuk a láncot, miközben minden egyes iterációnál összehasonlítjuk az aktuális jelszóból nyert ujjlenyomatot az ismeretlen P jelszó H ujjlenyomatával. Ha egyenlőség van, akkor az aktuális jelszó megfelel a keresettnek, és a támadás sikeres volt; pontosabban olyan jelszót találtak, amelynek ujjlenyomata megegyezik a P-vel, ami elegendő.
PéldaAz asztalok hatékonysága jelentősen csökken, ha a hash funkciókat sóval kombinálják . Jelszórendszerben a só véletlenszerű összetevő vagy számláló, amely a felhasználótól függően változik. Ha két felhasználónak ugyanaz a jelszava, a só megakadályozza, hogy az ujjlenyomatok azonosak legyenek. Informálisan a só egy típusú műveletből áll:
empreinte = h(mot_de_passe + sel)ahol a + művelet lehet összefűzés vagy összetettebb művelet.
Ez az intézkedés növeli a támadás bonyolultságát: nemcsak a tábláknak köszönhetően meg kell változtatni a függvényt, hanem meg kell vizsgálni a só jelenléte által kiváltott összes lehetőséget is. Ha a támadás sikeres, akkor is el kell távolítania a sót a jelszóból.
A gyakorlatban néhány alkalmazás nem használ sót, és sebezhető. Ezenkívül a sónak elegendő hosszúságúnak kell lennie ahhoz, hogy jelentősen növelje a komplexitást. Túl rövid só (például 4 bit) csak megsokszorozná a bonyolultságot 16-os tényezővel. A GNU / Linux rendszerben az MD5 hash-függvényt használjuk egy 8 karakteres ASCII- sóval , ami a gyakorlatban lehetetlenné teszi a támadást.