Secure stocarea parolelor pentru site-uri pe php mysql

Până în prezent, mulți păstrează parolele în baza de date, pur și simplu trecând-o cu md5 sau, în cel mai bun caz, cu SHA-1, ceea ce nu oferă nicio siguranță notabilă. Într-un md5 învechit și deja nesigur, există multe coliziuni, și sunt calculate și tabele curcubeu destul de mari și în general accesibile. Situația cu SHA-1 este doar puțin mai bună.







Folosirea sării și mai rezistente la algoritmi de hashing crește în mod semnificativ fiabilitatea, dar calcula chiar si lung - nu hashes o sarcină foarte dificilă pentru sistemele moderne, mai ales că ambele calcule au început să atragă GPU. Prin urmare, ar trebui să utilizați un algoritm care va lucra atât de încet, pentru a crește fiabilitatea de criptare a parolei, care calculează tabele curcubeu și atacurile brute force devin complet ineficiente. Acest lucru se face prin binecunoscuta functie bcrypt. Pentru criptarea ireversibilă se folosește algoritmul Blowfish cu mai multe iteratii, și funcționează foarte încet. Prin schimbarea numărului de iterații poate fi ajustată în funcție de timpul necesar pentru a cripta parola, și de a găsi o „cale de mijloc“, atunci când criptarea unei parole va fi suficient de rapid, iar alegerea sa va fi lipsită de sens.







În PHP, există o funcție criptată (), care este o implementare a lui bcrypt. Cu versiuni de PHP 5.3 și mai noi, funcția crypt () are o implementare integrată a algoritmilor de criptare și nu mai depinde de suportul acestor algoritmi de către sistemul de operare, care ar trebui să fie utilizat. Această funcție suportă diferiți algoritmi, de la DES la SHA-512, și selectează algoritmul, în funcție de ce sare este setat ca parametru.

Mai jos vreau să ofer un generator simplu, de o singură linie de sare. Fiind funcția skormlennoy crypt (), sarea va face ca acesta să utilizeze Blowfish cu 10 la pătrat iterații. Acesta specifică identificatorul $ 2a $ (utilizarea bcrypt), apoi atingând numărul de iterații, care sunt definite ca bază logaritmul 2 (în acest caz, adică 2 10. 1024 iterații. Creșterea parametrului de unul dublează numărul de iterații și astfel funcția de timp a calculelor .

Sarea va avea o lungime de 30 de octeți, dintre care 22 sunt utile și 8 vor servi. Pe serverul meu (Xeon E5520, 2.24 GHz), calculul unei parole în acest fel durează 0.12 secunde - ceea ce este foarte mult. Ieșirea va primi un șir de 60 de octeți în lungime.







Articole similare

Trimiteți-le prietenilor: