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]
Az algoritmus fő előnyei:
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]
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.
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]
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 KA 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] .
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|