Puncte:2

De ce majoritatea primitivelor de criptare autentificate se așteaptă la o cheie imprevizibilă și uniform aleatorie pentru a fi în siguranță?

drapel cn

Am observat că cheile pentru primitivele de criptare autentificate precum AES trebuie să fie imprevizibile și uniform aleatoriu pentru a fi în siguranță. Valorile IV și semințele pentru PRNG-uri trebuie, de asemenea, să fie imprevizibile și aleatorii.

Î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)?

Presupun că din perspectiva algoritmului nu contează (atâta timp cât lungimea cheii este corectă), dar atacatorii pot ghici mai ușor chei/parole previzibile, deoarece încearcă mai întâi chei/parole slabe. Am dreptate?

Și uniform aleatoriu are sens doar atunci când cheile sunt generate de mai multe ori? Dacă da, atunci ce se va întâmpla când vom folosi neuniform aleatoriu chei?

kelalaka avatar
drapel in
[Atacuri care se bazează pe o entropie slabă](https://security.stackexchange.com/a/239397/86735)
Puncte:4
drapel tr

Presupun că din perspectiva algoritmului nu contează (atâta timp cât lungimea cheii este corectă), dar atacatorii pot ghici mai ușor chei/parole previzibile, deoarece încearcă mai întâi chei/parole slabe. Am dreptate ?

Într-adevăr, securitatea unei astfel de scheme vine din secretul cheii. Prin urmare, a fi ușor de prezis implică faptul că schema nu poate fi sigură.

Î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)?

Nu este greu să răspunzi direct la această întrebare (voi discuta avertisment la sfârșit). Pentru a înțelege mai bine acest lucru, merită să analizați îndeaproape cerințele reale pentru o cheie. Când vorbim despre o cheie „aleatorie”, nu vorbim despre cum „arata”, ci mai degrabă, vorbim despre o proprietate a proces care generează această cheie. Dacă procesarea în sine este bună (care va fi definită mai târziu), cum ar fi, de exemplu, utilizarea unui CSPRNG, atunci nu contează că cheia este b"SUBMARIN GALBEN" sau b"\x84\x1cR\xc5X\x07\xd0\x07\xd9R'\xd1\xa2\xad\xbef" sau b"verysecretkey123456". Motivul este că, în scenariul ideal, ambele sunt la fel de probabil să fie generate de procesul de generare a cheilor. Cu alte cuvinte, nu pot spune doar privind valoarea b"verysecretkey123456" că nu este o cheie sigură sau nu; Va trebui să mă uit cum a fost generat.

avertisment: Acum, trăim pe pământ și putem face niște presupuneri... Văzând o cheie care arată ca b"verysecretkey123456", este rezonabil să presupunem că procesul nu a fost un CSPRNG adecvat, dar poate că cineva a copiat din Stackoverflow...

Ș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 există limitări generale cu privire la numărul de ori în care puteți genera o valoare dintr-un astfel de proces (dacă nu se indică altfel și în funcție de context). De exemplu, puteți rula următorul cod fără probleme în Python. Rețineți că nu ne este garantat os modul.

import os

chei = [os.urandom(16) for _ in range(100)]
Eugene avatar
drapel cn
Multumesc pentru raspuns. Aș accepta ambele răspunsuri dacă aș putea)
Puncte:1
drapel in

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.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.