Păstrarea parolelor în php folosind crypt (), pentru aplicațiile yii

Stocarea parolelor într-o aplicație web

Există multe exemple și materiale care arată modul în care se stochează parolele în baza de date.

Metodele descrise frecvent sunt substandard și sunt susceptibile la hacking. Rețeaua are multe exemple de instruire care arată cum se face greșit.







În practică, sistemele care utilizează accesul la parolă nu ar trebui să se bazeze pe utilizator pentru a crea o parolă "complexă", de exemplu, la înregistrare. O parolă "complexă" pentru atacator, și nu pentru utilizator. De asemenea, cred in mod eronat sistemul lor pentru cât mai multe și sigur că atacatorul nu va fi capabil de a obține o groapa de un tabel sau un fișier cu parole sau hash. Din aceasta rezultă că este necesar ca, chiar și în prepararea unui astfel de depozit, un atacator nu a putut face cu el, adică, informația era inutil să-l.

O greșeală foarte frecventă este hașurile rapide. De exemplu, MD5 este un algoritm de ștergere foarte rapid, totuși, la fel ca toți algoritmii SHA. De exemplu, pe NVIDIA GeForce 8800, puteți genera 200 milioane de hash-uri MD5 pe secundă. Din aceasta rezultă că utilizarea algoritmilor de hash rapid, chiar și cu un amestec de "sare" nu este eficientă. Prin sortarea obișnuită, puteți selecta rapid un hash și, în consecință, parola utilizatorului. Pe acest sistem, cu stocarea parolelor în forma md5 ("parola") - pot fi considerate deschise atacatorului.

De exemplu, pe un server, pentru a calcula un singur hash folosind algoritmul md5, este nevoie, în medie, de 10μs. Parola este stocată în baza de date ca hash din valoarea de utilizator introdusă (md5 ("password")). Un atacator a primit într-un fel o bază de date cu autentificări cu parole și încearcă să le decripteze. Algoritmul de decriptare este cel mai simplu. Este clar că, pentru a calcula mii de hash-uri necesare 10mksek * 1000 = 10 msec, pentru un milion de 10mksek * 1.000.000 = 1 secundă, etc. Din aceasta rezultă că algoritmul mai rapid hashing, cu atât mai repede atacatorul va alege numărul mai mare de parole în mai puțin timp. Din cele de mai sus, devine clar că algoritmul mai lent pentru calculul funcției hash, cu atât este mai fiabil.







Blowfish este un algoritm criptografic care implementează blocarea criptării simetrice. Acesta consumă o cantitate relativ mare de resurse de calcul și este considerat a fi mai degrabă un algoritm rău pentru criptarea parolelor. În PHP, implementarea este disponibilă printr-un simplu apel la cript (). Alegerea parametrului de greutate se face astfel încât atacul prin forță bruta este destul de lent și calculul hash-ului pentru utilizator nu este vizibil în timp. 200-300 msec pe serverul de producție este suficient pentru acest lucru.

Pentru un hash mai stabil, se adaugă sare. Sarea este un cuvânt, o expresie, o valoare aleatorie de temperatură, o schimbare dinamică a ceva, care se adaugă în mod arbitrar pentru a forma hash-ul final. De exemplu, md5 ($ parola. Md5 ($ salt)). Din fiecare parolă trebuie format un hash cu o sare unică. Scopul adăugării de sare este creșterea dimensiunii dicționarului pentru un atac de tip dictionar sau pentru tabele curcubeu. Sarea, care este utilizată împreună cu Blowfish, nu trebuie neapărat să fie un șir aleator rezistent criptografic. Este suficient să folosiți sare din numere pseudo-aleatoare, acest lucru este suficient pentru a împiedica parola să aleagă mesele de curcubeu.

Cu resursele curente ale sistemelor informatice, viteza cu care se selectează o parolă, folosind bustul, devine mai rapidă. Dacă software-ul tău utilizează în continuare algoritmi de hashing al parolei vechi, poate fi util să te gândești la schimbarea acestui algoritm.

Folosind crypt () în PHP pentru a stoca parole

crypt () returnează o șiră hashed obținută utilizând un algoritm standard UNIX bazat pe DES sau un alt algoritm disponibil în sistem.

Sarea este determinată în funcție de metoda hashing. Pentru Blowfish-criptare, formatul este: „$ 2a $“, un parametru de ponderare a două cifre, „$“ și 22 de numere din alfabetul „./0-9A-Za-z“. Folosirea altor simboluri în sare va duce la returnarea unui șir gol. parametru de ponderare a două numere este un logaritm binar al contorului de iterații ale algoritmului care stau la baza hash bazate pe Blowfish, și ar trebui să fie în intervalul 04-31, valori în afara acestui interval va provoca criptă () eșec. De exemplu:

Rețineți că primele 29 de caractere ale valorii returnate sunt aceleași ca și sarea.

Când adaugi ceva la sare, rezultatul nu se va schimba:

Și dacă rezultatul funcției criptată este trecut la intrare ca o sare pentru aceeași linie, atunci rezultatul executării va fi aceeași sare:

Principiile de salvare a parolei împreună cu cripta:

- în magazin se scrie doar parola hash și sare, parola nu este specificată explicit;

- valoarea returnată de funcția criptă este sarea cu hash;

- cripta ignoră simbolurile inutile într-o linie de sare;

Crearea unui hash







Trimiteți-le prietenilor: