ISAAC

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt hozzászólók, és jelentősen eltérhet a 2018. szeptember 18-án felülvizsgált verziótól ; az ellenőrzések 2 szerkesztést igényelnek .

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.

Létrehozási előzmények

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 ISAAC elődei

RC4

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.

IA

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.

IBAA

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 .

ISAAC

Leírás

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.

Műveleti algoritmus

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++;

Cryptanalysis by ISAAC

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.

Pudovkina támadása

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.

Jean-Philippe Aumasson elemzése

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. Kritika

Ugyanebben 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.

Alkalmazás

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 .

Jegyzetek

  1. Robert Jenkins rövid önéletrajza . burtleburtle.net. Letöltve: 2016. november 25. Az eredetiből archiválva : 2016. augusztus 9..
  2. Schneier B., 2002 , p. 236.
  3. Paul G., Sabemoy M., 2001 , p. 16-19.
  4. Jenkins R.J., 1996 , p. 41, 42-43.
  5. Jenkins R.J., 1996 , p. 41, 43-45.
  6. Jenkins R.J., 1996 , p. 41, 46-49.
  7. Pudovkina M.A., 2001 .
  8. Pudovkina M.A., 2001 , p. 9.
  9. Omasson J.F., 2006 .
  10. Omasson J.F., 2006 , p. 5.
  11. Paul S., Preneel B., 2006 .
  12. Paul S., Preneel B., 2006 , p. 9-10.
  13. Omasson J.F., 2006 , p. 6.
  14. GNU coreutils git . Letöltve: 2016. december 3. Az eredetiből archiválva : 2019. szeptember 21..
  15. Apache Common Math docs . Letöltve: 2016. december 3. Az eredetiből archiválva : 2017. április 22..

Irodalom

Linkek