Argon 2 |
---|
Argon2 er en nøgleafledningsfunktion udviklet af Alex Biryukov , Daniel Dinu og Dmitry Khovratovich fra University of Luxembourg i 2015 [1] .
Dette er en moderne simpel algoritme rettet mod høj hukommelsesfyldningshastighed og effektiv brug af flere computerenheder [2] . Algoritmen er frigivet under en Creative Commons-licens .
I 2013 blev Password Hashing Competition annonceret for at skabe en ny adgangskode-hash-funktion. Kravene til den nye algoritme var mængden af brugt hukommelse, antallet af gennemløb gennem hukommelsesblokke og modstanden mod kryptoanalyse.
I 2015 blev Argon2 kåret som vinder af konkurrencen [1] . Siden dengang har algoritmen gennemgået 4 store ændringer. Nogle af beskrivelserne af algoritmer til generering af nogle blokke og tastefejl er blevet rettet, anbefalede parametre er tilføjet [1] [3] .
Argon2 bruger grundlæggende og avancerede parametre til hashing:
Hoved:
Ekstra:
Der er to versioner af algoritmen:
Argon2 fungerer efter følgende princip:
, , hvor
— indekseringsfunktion , — hukommelsesmatrix, — komprimeringsfunktion, — besked(adgangskode), — Blake2b hash-funktion .
Indekseringsfunktionerne afhænger af versionen af Argon2-algoritmen:
I tilfælde af sekventiel drift anvendes komprimeringsfunktionen én gang. For Argon2d-versionen, i det -. trin, føres blokken med indekset bestemt af den foregående blok til funktionsinputtet . For Argon2i-versionen tages værdien af den tilfældige talgenerator ( i tællertilstand).
I tilfælde af en parallel tilstand (algoritmen er paralleliseret i tråde ) fordeles dataene over blokkene i matrixen , hvor de første blokke er resultatet af hash af inputdata, og de næste er sat af komprimeringsfunktionen for de foregående blokke og referenceblokken :
, hvor er antallet af hukommelsesblokke med en størrelse på 1024 bytes, er en hashfunktion, der tager en 32-bit repræsentation af inputparametre som input, hvis output er en 64-bit værdi, er en hashfunktion af variabel længde fra , er mængden af hukommelse, er antallet af iterationer.
Til sidst:
Dernæst bestemmes indekset for den linje, hvor blokken kommer fra. Når , tages værdien som det aktuelle linjenummer . Derefter bestemmes et sæt indekser efter 2 regler:
Som følge heraf beregnes bloknummeret fra , som tages som reference:
Blake2b er en 64 bit version af BLAKE -funktionen , så den er bygget sådan her:
Generelt er outputværdien af funktionen bygget på de første 32 bit af blokkene - og den sidste blok :
Baseret på Blake2b kompressionsfunktionen. Den modtager to 8192-bit blokke som input og producerer en 1024-bit blok. Først tilføjes to blokke ( ), derefter behandles matrixen række for række ( ), derefter behandles den resulterende matrix kolonne for kolonne ( ), og outputtet er [6] .
Kollisionsbeskyttelse : Selve Blake2b-funktionen betragtes som kryptografisk sikker. Også under henvisning til indekseringsreglerne beviste forfatterne af algoritmen fraværet af kollisioner inden for datablokke og den lave sandsynlighed for deres forekomst, når de anvendte komprimeringsfunktionen.
Angreb for at finde forbilledet : lad angriberen samle opsådan, athan, for at fortsætte dette angreb, skal hente forbilledet:, hvilket er umuligt. Den samme begrundelse er egnet til angrebet med at finde det andet forbillede.
Timing angreb: Hvis brugeren skal tilpasse sig et timing angreb , så bør Argon2i-versionen bruges, da den bruger uafhængig hukommelse [7] .
Dan Bonet , Henry Corrigan-Gibbs og Stuart Schechter viste Argon2i version 1.2 sårbarheden i deres arbejde. For single-pass versionen reducerede deres angreb hukommelsesforbruget med en faktor 4 uden at bremse udførelsen. For multi-pass versionen - 2,72 gange. Senere, i version 1.3, blev overskrivningsoperationen erstattet af XOR [8] .
Joel Alwen og Jeremiah Blocki beviste i deres arbejde, at deres AB16-angrebsalgoritme ikke kun er effektiv for Argon2i-A (fra den første version af specifikationen), men også for Argon2i-B (fra den seneste version 1.3). De viste, at angreb på Argon2 med 1 GB RAM reducerer beregningstiden med det halve. For effektiv beskyttelse skal der angives mere end 10 gennemløb. Men med den anbefalede tilgang til valg af algoritmeparametre kan der i praksis ofte kun vælges 1 pas. Udviklerne af Argon2 hævder, at ved at anvende AB16-angrebet på Argon2i-B ved , reduceres tiden med ikke mere end 2 gange op til 32 GB hukommelse og anbefaler at bruge antallet af gennemløb, der overstiger den binære logaritme af størrelsen[ afklar ] brugt hukommelse [9] .
Dette angreb er et af de mest effektive for Argon2d. Det reducerer behandlingstiden med 1,33 gange. For Argon2i ved , er koefficienten 3 [10] .
Hovedbetingelsen for det præsenterede angreb er angriberens adgang til målmaskinens interne hukommelse, enten efter at hashing-skemaet er afsluttet, eller på et tidspunkt, hvor selve adgangskoden stadig er til stede i hukommelsen. Takket være omskrivningen af information ved hjælp af funktionen , er Argon2i og Argon2d modstandsdygtige over for disse angreb [11] .
Argon2 er optimeret til x86- arkitektur og kan implementeres på Linux , OS X , Windows .
Argon2d er beregnet til systemer, hvor en hacker ikke regelmæssigt får adgang til systemhukommelsen eller processoren. For eksempel til backend-servere og kryptominere . Når du bruger én kerne på en 2-GHz CPU og 250 MB RAM med Argon2d (p=2), tager kryptominering 0,1 s, og når du bruger 4 kerner og 4 GB hukommelse (p=8) , tager autentificering på backend -serveren 0, 5 s .
Argon2i er mere velegnet til frontend - servere og harddiskkryptering . Nøglegenerering til kryptering på en 2-GHz CPU ved hjælp af 2 kerner og 6 GB RAM med Argon2i (p=4) tager 3 s, mens godkendelse på frontend-serveren bruger 2 kerner og 1 GB hukommelse med Argon2i (p=4) , tager 0,5 s [12] .
Hash funktioner | |
---|---|
generelle formål | |
Kryptografisk | |
Nøglegenereringsfunktioner | |
Tjek nummer ( sammenligning ) | |
Hashes |
|