Scrypt
| scrypt | |
|---|---|
| Poprvé zveřejněno | května 2009 |
scrypt (čti es-crypt [1] ) je adaptivní funkce odvozování kryptografického klíče založená na hesle, kterou vytvořil bezpečnostní důstojník FreeBSD Colin Percival pro systém zálohování Tarsnap . Funkce je navržena tak, aby zkomplikovala útok hrubou silou pomocí FPGA . Jeho výpočet vyžaduje značné množství paměti s náhodným přístupem . 17. září 2012 zveřejnila IETF algoritmus scrypt ve formě internetového návrhu , plánuje se jeho zařazení do RFC [2] . Používá se například jako doklad o provedené práci v kryptoměna Litecoin [3] .
Funkce odvozování klíčů založené na hesle ( PBKDF ) jsou obvykle navrženy tak, aby vyžadovaly relativně dlouhé doby výpočtu (řádově stovky milisekund). Při použití legálním uživatelem je nutné takovou funkci vypočítat jednou (například při autentizaci) a takový čas je přijatelný. Při útoku hrubou silou však útočník potřebuje provést miliardy výpočtů funkcí a jeho výpočetní složitost zpomaluje a prodražuje útok.
Avšak rané PBKDF (např . PBKDF2 vyvinuté RSA Laboratories ) jsou relativně rychlé na výpočet a mohou být efektivně implementovány na specializovaném hardwaru ( FPGA nebo ASIC ). Tato implementace umožňuje spouštět rozsáhlé paralelní útoky hrubou silou, například pomocí stovek instancí funkcí v každém čipu FPGA.
Funkce scrypt byla navržena tak, aby byla hardwarová implementace složitější zvýšením množství zdrojů požadovaných pro výpočet. Tento algoritmus využívá značné množství RAM (paměť s náhodným přístupem) ve srovnání s jinými PBKDF. Paměť v scrypt se používá k uložení velkého vektoru pseudonáhodných bitových sekvencí generovaných na začátku algoritmu [4] . Jakmile je vektor vytvořen, jsou jeho prvky dotazovány v pseudonáhodném pořadí a vzájemně kombinovány za účelem získání klíče. Protože je znám algoritmus pro generování vektoru, je možné implementovat scrypt, který nevyžaduje paměť, ale vypočítává každý prvek v okamžiku přístupu. Výpočet prvku je však poměrně složitý a každý prvek je během funkce scrypt čten mnohokrát. scrypt má takovou rovnováhu mezi pamětí a časem , že nepaměťové implementace jsou příliš pomalé.
Definice scrypt
scrypt (P, S, N, r, p, dkLen) = MFcrypt HMAC SHA256,SMix r (P, S, N, p, dkLen)
kde N, r, p jsou parametry určující složitost výpočtu funkce.
MFcrypt je definován takto: DK = MFcrypt PRF,MF (P, S, N, p, dkLen)
kde
- PRF - pseudonáhodná funkce (v scrypt - HMAC - SHA256 )
- hLen je délka výstupu PRF v bajtech
- MF (mixing function) - sekvenční funkce, která vyžaduje paměť s náhodným přístupem (mapování od do (v scrypt - SMix založený na Salsa20 / 8)
- MFLen je délka bloku zamíchaná v MF (v bajtech). MFLen=128 * r.
Vstupní parametry scrypt a MFcrypt:
- P - heslo (passphrase) - bajtový řetězec.
- S - salt (salt) - bajtový řetězec.
- N je parametr, který udává složitost (počet iterací pro MF).
- r je parametr, který určuje velikost bloku.
- p – stupeň rovnoběžnosti, celé číslo menší než (2 32 − 1)*hLen/MFLen
- dkLen je požadovaná délka výstupního klíče v bajtech, ne větší než (2 32 − 1)*hLen.
- DK - výstupní klíč
Funkce MFcrypt pracuje podle algoritmu:
- (B 0 … B p−1 ) = PBKDF2 PRF (P, S, 1, p * MFLen)
- Pro všechna i od 0 do p−1 použijte funkci MF:
- Bi = MF(B i , N)
- DK = PBKDF2 PRF (P, B0 || B1 || … || B p−1 ,1, dkLen)
Spotřeba paměti se odhaduje na 128*r*N bytů [5] . Poměr počtu čtení a zápisů do této paměti se odhaduje na 100 % a 63 % [6] .
Příklady
Doporučené parametry šifrování: N = 16384, r = 8, p = 1 (spotřeba paměti - asi 16 MB) [5] [6] .
Výpočetní rychlost pro jednu operaci scrypt na univerzálním procesoru je asi 100 milisekund, když je nakonfigurován na použití 32 MB paměti. Při nastavení na dobu trvání 1 milisekundu se používá příliš málo paměti a algoritmus se stává slabším než algoritmus bcrypt , který je nastaven na srovnatelnou rychlost [7] .
Kryptoměna Litecoin používá tyto parametry scrypt: N = 1024, r = 1, p = 1, velikost vstupního parametru a salt je 80 bajtů, velikost DK je 256 bitů (32 bajtů) [8] . Spotřeba RAM je cca 128 KB. Výpočet takového scryptu na grafických kartách je přibližně 10x rychlejší než na procesorech pro všeobecné použití [6] , což svědčí o volbě nedostatečně silných parametrů [7] .
Viz také
- kryptoměna (C)
- Crypto (Unix)
- PBKDF2
- bcrypt
- HEKS (Rienhold, 1999)
- slothKDF (Elias Yarrkov, dhbitty)
- Kompromis času a paměti
Poznámky
- ↑ Colin Percival na Twitteru: "Pro zajímavost, "scrypt" se vyslovuje "ess crypt". Jako bcrypt, až na to, že má S místo B. NENÍ to vyslovováno "script"." . Staženo 4. května 2017. Archivováno z originálu 17. února 2019.
- ↑ C. Percival, S. Josefsson. Funkce odvození klíče na základě hesla scrypt (neopr.) . - Internet Engineering Council , 2012. - 17. září.
- ↑ Litecoin-Bitcoin . Získáno 16. července 2013. Archivováno z originálu 16. června 2018.
- ↑ Archivovaná kopie (odkaz není dostupný) . Získáno 17. července 2013. Archivováno z originálu 17. prosince 2013. strana 5
- ↑ 1 2 Crypto.Scrypt
- ↑ 1 2 3 http://2012.zeronights.org/includes/docs/SolarDesigner%20-%20New%20Developments%20in%20Password%20Hashing.pdf Archivováno 28. prosince 2016 na snímku Wayback Machine se 4 „Iscryptem“ hromadné ověření uživatele"; snímek 6
- ↑ 1 2 http://distro.ibiblio.org/openwall/presentations/Password-Hashing-At-Scale/YaC2012-Password-Hashing-At-Scale.pdf Archivováno 18. října 2014 na snímku Wayback Machine 18 "GPU Attacks na moderních hashech": "šifrovat až ~1 MB (zneužití)"; snímek 19-21
- ↑ Scrypt - Litecoin Wiki (downlink) . Získáno 17. července 2013. Archivováno z originálu 16. srpna 2013.
Odkazy
- Funkce odvození klíče scrypt — Popis scrypt na webu Tarsnap
- Colin Percival, "Silnější odvozování klíče prostřednictvím sekvenčních funkcí pro paměť" // BSDCan'09, květen 2009
- Colin Percival, scrypt: Funkce odvození klíče. Děláme vše pro zmaření TLA vyzbrojených ASIC , 4. prosince 2012
Implementace: