scrypt | |
---|---|
Először megjelent | 2009. május |
A scrypt (olvassa el az es-crypt [1] ) egy adaptív, jelszó alapú kriptográfiai kulcs-levezető funkció , amelyet a FreeBSD biztonsági tisztje, Colin Percival hozott létre a Tarsnap biztonsági mentési rendszerhez . A funkciót úgy tervezték meg, hogy bonyolítsa az FPGA -t használó brute-force támadást . Kiszámítása jelentős mennyiségű , véletlen hozzáférésű memóriát igényel . A titkosítási algoritmust 2012. szeptember 17-én tette közzé az IETF Internet Draft formájában , a tervek szerint az RFC -be is beépítik [2] . Használják például a Litecoin kriptovalutában végzett munka igazolására [3] .
A jelszó alapú kulcs-levezetési függvényeket ( PBKDF ) általában úgy tervezték, hogy viszonylag hosszú számítási időt igényeljenek (nagyságrendileg több száz ezredmásodperc). Jogi felhasználó általi használat esetén egy ilyen függvényt egyszer kell kiszámítani (például hitelesítés során), és ez az idő elfogadható. A brute-force támadásnál azonban a támadónak több milliárd függvényszámítást kell végrehajtania, és a számítási összetettség miatt a támadás lassabb és drágább.
A korai PBKDF-ek (pl . az RSA Laboratories által kifejlesztett PBKDF2 ) azonban viszonylag gyorsan kiszámíthatók, és speciális hardveren ( FPGA vagy ASIC ) hatékonyan implementálhatók. Ez a megvalósítás lehetővé teszi nagyszabású párhuzamos brute force támadások indítását, például több száz függvénypéldány felhasználásával minden FPGA chipben.
A scrypt funkciót úgy tervezték, hogy a számításhoz szükséges erőforrások mennyiségének növelésével bonyolultabbá tegye a hardver megvalósítását. Ez az algoritmus más PBKDF-ekhez képest jelentős mennyiségű RAM-ot (random access memory) használ. A scrypt-ben lévő memória az algoritmus elején generált pszeudo-véletlen bitsorozatok nagy vektorának tárolására szolgál [4] . Miután létrehoztunk egy vektort, elemeit pszeudo-véletlen sorrendben lekérdezzük, és egymással kombinálva kulcsot kapunk. Mivel a vektor generálására szolgáló algoritmus ismert, lehetséges a scrypt megvalósítása, amely nem igényel memóriát, de az egyes elemeket a hozzáférés időpontjában számítja ki. Egy elem kiszámítása azonban viszonylag bonyolult, és a titkosítási funkció során minden elemet sokszor ki kell olvasni. A scrypt olyan egyensúlyban van a memória és az idő között , hogy a nem memóriás megvalósítások túl lassúak.
scrypt (P, S, N, r, p, dkLen) = MFcrypt HMAC SHA256,SMix r (P, S, N, p, dkLen)
ahol N, r, p a függvényszámítás bonyolultságát meghatározó paraméterek.
Az MFcrypt definíciója a következő: DK = MFcrypt PRF,MF (P, S, N, p, dkLen)
ahol
Bemeneti paraméterek scrypt és MFcrypt:
Az MFcrypt függvény a következő algoritmus szerint működik:
A memóriafelhasználást 128*r*N bájtra becsülik [5] . Az olvasások és írások számának ehhez a memóriához viszonyított arányát 100%-ra és 63%-ra becsülik [6] .
Javasolt titkosítási paraméterek: N = 16384, r = 8, p = 1 (memóriafogyasztás - körülbelül 16 MB) [5] [6] .
Egy általános célú processzoron végzett egyetlen titkosítási művelet számítási sebessége körülbelül 100 ezredmásodperc, ha 32 MB memória használatára van beállítva. Ha 1 ezredmásodperces időtartamra van beállítva, túl kevés memória kerül felhasználásra, és az algoritmus gyengébb lesz, mint a bcrypt algoritmus , amely hasonló sebességre van beállítva [7] .
A Litecoin kriptovaluta a következő titkosítási paramétereket használja: N = 1024, r = 1, p = 1, a bemeneti paraméter és a só mérete 80 bájt, a DK mérete 256 bit (32 bájt) [8] . A RAM-fogyasztás körülbelül 128 KB. Az ilyen titkosítás kiszámítása a videokártyákon körülbelül 10-szer gyorsabb, mint az általános célú processzorokon [6] , ami a nem kellően erős paraméterek megválasztását jelzi [7] .
Megvalósítások:
Hash függvények | |
---|---|
Általános rendeltetésű | |
Kriptográfia | |
Kulcsgenerálási funkciók | |
Csekkszám ( összehasonlítás ) | |
Hashes |
|