Az ISAAC (Indirection, Shift, Accumulate, Add and Count) egy pszeudo-véletlen számgenerátor , amelyet 1996-ban Robert J. Jenkins Jr. fejlesztett ki az általa kifejlesztett IA és IBAA algoritmusok továbbfejlesztéseként. Ez a generátor kripto-rezisztens pszeudo-véletlenszám-generátornak minősül , bár teljes és szigorú bizonyításra nem került sor.
Robert John Jenkins Jr. amerikai programozó 1993-ban Berkeley -ben szerzett Ph.D fokozatot elméleti számítástechnikából , miután 1989-ben diplomázott a Carnegie Mellon Egyetemen és négy évet az Oracle -nél . Annak ellenére, hogy a Berkeley-ben való tanulás komoly próbatétel volt Jenkins számára – egy év után abba kellett hagynia –, Manuel Blum kriptográfiai kurzusának részeként itt kezdte el a pszeudo-véletlenszám-generátorok tanulmányozását . . 1993 júliusában Jenkins kísérletezni kezdett az Intel 486 processzorok pszeudo-véletlen számokkal, és 1994 áprilisára kifejlesztették az ISAAC-ot. Igaz, a munkásságát ismertető cikk csak két évvel később, 1996 februárjában jelent meg. [egy]
Az RC4 [2] [3] titkosítási algoritmus két lépésből áll: egy pszeudo-véletlen bitsorozat generálása és a bitenkénti összegzés, amely ennek az egyszerű szöveges szekvenciának a második modulja .
A pszeudo-véletlen sorozat generálásának szakaszában az n fontos szerepet játszik - az S-box mérete , az adattömb, amely valójában meghatározza az RC4 belső állapotát . Az RC4-ben a következő változók is használatosak: i és j értékeken átfutó iterátorok , hosszúságú Key tömb , amelyben a kulcs speciális módon van tárolva, és egy S tömb (más néven S-blokk). Kimeneti adatok: a z tömb egy pszeudo-véletlen sorozat .
Tekintsük az n = 8 -at használó algoritmust példaként . Először az S tömböt 0 -tól ig terjedő számokkal , a Key tömböt n-bites szavak sorozatával töltjük meg. Ha a billentyű hossza kisebb, mint S, akkor a sorozatot addig ismételjük, amíg a hossza egyenlő lesz . Ezután az algoritmus a következőképpen működik:
i = 0; j = 0; míg i < 256 //256 = 2^n j = (j + S[i] + Kulcs[i mod hossza]) mod 256; S[i] és S[j] felcserélése; i++;Ezt a szakaszt - az inicializálási szakaszt - követően a pszeudo-véletlen sorozat tényleges generálásának szakasza következik:
i = 0; j = 0; míg én <256 j = (j + S[i]) mod 256; S[i] és S[j] felcserélése; z[i] = S[(S[i] + S[j]) mod 256]; i++;A kimenet egy n hosszúságú szekvencia, amelynek segítségével a nyílt szöveget ezután titkosítják.
Az IA (Indirection, Addition) egy algoritmus, amelyet a Jenkins fejlesztett ki, hogy megfeleljen a következő követelményeknek [4] :
Az IA algoritmus bemeneti adatai: S tömb , amely 0 -tól ig terjedő elemekből áll , véletlenszerűen elosztva a tömbön, i és j iterátorok . A z kimeneti adattömb az algoritmus eredménye. Ezenkívül a tömb celláinak értékének - vagyis a szavak hosszának - nagyobbnak kell lennie, mint a bit, Jenkins munkájában K = 32 bitet vesz fel - ez a szó hossza, amelyet a az itt leírt összes algoritmust.
Az IBAA (Indirection, Barrelshift, Accumulate and Add) egy Jenkins által az IA-n alapuló algoritmus. A szerző úgy véli, hogy az IBAA a következő előnyökkel rendelkezik az IA számára már elérhető előnyök mellett [5] :
Az RC4-től és az IA-tól eltérően az IBAA a bitadatok ciklikus balra tolódásán alapul . Az IBAA megvalósítás ugyanazt a változókészletet használja, mint az IA, azzal az egyetlen különbséggel, hogy az a és b akkumulátorok hozzáadódnak , valamint a barrelshift függvény , amely a fent említett ciklikus eltolást hajtja végre.
barrel(j) – ciklikusan eltolja a 32 bites tömb összes bitjét 19 bittel balra. Megadható a képlettel is , ahol
- bitenkénti XOR
A >> művelet itt jobbra való aritmetikai eltolást jelent .
Az ISAAC (Indirection, Shift, Accumulate, Add and Count) egy pszeudo-véletlenszám-algoritmus, melynek elve nehezebben megjegyezhető, mint az IA és az IBAA elve, de számos előnye van velük szemben [6] . Az ISAAC tervezésekor a következő követelménylistát mutatták be neki:
A legtöbb pszeudo-véletlen számgenerátorral ellentétben, amelyek adatfolyam titkosításokon alapulnak , az ISAAC-ot lineáris visszacsatolású eltolási regiszterek használata nélkül tervezték.
A 32 bites érték eléréséhez szükséges gépi utasítások átlagos száma 18,75. Az ISAAC 64 bites verziója (ISAAC-64) 19 utasítást igényel egy 64 bites érték eléréséhez.
Az előző algoritmusokhoz hasonlóan az ISAAC-nak is van egy S tömbje , amely meghatározza a rendszer belső állapotát, amely szintén a tömbben 0 -tól K bites hosszúságig véletlenszerűen elhelyezkedő elemekből, egy i iterátorból és három a , b és c változóból áll. , amely az előző generátorállapotokért felelős, a z kimeneti adattömb azonos hosszúságú S -vel . Azonban itt ezeken a változókon kívül olyan változókat is bevezetünk , amelyek meghatározzák a függvény mindkét iterátortól függő értékét:
.
Jenkins cikkében azt javasolja .
A generátor működési sémája tetszőleges lépésben n = 8, K = 32 esetén a következő:
c = c + 1; b = b + c; i = 0; míg én <255 x = S[i]; a = f(a, i) + S[i + 128 mod 256]; S[i] = a + b + S[x>>2 mod 256]; z[i] = x + S[S[i]>>10 mod 256]; b = z[i]; i++;Személyes honlapján az ISAAC szerzője versenyt hirdetett a generátor feltörésére - az első, aki meg tudja adni a magként használt számot ( angol seed) , hogy létrehozza a generátor által kiadott első 2560 értéket, 1000 dollárt kap. díjat a Jenkinstől. Ezzel a feladattal azonban eddig senki sem tudott megbirkózni. Az ISAAC-ot azonban számos kriptoanalitikus is figyelembe vette.
2001-ben megjelent egy cikk [7] , amelyben Marina Pudovkina egy egyszerű szövegeken alapuló támadást írt le , amellyel a generátor kezdeti állapotát a kimeneti adatok egy kis szegmenséből megtalálhatja, és pontos becslést adott a egy ilyen támadás összetettsége. A cikkben leírt algoritmus segítségével Pudovkinának sikerült -ra csökkentenie a hackelés , míg a kimerítő keresés összetettségét [8] . Számításai szerint a -ra a kimerítő kereséssel történő hackelés bonyolultsága , míg a Pudovkina algoritmus használatával ez a szám -ra csökkenthető . Ez a bonyolultság azonban még mindig túl nagy ahhoz, hogy az ISAAC-ot sebezhető álvéletlenszám-generátornak nevezzük – foglalja össze cikkében a kriptoanalitikus.
2006-os cikkében [9] Omasson négy "gyenge" kezdeti állapotot ír le , amelyek keresztezhetik egymást. Gyenge állapotok azok az állapotok, amelyeknek egyes elemei véletlenszerűek, és a többi elem azonos értékkel egyenlő. Ha a kezdeti állapot, akkor a következő összefüggéssel definiálható: , akkor a következőképpen van definiálva , a halmaz definíciója: , míg a következőképpen van megadva: . A szerző az ISAAC algoritmust a fent megadott értékekkel (azaz n = 8, K = 32) vette figyelembe, és kiszámította a gyenge állapotok számát az egyes halmazokhoz. Ez a szám az állapotok, a for - states, a for - értékek voltak , de a részhalmaza . Az ilyen állapotok jelenléte még nem jelenti azt, hogy az ISAAC könnyen feltörhető, de ezek az algoritmus potenciális gyengeségei, ezért Omasson az ISAAC módosított változatát javasolta - ISAAC + [10] .
ISAAC+A bemenet valamilyen lépésnél ugyanaz, mint az ISAAC-ban, az a , b és c számok, az S tömb , amely 256 32 bites szóból áll, a kimenet egy S -vel azonos méretű z tömb . A függvényleírásban a >> és << logikai biteltolások helyett ciklikus >>> és <<<, azaz a függvény kerül felhasználásra.
Az S[i] és z[i] iniciálási módja is megváltozott az egyes lépésekben – mindkét esetben bitenkénti XOR-t használunk. Vagyis ahelyett
S[i] = a + b + S[x>>2 mod 256]; z[i] = x + S[S[i]>>10 mod 256];Az ISAAC+ a következőket használja:
S[i] = a ⊕ b + S[x>>>2 mod 256]; z[i] = x + a ⊕ S[S[i]>>>10 mod 256]; Paul-Pranil támadása. KritikaUgyanebben a 2006-ban Paul és Praenil publikált egy cikket [11] , amelyben egy megkülönböztető támadást tanulmányoztak néhány streaming RC4-szerű generátor, köztük az IA és az ISAAC ellen . Munkájukban megmutatják, hogy az ISAAC feltörésének bonyolultsága csak [12] . Omasson nem hagyta figyelmen kívül ezt a támadást [13] , és rámutatott az algoritmus Paul és Prenil hibás elindítására, ami miatt lehetővé vált a feltörés bonyolultságának csökkentése.
Sok ISAAC-megvalósítás elég gyors és megbízható ahhoz, hogy ez a pszeudo-véletlenszám-generátor meglehetősen általánossá vált. Az ISAAC-ot például a Unix segédprogramban (Unix) [14] használják az átírt adatok titkosításához. Az ISAAC-alapú véletlenszám-generátort az egyik legelterjedtebb Java matematikai könyvtárban, az Apache Commons Math -ban [15] valósítják meg .