Argon 2

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 .

Historie

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] .

Input data

Argon2 bruger grundlæggende og avancerede parametre til hashing:

Hoved:

Ekstra:

Versioner af algoritmen

Der er to versioner af algoritmen:

Beskrivelse

Argon2 fungerer efter følgende princip:

  1. Adgangskoden hash ved hjælp af Blake2b hash-funktionen .
  2. Hash-resultatet skrives til hukommelsesblokke.
  3. Hukommelsesblokke konverteres ved hjælp af komprimeringsfunktionen
  4. Som et resultat af algoritmen genereres en nøgle ( eng.  Tag ).

Udfyldning af hukommelsesblokke

, , 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:

[5]

At finde støtteblokken

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:

  1. Hvis det matcher nummeret på den aktuelle linje, tilføjes alle tidligere uoptagne blokke til indekssættet uden
  2. Hvis det ikke stemmer overens, tages der blokke fra alle linjestykker og de sidste dele.

Som følge heraf beregnes bloknummeret fra , som tages som reference:

[6]

Funktion H'

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  :

G komprimeringsfunktion

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] .

Krypteringsanalyse

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] .

Angreb

Hukommelsesoptimeringsangreb

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] .

AB16

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] .

Rangeringsafvejningsangrebet

Dette angreb er et af de mest effektive for Argon2d. Det reducerer behandlingstiden med 1,33 gange. For Argon2i ved , er koefficienten 3 [10] .

Skraldesamlerangreb

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] .

Ansøgning

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 autentificeringbackend -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] .

Noter

  1. 1 2 3 4 Password Hashing-konkurrence .
  2. Argon, 2016 , s. 293.
  3. Argon, 2016 , s. 292.
  4. Argon, 2016 , s. 294.
  5. Argon, 2016 , s. 294-295.
  6. 1 2 Argon, 2016 , s. 295.
  7. Argon, 2016 , s. 296-297.
  8. Henry Corrigan-Gibbs, 2016 .
  9. Alwen, Blocki, 2016 .
  10. Argon, 2016 , s. 297.
  11. Oversigt, 2015 .
  12. Argon, 2016 , s. 300.

Litteratur

Links