Dimensiunea cheii pentru AES este aleasă ca 256, deoarece aceasta este considerată dimensiunea minimă a cheii care poate proteja împotriva unui atac cu forță brută - de exemplu. $2^{256}$ încearcă.
Nu este in regula, $2^{128}$ sau - mai precis - o dimensiune a cheii de 128 de biți pt $2^{127}$ încercările în medie sunt considerate destule, cu siguranță împotriva oricărui atac practic.
Cu toate acestea, în practică, pentru o mulțime de aplicații, o parolă aleasă de utilizator este utilizată pentru a obține cheia de dimensiune 256 folosind un KDF. Să presupunem că aplicația impune o parolă de 8 caractere - aceasta este o parolă de 64 de biți - astfel încât forța brută se reduce la $2^{64}$ încearcă. Și probabil se reduce și mai mult, deoarece un octet dintr-o parolă comună are entropie mult mai mică decât un octet dintr-o cheie.
64 de biți este o speranță zadarnică, parole generate de oameni medie la aproximativ 40 de biți. Desigur, chiar și parolele bine alese de 8 caractere vor folosi în general un subset de ASCII, care în sine este un subset al tuturor valorilor posibile ale octetilor. Cu toate cele 24 speciale care sunt folosite în general, ajung la 86 de valori din 256, adică. $log_2(86) \aproximativ 6,43$ biți de entropie pe octet, sau $\aproximativ 51,41 $ biți pentru 8 astfel de caractere. Dar asta doar atunci când se presupune distribuția perfectă, iar oamenii sunt îngrozitori în a genera valori aleatorii.
Forța brută poate fi încercată mai degrabă în funcție de octeți decât de biți, reducând astfel forța brută la și mai mică decât $2^{64}$ încearcă.
În mod normal, ați încerca împotriva parolelor cunoscute anterior de la baze de date sparte sau atacuri de dicționar. N-ai încerca vrând-nevrând.Alte atacuri sunt posibile dacă implementarea este întreruptă, de exemplu dacă nu este folosită sare în derivarea cheii.
Deci, aceasta înseamnă că AES256 chiar și cu o parolă de 32 de caractere va fi mai slab decât AES256 cu o cheie generată aleatoriu.
Da. Un dosar de șervețel îți va arăta că lipsești 16 $ \time 1,5 = 24 $ biţi la foarte putin.
Deci de ce nu este aceasta o preocupare? Sau imi scapa ceva?
Este un imens îngrijorare, în general, ați încerca să evitați deloc utilizarea parolelor. În caz contrar, ați folosi o funcție de derivare a cheii bazată pe parolă care aplică extinderea cheii, cum ar fi una dintre variantele Argon2 (PBKDF2, scrypt și bcrypt sunt probabil mai cunoscute). Dar acestea oferă doar o mică protecție pentru fiecare derivație a cheii. Este aproximativ 20 de biți pentru un milion de iterații (ca $log_2(1.000.000)$ este aproape de 20). Cu siguranță nu te va ridica $2^{128}$ pentru parole generice; $40 + 20 = 60$ biți, deci ruperea criptării ar fi costisitoare, dar departe de a fi imposibilă.
Acolo unde parolele nu pot fi evitate, se recomandă să utilizați un manager de parole, de ex. Parole de 12 caractere care sunt generate aleatoriu (eventual necesită ca unele simboluri să fie prezente, în cazul în care ai ghinion). Asta nu te va apropia de 128 de biți, dar ar fi suficient de descurajator pentru oricine încearcă forța brută sau tehnici similare. Desigur, este posibil să folosiți 32 de caractere hexadecimale aleatorii și să stocați pur și simplu o cheie, presupunând că nu există limite pentru dimensiunea parolei.
Un truc simplu arată că poți folosi $$l_p = \bigg\lceil {l_k - \log_2(i) \over log_2(N)} \bigg\rceil$$ ca modalitate de a cunoaște numărul de caractere pentru fiecare parolă, deci să spunem că folosim valorile de mai sus: $$\bigg\lceil {128 - \log_2(1.000.000) \over \log_2(86)} \bigg\rceil = \bigg\lceil {{128 - 20} \over 6,43} \bigg\rceil = 17$$ parola de caracter extinsă pentru a ajunge la 128 de biți folosind un KDF cu 1.000.000 de iterații, presupunând că este perfect aleatorie.
O modalitate de a evita acest lucru este să utilizați criptarea cheii publice și să păstrați cheia privată în siguranță.Un pas al protecției cheii private utilizate pentru decriptare poate fi criptarea bazată pe parolă, dar puteți începe prin a o păstra pe un stick de memorie, de exemplu, astfel încât un atacator pur și simplu să nu aibă acces la ea atunci când nu este necesar. Există, desigur, multe alte modalități de stocare securizată a cheilor.
Rețineți că aceasta este o problemă mai mică atunci când pot fi luate măsuri contrare. De exemplu. un PIN are în general doar 4-6 cifre, dar faptul că poți încerca doar de trei ori îl protejează împotriva atacurilor (codurile PUK sunt în general mult mai mari, deoarece de obicei nu blochează, deoarece asta ar putea duce la refuzul serviciului atacuri). Cu toate acestea, de ex. criptarea fișierelor atacuri offline se poate presupune în general.