scrypt (tsz. scrypts)
Bevezetés
A jelszó-alapú kulcs-levezetési függvényt (jelszó-alapú KDF) általában számításigényesre tervezték, így viszonylag hosszú időt vesz igénybe (mondjuk több száz ezredmásodperces nagyságrendben). A jogos felhasználóknak csak egyszer kell végrehajtaniuk a funkciót műveletenként (pl. hitelesítés), így a szükséges idő elhanyagolható. Egy brute force támadásnak azonban valószínűleg milliárdszor kell végrehajtania a műveletet, ekkor az időigény jelentőssé és ideális esetben megfizethetetlenné válik.
A korábbi jelszó alapú KDF-ek (például az RSA Laboratories népszerű PBKDF2- je ) viszonylag alacsony erőforrásigényűek, vagyis nem igényelnek bonyolult hardvert vagy túl sok memóriát a működésükhöz. Ezért könnyen és olcsón implementálhatók hardveren (például ASIC- en vagy akár FPGA- n). Ez lehetővé teszi egy elegendő erőforrással rendelkező támadó számára, hogy nagyszabású párhuzamos támadást indítson az algoritmus több száz vagy akár több ezer implementációjának hardverben történő kiépítésével, és mindegyik a kulcstér más-más részhalmazában keressen. Ez elosztja a brute-force támadás végrehajtásához szükséges időt a rendelkezésre álló megvalósítások számával, és nagy valószínűséggel lecsökkenti azt egy ésszerű időkeretre.
A scrypt funkciót úgy tervezték, hogy megakadályozza az ilyen próbálkozásokat azáltal, hogy megnöveli az algoritmus erőforrásigényét. Pontosabban, az algoritmust úgy tervezték, hogy a többi jelszó alapú KDF-hez képest nagy mennyiségű memóriát használjon , ami sokkal drágábbá teszi a hardveres implementáció méretét és költségeit, és ezáltal korlátozza a támadó által felhasználható párhuzamosság mértékét, adott mennyiségű pénzügyi erőforrás mellett.