Argon 2 |
---|
Argon2 är en nyckelhärledningsfunktion utvecklad av Alex Biryukov , Daniel Dinu och Dmitry Khovratovich vid universitetet i Luxemburg 2015 [1] .
Detta är en modern enkel algoritm som syftar till hög minnesfyllnadshastighet och effektiv användning av flera beräkningsenheter [2] . Algoritmen släpps under en Creative Commons-licens .
2013 tillkännagavs Password Hashing Competition för att skapa en ny lösenordshashningsfunktion. Kraven för den nya algoritmen var mängden minne som användes, antalet passeringar genom minnesblock och motståndet mot kryptoanalys.
2015 utsågs Argon2 till vinnare av tävlingen [1] . Sedan dess har algoritmen genomgått 4 stora förändringar. Några av beskrivningarna av algoritmer för att generera vissa block och stavfel har korrigerats, rekommenderade parametrar har lagts till [1] [3] .
Argon2 använder grundläggande och avancerade parametrar för hash:
Huvudsakliga:
Ytterligare:
Det finns två versioner av algoritmen:
Argon2 fungerar enligt följande princip:
, , var
— indexeringsfunktion , — minnesmatris, — komprimeringsfunktion, — meddelande(lösenord), — Blake2b hash-funktion .
Indexeringsfunktionerna beror på versionen av Argon2-algoritmen:
Vid sekventiell drift tillämpas komprimeringsfunktionen en gång. För Argon2d-versionen, i det -e steget, matas blocket med indexet som bestämts av föregående block till funktionsingången . För Argon2i-versionen tas värdet av slumptalsgeneratorn ( i räknarläge).
I fallet med ett parallellt läge (algoritmen är parallelliserad till trådar ) fördelas data över blocken i matrisen , där de första blocken är resultatet av hashning av indata, och de nästa ställs in av komprimeringsfunktionen för de föregående blocken och referensblocket :
, där är antalet minnesblock med en storlek på 1024 byte, är en hashfunktion som tar en 32-bitars representation av ingångsparametrar som indata, vars utdata är ett 64-bitars värde, är en hashfunktion av variabel längd från , är mängden minne, är antalet iterationer.
Så småningom:
Därefter bestäms indexet för linjen där blocket kommer ifrån. När tas värdet som det aktuella radnumret . Sedan bestäms en uppsättning index enligt 2 regler:
Som ett resultat beräknas blocknumret från , som tas som referens:
Blake2b är en 64-bitarsversion av BLAKE- funktionen , så den är byggd så här:
I stort bygger funktionens utdatavärde på de första 32 bitarna av blocken - och det sista blocket :
Baserat på Blake2b-kompressionsfunktionen. Den tar emot två 8192-bitars block som indata och producerar ett 1024-bitars block. Först läggs två block till ( ), sedan bearbetas matrisen rad för rad ( ), sedan bearbetas den resulterande matrisen kolumn för kolumn ( ), och utmatningen är [6] .
Kollisionsskydd : Själva Blake2b-funktionen anses vara kryptografiskt säker. Dessutom, med hänvisning till indexeringsreglerna, bevisade författarna till algoritmen frånvaron av kollisioner inom datablock och den låga sannolikheten för att de skulle inträffa när komprimeringsfunktionen användes.
Attack för att hitta förbilden : låt angriparen plocka uppså att, för att fortsätta denna attack, han måste plocka upp förbilden:, vilket är omöjligt. Samma resonemang är lämpligt för attacken att hitta den andra förbilden.
Tajmingsattacker: Om användaren behöver anpassa sig till en timingattack bör Argon2i-versionen användas eftersom den använder oberoende minne [7] .
Dan Bonet , Henry Corrigan-Gibbs och Stuart Schechter visade Argon2i version 1.2 sårbarheten i sitt arbete. För single-pass versionen minskade deras attack minnesförbrukningen med en faktor 4 utan att sakta ner exekveringen. För multipassversionen - 2,72 gånger. Senare, i version 1.3, ersattes överskrivningsoperationen av XOR [8] .
Joel Alwen och Jeremiah Blocki bevisade i sitt arbete att deras AB16-attackalgoritm är effektiv inte bara för Argon2i-A (från den första versionen av specifikationen), utan även för Argon2i-B (från den senaste versionen 1.3). De visade att attacken av Argon2 med 1 GB RAM minskar beräkningstiden med hälften. För effektivt skydd måste fler än 10 pass anges. Men med det rekommenderade tillvägagångssättet för att välja algoritmparametrar kan i praktiken ofta bara 1 pass väljas. Utvecklarna av Argon2 hävdar att genom att applicera AB16-attacken på Argon2i-B vid , reduceras tiden med högst 2 gånger upp till 32 GB minne och rekommenderar att du använder antalet pass som överstiger den binära logaritmen för storleken[ förtydliga ] använt minne [9] .
Denna attack är en av de mest effektiva för Argon2d. Det minskar bearbetningstiden med 1,33 gånger. För Argon2i vid , är koefficienten 3 [10] .
Huvudvillkoret för den presenterade attacken är angriparens åtkomst till målmaskinens interna minne, antingen efter att hashing-schemat har avslutats, eller vid någon tidpunkt när själva lösenordet fortfarande finns i minnet. Tack vare omskrivningen av information med funktionen , är Argon2i och Argon2d resistenta mot dessa attacker [11] .
Argon2 är optimerad för x86 - arkitektur och kan implementeras på Linux , OS X , Windows .
Argon2d är avsedd för system där en angripare inte regelbundet kommer åt systemminnet eller processorn. Till exempel för backend-servrar och kryptominerare . När du använder en kärna på en 2 GHz CPU och 250 MB RAM med Argon2d (p=2), tar kryptominering 0,1 s, och när du använder 4 kärnor och 4 GB minne (p=8) tar autentiseringen på backend -servern 0, 5 s .
Argon2i är mer lämplig för frontend-servrar och hårddiskkryptering . Nyckelgenerering för kryptering på en 2 GHz CPU med 2 kärnor och 6 GB RAM med Argon2i (p=4) tar 3 s, medan autentisering på frontendservern använder 2 kärnor och 1 GB minne med Argon2i (p=4) , tar 0,5 s [12] .
Hash-funktioner | |
---|---|
generell mening | |
Kryptografisk | |
Nyckelgenereringsfunktioner | |
Kontrollnummer ( jämförelse ) | |
Hashes |
|