Argon2

Argon2

Argon2  este o funcție de derivare cheie dezvoltată de Alex Biryukov , Daniel  Dinu și Dmitry Khovratovich de la Universitatea din Luxemburg în 2015 [1] .  

Acesta este un algoritm modern simplu care vizează o rată mare de umplere a memoriei și utilizarea eficientă a mai multor unități de calcul [2] . Algoritmul este lansat sub o licență Creative Commons .

Istorie

În 2013, a fost anunțată competiția de hashing parole pentru a crea o nouă funcție de hashing a parolei. Cerințele pentru noul algoritm au fost cantitatea de memorie utilizată, numărul de treceri prin blocuri de memorie și rezistența la criptoanaliza.

În 2015, Argon2 a fost declarat câștigătorul competiției [1] . De atunci, algoritmul a suferit 4 modificări majore. Unele dintre descrierile algoritmilor pentru generarea unor blocuri și greșeli de scriere au fost corectate, au fost adăugați parametri recomandați [1] [3] .

Date de intrare

Argon2 folosește parametri de bază și avansați pentru hashing:

Principal:

Adiţional:

Versiuni ale algoritmului

Există două versiuni ale algoritmului:

Descriere

Argon2 funcționează după următorul principiu:

  1. Parola este indexată folosind funcția hash Blake2b .
  2. Rezultatul hash este scris în blocurile de memorie.
  3. Blocurile de memorie sunt convertite folosind funcția de compresie
  4. Ca rezultat al algoritmului, este generată o cheie ( ing.  Tag ).

Umplerea blocurilor de memorie

, , unde

 — funcție de indexare ,  — matrice de memorie,  — funcție de compresie,  — mesaj (parolă), — funcție  hash Blake2b .

Funcțiile de indexare depind de versiunea algoritmului Argon2:

In cazul functionarii secventiale, functia de compresie se aplica o singura data. Pentru versiunea Argon2d, la pasul -, blocul cu indicele determinat de blocul anterior este alimentat la intrarea funcției . Pentru versiunea Argon2i, valoarea generatorului de numere aleatoare este luată ( în modul contor).

În cazul unui mod paralel (algoritmul este paralelizat în fire ), datele sunt distribuite peste blocurile matricei , unde primele blocuri sunt rezultatul hashingului datelor de intrare, iar următoarele sunt setate de funcția de compresie. pentru blocurile anterioare și blocul de referință :

, unde  este numărul de blocuri de memorie cu o dimensiune de 1024 de octeți,  este o funcție hash care ia ca intrare o reprezentare pe 32 de biți a parametrilor de intrare, a cărei ieșire este o valoare de 64 de biți,  este o funcție hash de lungime variabilă de la ,  este cantitatea de memorie,  este numărul de iterații.

În cele din urmă:

[5]

Găsirea blocului suport

În continuare, se determină indicele liniei de unde provine blocul. Când , valoarea este luată ca număr de linie curent . Apoi se determină un set de indici după 2 reguli:

  1. Dacă se potrivește cu numărul liniei curente, atunci toate blocurile neînregistrate anterior sunt adăugate la setul de index fără
  2. Dacă nu se potrivește, blocurile sunt luate din toate segmentele de linie și din ultimele părți.

Ca rezultat, numărul blocului este calculat din , care este luat ca referință:

[6]

Funcția H'

Blake2b este o versiune pe 64 de biți a funcției BLAKE , deci este construită astfel:

În general , valoarea de ieșire a funcției este construită pe primii 32 de biți ai blocurilor - și ultimul bloc  :

Funcția de compresie G

Bazat pe caracteristica de compresie Blake2b. Primește două blocuri de 8192 de biți ca intrare și produce un bloc de 1024 de biți. Mai întâi se adaugă două blocuri ( ), apoi matricea este procesată rând cu rând ( ), apoi matricea rezultată este procesată coloană cu coloană ( ), iar rezultatul este [6] .

Criptanaliză

Protecție la coliziune : funcția Blake2b în sine este considerată sigură din punct de vedere criptografic. De asemenea, referindu-se la regulile de indexare, autorii algoritmului au demonstrat absența coliziunilor în cadrul blocurilor de date și probabilitatea scăzută de apariție a acestora la aplicarea funcției de compresie.

Atacul de găsire a preimaginei : lăsați atacatorul să ridiceastfel încât, apoi pentru a continua acest atac, trebuie să ridice preimaginea:, ceea ce este imposibil. Același raționament este potrivit pentru atacul găsirii celei de-a doua preimagine.

Atacuri de sincronizare: Dacă utilizatorul trebuie să se adapteze la un atac de sincronizare , atunci versiunea Argon2i ar trebui să fie utilizată deoarece folosește memorie independentă [7] .

Atacurile

Atacul de optimizare a memoriei

Dan Bonet , Henry Corrigan-Gibbs și Stuart Schechter au arătat vulnerabilitatea Argon2i versiunea 1.2 în munca lor. Pentru versiunea cu o singură trecere, atacul lor a redus consumul de memorie cu un factor de 4 fără a încetini execuția. Pentru versiunea multi-pass - de 2,72 ori. Mai târziu, în versiunea 1.3, operația de suprascriere a fost înlocuită cu XOR [8] .

AB16

Joel Alwen și Jeremiah Blocki au dovedit în munca lor că algoritmul lor de atac AB16 este eficient nu numai pentru Argon2i-A (din prima versiune a specificației), ci și pentru Argon2i-B (din cea mai recentă versiune 1.3). Ei au arătat că atacarea Argon2 cu 1 GB de RAM reduce timpul de calcul la jumătate. Pentru o protecție eficientă, trebuie specificate mai mult de 10 treceri. Dar, cu abordarea recomandată pentru alegerea parametrilor algoritmului, în practică, adesea poate fi selectată doar 1 trecere. Dezvoltatorii Argon2 susțin că prin aplicarea atacului AB16 asupra Argon2i-B la , timpul este redus de cel mult 2 ori până la 32 GB de memorie și recomandă utilizarea numărului de treceri care depășește logaritmul binar al dimensiunii[ clarifica ] memorie folosită [9] .

Atacul compromisului de clasare

Acest atac este unul dintre cele mai eficiente pentru Argon2d. Reduce timpul de procesare de 1,33 ori. Pentru Argon2i la , coeficientul este 3 [10] .

Atacuri cu colectorii de gunoi

Condiția principală pentru atacul prezentat este accesul atacatorului la memoria internă a mașinii țintă, fie după terminarea schemei de hashing, fie la un moment dat când parola în sine este încă prezentă în memorie. Datorită rescrierii informațiilor folosind funcția , Argon2i și Argon2d sunt rezistente la aceste atacuri [11] .

Aplicație

Argon2 este optimizat pentru arhitectura x86 și poate fi implementat pe Linux , OS X , Windows .

Argon2d este destinat sistemelor în care un atacator nu accesează în mod regulat memoria sistemului sau procesorul. De exemplu, pentru servere backend și criptomineri . Când utilizați un nucleu pe un procesor de 2 GHz și 250 MB de RAM cu Argon2d (p=2), criptominingul durează 0,1 s, iar când utilizați 4 nuclee și 4 GB de memorie (p=8) , autentificarea pe serverul backend durează 0, 5 s .

Argon2i este mai potrivit pentru serverele frontend și pentru criptarea hard diskului . Generarea cheii pentru criptare pe un procesor de 2 GHz folosind 2 nuclee și 6 GB de memorie RAM cu Argon2i (p=4) durează 3 s, în timp ce autentificarea pe serverul frontend folosind 2 nuclee și 1 GB de memorie cu Argon2i (p=4) , durează 0,5 s [12] .

Note

  1. 1 2 3 4 Concurs de hashing parole .
  2. Argon, 2016 , p. 293.
  3. Argon, 2016 , p. 292.
  4. Argon, 2016 , p. 294.
  5. Argon, 2016 , p. 294-295.
  6. 1 2 Argon, 2016 , p. 295.
  7. Argon, 2016 , p. 296-297.
  8. Henry Corrigan-Gibbs, 2016 .
  9. Alwen, Blocki, 2016 .
  10. Argon, 2016 , p. 297.
  11. Privire de ansamblu, 2015 .
  12. Argon, 2016 , p. 300.

Literatură

Link -uri