Lyra2

Lyra2
Létrehozva 2014
közzétett 2014
Típusú hash függvény

A Lyra2  egy kriptográfiai hash függvény , amely kulcslevezetési függvényként is használható . A Lyra2-t Marcos Simplicio Jr., Leonardo C. Almeida, Everton R. Andrade, Paulo C. F. Santos és Paulo C. L. M. Barreto készítette a São Paulo-i Egyetem Politechnikai Iskolájából [1] . A Lyra2 a PBKDF2 , a bcrypt és a scrypt mellett az egyik széles körben használt hash algoritmus . A Lyra2 megjelenése előtt azonban a scrypt volt az egyetlen elérhető megoldás, amely figyelembe vette a memória és a feldolgozási idő költségeit. A Lyra2 olyan fejlesztéseket vezetett be, mint például: a memória és a feldolgozási paraméterek szétválasztása, amely nagyobb rugalmasságot biztosít a felhasználók számára; egy alapszivacs funkció használata a scryptben használt kettő helyett; nagyobb ellenállás az idő-memória kompromisszumot alkalmazó támadásokkal szemben ; és jobb teljesítmény, ami nagyobb memóriahasználatot tesz lehetővé hasonló feldolgozási idő mellett [2] .

A Lyra2 ingyenesen elérhető , és két bővítménye van: [3]

Támadásállóság

Az algoritmus fő előnyei:

  1. A memória és az időköltség elkülöníthető, ami lehetővé teszi az erőforrások intelligensebb felhasználását.
  2. Gyors a szivacs funkció használatának köszönhetően, csökkentett körszámmal az algoritmusban.
  3. Bármilyen kívánt hosszúságú kimenetet biztosít, így úgy működhet, mint egy kulcs-levezetési függvény .

A Lyra2 konfigurálható úgy, hogy védjen a támadó platformokkal szemben, és optimalizálja a teljesítményt a felhasználói platformon:

A támadás számítási költsége aszimptotikusan a felhasználói platform memóriasorrendjének használata és használata között van. Más algoritmusok nem rosszabbak ezeknél a mutatóknál, de a gyakorlatban alacsonyabb értékkel rendelkeznek, mint a Lyra2-é. [4] [5] [6] [7] [8]

Szivacs funkció

A kriptográfiai szivacsfüggvények olyan hash függvények, amelyek képesek tetszőleges hosszúságú bemeneti és kimeneti adatok iteratív feldolgozására. Kialakításuk egy fix hosszúságú permutációt foglal magában, amely a bitméretek sorozata által képviselt belső állapoton működik , amely egy hosszúságú bitrátából és egy hosszúságú kapacitásból áll , valamint b bites blokkokra vágott bemeneti adatokkal kombinálva . A szivacsfüggvény tartalmaz egy abszorpciós műveletet, amely iteratív módon vonatkozik a belső állapotra, miután a bitsebességű műveletet alkalmazta az egyes b bites bemeneti bitekre. Vegye figyelembe, hogy az iterációk számát ebben a műveletben a körök száma paraméter adja meg . A squeeze művelet pedig egy alkalmazás a teljes belső állapotra, majd egy bitráta kiadása a kimenetre, ezt a műveletet addig hajtják végre, amíg a felhasználó által megadott számú bitet meg nem adják kimenetként. Létezik egy duplex művelet is, amely szekvenciálisan alkalmazott elnyelési és összenyomási műveletpárok sorozata.

Algoritmus paraméterei

A Lyra2 lehetőséget biztosít az algoritmus konfigurálására a felhasználó igényeinek leginkább megfelelő módon. Ezt az algoritmus különféle paraméterei biztosítják, mint például: [3]

Algoritmus eszköz

Mint minden más kriptográfiai hash függvény, a Lyra2 egy sót és egy jelszót vesz be bemenetként, és egy pszeudo-véletlen sorozatot állít elő kimenetként . Belsőleg a memóriája egy kétdimenziós tömbbe szerveződik, amelynek celláit iteratív módon olvassák és írják, egyszerűen memóriamátrixnak nevezik [2] . Azt is érdemes megjegyezni, hogy a mátrixcella látogatásainak számát az újraszámításhoz a felhasználó határozza meg, ami lehetővé teszi az algoritmus beállítását a felhasználó számítástechnikai rendszerének képességei szerint. A mátrix inicializálása és látogatása a szivacs fő funkciójának elnyelési, összenyomási és duplex működési állapotainak kombinációját használja, biztosítva a teljes folyamat konzisztenciáját. Ezenkívül a felhasználók meghatározhatják a mátrix méretét és az inicializálás utáni újralátogatások számát a celláiban, ami lehetővé teszi a Lyra2 erőforrások használatának finomhangolását. A Lyra2 négy egymást követő fázisból áll: bootstrapping, beállítás, vándorlás és feltöltés.

Bootstrapping

Ebben a szakaszban inicializálódik a szivacs fő funkciójának belső állapota. A szivacs fő funkciójának bemenete jelszót, sót és egyéb paramétereket kap. A paramétereket általában a só hossza, a jelszó, az idő és a memóriaköltség paraméterek jelentik, vagyis a felhasználó által beállított paraméterek, másokat is hozzáadhatunk. Ezen a bemeneten egy elnyelési műveletet hajtanak végre, és inicializálják a szivacs funkció belső állapotát.

Beállít

A beállítási szakaszban a memóriamátrix inicializálódik. A mátrix cellái bithosszúságúak, vagyis a szivacs fő funkciójának bitrátájának nagysága. A teljesítmény javítása érdekében, ha potenciálisan nagy memóriamátrixszal dolgozik, a telepítő a szivacsos duplex műveletet használja a memóriamátrix oszlopain, kevesebb körrel. Ez a megközelítés felgyorsítja a szivacsműveleteket, és így több memóriapozíció lefedését teszi lehetővé egy adott intervallumon belül, adott időkorlátok mellett, mint egy teljes f ciklus esetén. Ez a fázis akkor ér véget, amikor a memóriamátrix összes oszlopát meglátogattuk.

Vándorlás

A vándorlási fázis a memóriamátrix cellák pszeudo-véletlenszerű újraírásából áll, az oszlopokon végzett duplex művelettel, ugyanúgy, mint a beállítási fázisban. Az iterációk számát ebben a szakaszban az időköltség paraméter korlátozza.

becsomagolás

Ebben a szakaszban a maximális körszámmal alkalmazzuk az elnyelési műveletet, majd a szorítási műveletet, és a kimeneten egy adott méretű pszeudo-véletlenszerű sorozatot kapunk.

Jelölés A ⊕ szimbólumok bitenkénti exkluzív vagy (XOR), míg a ⊞ szimbólumok gépszavak hozzáadását jelöli. Összefűzés az a és b bájttömbök között van írva egy || b. Az x bájttömb esetében az |x| jelölés és len(x) jelentése rendre, x hossza bitekben és bájtokban (vagyis a szükséges bitek/bájtok minimális száma ábrázolások x). Feltételezzük, hogy a számítógépnek kis végpontja van bájt sorrendben, az algoritmus ezen leírásában az lsw(x) adja vissza a legkevesebbet az x szóval szignifikáns, és a rot^y(x) x-nek egy w-bites körkörös eltolódása balra, y-szer ismétlődő. Param: H # Szivacs funkció maximális körszámmal p_max Param: p # Körök száma a beállítási és vándorlási fázisokhoz, p < p_max Param: Hp # Szivacs funkció csökkentett körszámmal p Param: w # A ciklikus eltoláshoz használt bitek száma Bemenet: pwd # Jelszó Bemenet: só ​​# Só Bemenet: T # A költséget az idő függvényében meghatározó paraméter Bemenet: R, C # A memória költségét meghatározó paraméterek Bemenet: k # A kimeneti sorozat hossza bitben Kimenet: K # K bit hosszúságú jelszófüggő hash Bootstrapping Params <- len(k) || len(pwd) || len(só) || T || R || C # A paramétereket bájtok sorozataként ábrázolja H.absorb(pad(pwd || salt || params)) # Oszd fel a sorozatot b bit hosszúságú részsorozatokra Előző0 <- 2 ; sor1 <- 1 ; előző1<-0 Beállít A (<-0 oszloptól C-1-ig) esetén végezze el az {M[0][C-1-col] <- Hp.squeeze(b)} végét # Inicializálja M[0] A (<-0 oszloptól C-1-ig) esetén végezze el az {M[1][C-1-col] <- M[0][col] ⊕ Hp.duplex(M[0][col], b)} végét # Inicializálás M[1] A (<-0 oszloptól C-1-ig) esetén végezze el az {M[2][C-1-col] <- M[1][col] ⊕ Hp.duplex(M[1][col], b)} végét # inicializáláshoz M[2] A (0 sor <- 3 - R-1) esetén # Inicializálja a fennmaradó sorokat A (<- 0-tól C-1-ig terjedő oszlop) esetén # Iteráljon oszlopokon, az M[sor0] itt inicializálódik, és az M[sor1] felülíródik rand <- Hp.duplex(M[sor1][szop.] ⊞ M[előző0][oszlop] ⊞ M[előző1][solat], b) M[sor0][C-1-col] <- M[prev0][col] ⊕ rand M[sor1][C-1-col] <- M[sor1][col] ⊕ rot(rand) # rot(): forgatás w bittel véget ért előző0 <- sor0 ; prev1 <- row1 # Határozza meg a következő iterációban használandó sorokat getNext(row1) # Frissítse az 1. sort a következő iterációhoz Vége a Vándorlás A (wCount <- 0 és R*T - 1) esetén # 2*R*T sor ál-véletlenszerűen felül lesz írva sor0 <- lsw(rand) mod R ; sor1 <- lsw(rot(rand)) mod R # A sorok véletlenszerűen vannak kiválasztva for (<-0 oszloptól C-1-ig) do col0 <- lsw(rot^2(rand)) mod C ; col1 <- lsw(rot^3(rand)) mod C # Oszlopok pszeudovéletlen kiválasztása rand <- Hp.duplex(M[sor0][szop.] ⊞ M[sor1][solat] ⊞ M[előző0][szop.] ⊞ M[előző1][solat], b) M[sor0][col] <- M[sor0][col] ⊕ rand # Álvéletlen cella felülírása M[sor1][col] <- M[sor1][col] ⊕ rot(rand) # rot(): forgatás w bittel véget ért előző0 <- sor0 ; prev1 <- row1 # Határozza meg a következő iterációban használandó sorokat Vége a becsomagolás h.absorb(M[sor0][0]) K <- H.squeeze(k) Vissza K

Teljesítmény

A Lyra2 lehetővé teszi, hogy kevesebb, mint 1 másodperc alatt végezzen számításokat 400 MB memória használatával a paraméterek és a [2] értékeivel .

A teszteket Intel Xeon E5-2430 processzoron (2,20 GHz, 12 magos, 64 bites rendszer) 48 GB DRAM -mal, Ubuntu 14.04 LTS 64 bites operációs rendszeren végeztük, az algoritmus kódját a gcc 4.9 segítségével állítottuk össze. 2 [2] .

Jegyzetek

  1. Cryptology ePrint Archívum: Jelentés 2015/136 . eprint.iacr.org . Letöltve: 2016. március 22. Az eredetiből archiválva : 2016. március 9..
  2. 1 2 3 4 Andrade, E.; Simplicio Jr, M.; Barreto, P.; Santos, P. Lyra2: hatékony jelszókivonat magas biztonsággal az idő-memória kompromisszumokkal szemben  // IEEE  Transactions on Computers : folyóirat. - 2016. - január 1. ( PP köt. , 99. sz.). - P. 3096-3108 . — ISSN 0018-9340 . - doi : 10.1109/TC.2016.2516011 .
  3. 1 2 Simplicio Jr, Marcos A.; Almeida, Leonardo C.; Andrade, Everton R.; Santos, Paulo C.; Barreto, Paulo SLM A Lyra2 referencia útmutató . PHC . A Jelszó-kivonatoló verseny. Letöltve: 2019. december 6. Az eredetiből archiválva : 2020. november 30.
  4. Gmane -- Egy másik PHC jelölt mechanikai tesztek . article.gmane.org . Letöltve: 2016. március 22.  (nem elérhető link)
  5. Gmane -- Egy értékelés naponta Lyra2 . article.gmane.org . Letöltve: 2016. március 22.  (nem elérhető link)
  6. Gmane -- Lyra2 első értékelés . article.gmane.org . Letöltve: 2016. március 22.  (nem elérhető link)
  7. Gmane - Memória teljesítmény és ASIC támadások . article.gmane.org . Letöltve: 2016. március 22.  (nem elérhető link)
  8. Gmane – Az argon gyors elemzése . article.gmane.org . Letöltve: 2016. március 22.  (nem elérhető link)

Linkek