TL;DR Pentru că așa au fost proiectate. Puteți folosi un KDF pentru a obține chei care conțin cel mult aleatoriu prezent în materialul cheii de intrare.
Am observat că cheile pentru primitivele de criptare autentificate precum AES trebuie să fie imprevizibile și uniform aleatorii pentru a fi sigure.
Ei bine, trebuie să aibă 128 de biți pentru a avea securitate de ~128 de biți, așa cum promite AES. În principiu, puteți genera, de asemenea, 112 biți de cheie aleatorie, apoi utilizați 16 biți cu valoare zero pentru a crea o cheie de 128 de biți. Majoritatea API-urilor acceptă doar octeți - adică multipli de 8 biți, astfel încât ar fi 14 octeți aleatori și 2 octeți cu zero pentru o cheie de 16 octeți. AES, în principiu, nu necesită chei bine distribuite.
Am eliminat această parte a răspunsului a fost subliniat în chat-ul canalului lateral că nu este cazul. Acestea fiind spuse, atacurile de chei cunoscute legate de programul cheilor nu vor funcționa direct, deoarece presupun că un anumit atac necesită o modificare specifică a cheilor furnizate. Cu toate acestea, fără analize suplimentare nu putem spune că rezultatul este sigur; mai multe informatii pot fi gasite Aici.
Valorile IV și semințele pentru PRNG-uri trebuie, de asemenea, să fie imprevizibile și aleatorii.
Nu neaparat. Cerințele IV sunt diferite pentru fiecare mod de operare. De exemplu, CBC necesită un IV imprevizibil (care se traduce, în general, în a randomizat IV). CFB necesită un nonce care are aceeași dimensiune cu dimensiunea blocului. Modul CTR poate folosi orice dimensiune nonce, atâta timp cât blocul contor nu se repetă. Modul GCM folosește de obicei un nonce de 12 octeți. Nonces - numere folosite o singură dată - pot fi randomizate, dar pot fi și un număr de serie, de exemplu.
Întrebarea mea este: cum diferă acele valori imprevizibile și aleatorii de valorile previzibile care conțin cuvinte întregi în engleză, de exemplu (cum ar fi verysecretkey123456)?
Ele sunt în general generate de un generator de numere aleatoare securizate (CSPRNG sau DRBG). Sau sunt derivate din alte informații. De exemplu, acestea pot fi create folosind acordul cheii, de obicei urmat de o funcție de derivare a cheii bazată pe chei (KBKDF).
Într-adevăr, cheile pot fi generate și dintr-o parolă folosind un PBKDF.Aceste funcții necesită, de asemenea, un factor de sare și lucru (și, eventual, alți parametri) pentru a reduce riscul ca un atacator să ghicească parola. Dacă nu sunt prezente alte contramăsuri, schema ar putea fi încă nesigură, deoarece parolele sunt în general ușor de ghicit.
„verysecretkey123456” nu este, în general, considerată o cheie, ar fi considerată o parolă sau o expresie de acces. Faptul că este mai degrabă un șir decât binar este un indiciu suficient pentru asta.
Presupun că din perspectiva algoritmului nu contează (atâta timp cât lungimea cheii este corectă),
Corect, deși AES necesită un șir de biți ca cheie, așa că pentru a-l folosi mai întâi ar trebui să codificați parola sau fraza de acces. Rețineți că de ex. Cheile DES au biți de paritate în cheia codificată, așa că nu toate cheile iau doar biți aleatoriu. Cifrurile mai moderne decât DES - inclusiv AES - sunt, în general, concepute pentru a prelua chei complet randomizate.
dar atacatorii pot ghici mai ușor chei/parole previzibile, deoarece încearcă mai întâi chei/parole slabe. Am dreptate?
Da, asta s-ar numi în general a atac de dicționar când încearcă anumite cuvinte. Desigur, pot testa separat chei foarte mici, iar atacurile din dicționar pot fi amplificate de alte trucuri.
Și uniform aleatoriu are sens numai atunci când cheile sunt generate de mai multe ori? Dacă da, atunci ce se va întâmpla când vom folosi chei aleatorii neuniform?
Nu, așa cum se menționează în alt raspuns vorbește uniform aleatoriu despre procesul de generare, nu despre rezultatul ca atare. Dacă aveți chei aleatoare neuniform, atunci există șansa ca un adversar să le poată ghici - cel puțin mai probabil decât dacă cheile ar fi aleatoare uniform.
Conform principiilor Kerckhoff, presupunem, în general, că atacatorii știu cum sunt generate cheile sau parolele, astfel încât să poată ghici distribuția.