krypt | |
---|---|
Først udgivet | maj 2009 |
scrypt (læs es-crypt [1] ) er en adaptiv adgangskodebaseret kryptografisk nøgleafledningsfunktion skabt af FreeBSD sikkerhedsofficer Colin Percival til Tarsnap backup-lagersystemet . Funktionen er designet på en sådan måde, at den komplicerer brute-force-angrebet ved hjælp af FPGA . Dens beregning kræver en betydelig mængde hukommelse med tilfældig adgang . Den 17. september 2012 blev krypteringsalgoritmen udgivet af IETF i form af en Internet Draft , den er planlagt til at blive inkluderet i RFC [2] . Det bruges for eksempel som bevis på arbejde udført i Litecoin- kryptovalutaen [3] .
Adgangskodebaserede nøgleafledningsfunktioner ( PBKDF'er ) er typisk designet til at kræve relativt lange beregningstider (i størrelsesordenen hundreder af millisekunder). Når det bruges af en lovlig bruger, er det nødvendigt at beregne en sådan funktion én gang (for eksempel under godkendelse), og en sådan tid er acceptabel. Men i et brute-force-angreb skal angriberen udføre milliarder af funktionsberegninger, og dets beregningsmæssige kompleksitet gør angrebet langsommere og dyrere.
Imidlertid er tidlige PBKDF'er (f.eks. PBKDF2 udviklet af RSA Laboratories ) relativt hurtige at beregne og kan effektivt implementeres på specialiseret hardware ( FPGA eller ASIC ). Denne implementering giver dig mulighed for at starte store parallelle brute-force-angreb, for eksempel ved at bruge hundredvis af funktionsforekomster i hver FPGA-chip.
Krypteringsfunktionen blev designet til at gøre hardwareimplementeringer mere komplekse ved at øge mængden af ressourcer, der kræves til beregning. Denne algoritme bruger en betydelig mængde RAM (Random Access Memory) sammenlignet med andre PBKDF'er. Hukommelsen i scrypt bruges til at lagre en stor vektor af pseudo-tilfældige bitsekvenser genereret i begyndelsen af algoritmen [4] . Når først en vektor er blevet oprettet, forespørges dens elementer i en pseudo-tilfældig rækkefølge og kombineres med hinanden for at opnå en nøgle. Da algoritmen til at generere vektoren er kendt, er det muligt at implementere scrypt, som ikke kræver hukommelse, men beregner hvert element på adgangstidspunktet. At beregne et element er imidlertid relativt komplekst, og hvert element læses mange gange under krypteringsfunktionen. scrypt har en sådan balance mellem hukommelse og tid , at implementeringer uden hukommelse er for langsomme.
scrypt (P, S, N, r, p, dkLen) = MFcrypt HMAC SHA256,SMix r (P, S, N, p, dkLen)
hvor N, r, p er parametre, der specificerer kompleksiteten af funktionsberegningen.
MFcrypt er defineret sådan: DK = MFcrypt PRF,MF (P, S, N, p, dkLen)
hvor
Inputparametre scrypt og MFcrypt:
MFcrypt - funktionen fungerer i henhold til algoritmen:
Hukommelsesforbruget er estimeret til 128*r*N bytes [5] . Forholdet mellem antallet af læsninger og skrivninger til denne hukommelse er estimeret til 100 % og 63 % [6] .
Anbefalede krypteringsparametre: N = 16384, r = 8, p = 1 (hukommelsesforbrug - ca. 16 MB) [5] [6] .
Beregningshastigheden for en enkelt krypteringsoperation på en generel processor er omkring 100 millisekunder, når den er konfigureret til at bruge 32 MB hukommelse. Når den indstilles til en varighed på 1 millisekund, bruges der for lidt hukommelse, og algoritmen bliver svagere end bcrypt- algoritmen , som er sat til en sammenlignelig hastighed [7] .
Litecoin - krypteringsvalutaen bruger følgende krypteringsparametre: N = 1024, r = 1, p = 1, størrelsen af inputparameteren og salt er 80 bytes, størrelsen af DK er 256 bit (32 bytes) [8] . RAM-forbruget er omkring 128 KB. Beregningen af en sådan kryptering på videokort er cirka 10 gange hurtigere end på processorer til generelle formål [6] , hvilket er en indikation af valget af utilstrækkeligt stærke parametre [7] .
Implementeringer:
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|