Puncte:3

Parolele generate de oameni utilizate cu funcțiile de derivare a cheilor nu reduc securitatea criptării simetrice?

drapel et

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ă.

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. 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ă. 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.

Deci de ce nu este aceasta o preocupare? Sau imi scapa ceva?

Utilizarea KDF-urilor lente va atenua o parte din securitatea pierdută prin utilizarea unei parole alese de om în loc de a genera aleatoriu AES-256 - totuși există vreo analiză în acest sens?

fgrieu avatar
drapel ng
Este o preocupare. Dar se pare că ați ratat problema este atenuată într-o oarecare măsură cu KDF-uri speciale, intenționat lente pentru parolă, cum ar fi [Argon2](https://en.wikipedia.org/wiki/Argon2), și înainte de asta PBKDF2 învechit. Ar trebui să studiezi această linie de apărare. Încă o întrebare bună, mai ales dacă adăugați: câți biți suplimentari de entropie pot oferi aceste măsuri de atenuare în mod realist? Cum afectează progresul tehnic securitatea criptografiei bazate pe parole, pentru secretul pe termen scurt și pe termen lung?
drapel et
@fgrieu - Știu că KDF-urile lente sunt întotdeauna folosite (sau mai degrabă întotdeauna să fie folosite). Cu toate acestea, există vreo analiză despre cât de multă atenuare oferă de fapt - și anume compararea unui atac de forță brută asupra unei chei de 256 de biți generate aleatoriu cu o cheie de 256 generată dintr-o parolă cu n caractere folosind un KDF lent. Care ar oferi linii directoare cu privire la câte parole ar trebui alese și, de asemenea, câte runde KDF va aduce înapoi securitatea împotriva unui atac cu forță brută la aceeași cu o cheie de 256 de biți
fgrieu avatar
drapel ng
Cele de mai sus clarifică [password-hashing](https://crypto.stackexchange.com/tags/password-hashing/info) este relevantă pentru întrebare. Am adăugat această etichetă și recomand 1) revizuirea modului în care întrebarea este diferită de [_Password entropy mult mai mică decât entropia cheilor de criptare. De ce este acest lucru acceptabil?_](https://crypto.stackexchange.com/q/36851) și altele etichetate [tag:password-hashing]. 2) Apoi fie modificați cel puțin ultimul paragraf pentru a face ceea ce se cere mai precis (cum ar fi prin încorporarea unora dintre comentariile de mai sus), fie ștergeți întrebarea dacă este duplicată.
Puncte:5
drapel in

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.

Puncte:2
drapel si

Răspunsul lui Maarten este bun, dar nu menționează că este posibil să existe cu ușurință expresii de acces care pot fi memorate de om cu >128 de biți de entropie. The Diceware sistemul folosește un RNG bun (zaruri de înaltă calitate sau un CSPRNG) pentru a alege „caracterele” dintr-un „alfabet” enorm: în loc să folosească litere englezești unice (sau caractere ASCII), „caracterele” sunt cuvinte întregi, iar „alfabetul” este o listă de 7776 de cuvinte (sau 1296 de cuvinte pentru listele lor „scurte”).

Cu 7776 de cuvinte obțineți 12,9 biți de entropie pe cuvânt, cu 1296 de cuvinte obțineți 10,3 biți de entropie pe cuvânt. Deci, o expresie de 10 cuvinte care utilizează dicționarul de 7776 de cuvinte precum „ChompBuggyOkayPlatonicGrafted.KiltDecreeRecessOpacityUnedited” are 129 de biți de entropie și este o alegere bună pentru a securiza baza de date a unui manager de parole. "." în mijloc se află doar un simbol ușor de reținut și ușor de tastat, care ajută la împărțirea expresiei de acces în două expresii de acces de 5 cuvinte, ceea ce facilitează memorarea întregului lucru.

Folosesc mai multe astfel de fraze. Unul pentru fiecare login al computerului meu și unul pentru managerul de parole. Nu aș vrea să memorez prea multe dintre ele (încă este un efort decent), dar să ai suficient pentru a menține autentificarea și managerul de parole în siguranță este bine.

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.