După înțelegerea mea, derivarea cheii este atunci când luați niște date, să spunem o parolă, și utilizați o funcție pentru a o converti într-un număr care poate fi folosit ca o cheie secretă în criptografia cu curbe eliptice, de exemplu.
Da, acest lucru este corect, totuși, rețineți că parola dvs. ar trebui să aibă suficient de puternică pentru a fi protejată de forțarea brută. O modalitate obișnuită este utilizarea zaruri sau Bip39 precum mecanismele de parole, vezi în xkc936.
Odată ce ați obținut cheia $k$, atunci aceasta este cheia dvs. privată și $[k]G$ este cheia dvs. publică în ECC cu punctul de bază $G$ a curbei. Ștergeți $k$ după utilizare, nici măcar nu-l stocați în memorie și păstrați-vă parola în siguranță!
Argon2 folosește o sare aleatorie la hashing, ceea ce necesită ca hash-ul să fie diferit de fiecare dată, în ciuda utilizării aceleiași parole.
Da, și asta este corect. Puteți considera acest lucru așa cum, cu toți parametrii lui Argon2, rulați o funcție deterministă. Aceeași intrare va rezulta din aceeași ieșire. Aceasta este ceea ce ne dorim de la funcțiile hash, funcțiile hash de parolă și Random Oracles; fi determinist; aceeași intrare trebuie să rezulte în aceeași ieșire.
Utilizarea de sare diferită este folosită pentru a obține mai mult de o cheie dintr-o parolă. Sarea în același timp este o bună contramăsură împotriva meselor curcubeu, acolo unde este cazul.
Dacă hash-ul este diferit, cum poate fi folosit pentru a reprezenta aceeași cheie secretă?
Pentru a obține aceeași cheie, trebuie să utilizați aceiași parametri; aceeași parolă, aceeași sare, aceeași iterație, aceeași utilizare a memoriei și aceeași paralelizare. Parametrii în afară de parola nu trebuie să fie neapărat secreti, pot fi stocați în mod deschis. De exemplu, acest tip de informații sunt stocate în Antet LUKS, partea importantă este să vă păstrați parola secretă tot timpul.
Trebuie să stocați acești parametri atunci când obțineți cheia din parolă.
Cum se utilizează Argon2 pentru derivarea cheii?
În primul rând, decideți securitatea țintă; adicăcat de mult vrei ca viata atacatorului sa fie grea. Ajustați numărul de iterații, gradul de paralelizare și utilizarea memoriei în funcție de securitatea țintă. Odată ce te-ai hotărât, generează o sare uniformă aleatorie. Determinați dimensiunea dorită a cheii, cum ar fi 256 de biți (sau 32 de biți). Acum sunteți gata să utilizați Argon2 cu aceste informații.
Furnizați informațiile dvs. către Argon și decideți securitatea țintă;
Utilizare: ./argon2 [-h] sare [-i|-d|-id] [-t iterații] [-m memorie] [-p paralelism] [-l lungime hash] [-e|-r] [- v (10|13)]
Parola este citită din stdin
Parametri:
sare Sarea de folosit, minim 8 caractere
-i Folosește Argon2i (acesta este implicit)
-d Utilizați Argon2d în loc de Argon2i
-id Utilizați Argon2id în loc de Argon2i
-t N Setează numărul de iterații la N (implicit = 3)
-m N Setează utilizarea memoriei de 2^N KiB (implicit 12)
-p N Setează paralelismul la N fire (implicit 1)
-l N Setează lungimea ieșirii hash la N octeți (implicit 32)
-e Ieșire numai hash codificat
-r Afișează numai octeții bruti ai hashului
-v (10|13) Versiunea Argon2 (implicit la cea mai recentă versiune, în prezent 13)
-h Tipăriți utilizarea argon2
Rețineți că Argon2 are trei tipuri;
Argon2d este mai rapid și folosește acces la memorie în funcție de date. Dependența de date activează imediat canalul lateral. Acest lucru este potrivit pentru criptomonede și aplicații fără amenințări din partea atacurilor pe canale laterale.
Argon2i folosește acces la memorie independent de date și acest lucru este preferat pentru hashingul parolei și derivarea cheilor bazate pe parole.
Argon2id În prima jumătate a primei iterații funcționează ca Argon2i și pentru restul funcționează ca Argon2d. Acest lucru permite atât protecția canalului lateral, cât și compromisul timp-memorie.
și formă draft-irtf-cfrg-argon2-03;
Dacă nu cunoașteți diferența dintre ele sau considerați atacurile pe canalul lateral drept o amenințare viabilă, alegeți Argon2id.