De ce este necesară o funcție hash și cum să păstrați parolele în secret

Din când în când, vrem sau nu, dar există hacking de servere de baze de date. Având în vedere acest lucru, este important să fiți siguri că datele sensibile, cum ar fi parolele utilizatorilor, nu vor fi divulgate. Astăzi, vom acoperi tema măsurilor de protecție la hash și parola în aplicația dvs. web.







Criptologia este un subiect destul de complex în care sunt departe de un expert. Până în prezent, diverse universități și organizații de securitate sunt angajate în cercetare în acest domeniu.

În acest articol voi încerca să mă prezint cât mai simplu, pe tema unei metode puternice de stocare a parolelor în aplicațiile web

Hashing transformă datele într-un set de elemente șir și întreg.

Acest lucru se datorează unui hashing cu sens unic. "Unilateral" înseamnă că este foarte dificil sau imposibil să inversați transformarea.

Funcția hash cea mai comună este md5 ():

Folosind md5 (), veți obține întotdeauna un șir de 32 de caractere ca rezultat. Dar aceste personaje vor fi în format hexazecimal; Din punct de vedere tehnic, un hash poate fi un număr întreg de 128 de biți. Puteți pune șiruri de caractere și numere de orice lungime în funcția md5 (), dar la ieșire veți obține întotdeauna un rezultat de 32 de caractere. Numai acest fapt este o confirmare bună a faptului că aceasta este o funcție "unică".

Procesul normal de înregistrare:

  • Utilizatorul completează formularul de înregistrare, inclusiv câmpul "Parolă".
  • Managerul script-ului plasează aceste date în baza de date.
  • Înainte de a scrie în baza de date, parola este procesată de o funcție hash.
  • Valoarea inițială a parolei nu este utilizată nicăieri.

Procesul de conectare:

  • Utilizatorul introduce numele de utilizator și parola.
  • Managerul de script scade parola pe care a introdus-o utilizatorul.
  • Scriptul găsește o intrare în baza de date și citește valorile parolei stocate în ea.
  • Parola din baza de date și parola introdusă de utilizator sunt comparate și dacă se potrivesc (în formă hashed), atunci utilizatorul este permis în sistem.

Procesul de hash al parolei va fi descris mai târziu în acest articol.

Rețineți că valoarea inițială a parolei nu a fost salvată nicăieri. Dacă baza de date ajunge la atacatori, atunci nu văd parolele, nu? Da, nu chiar. Să ne uităm la "găuri" potențiale.

"Coliziuni" apar atunci când, atunci când au două date de tip diferit, se obține același rezultat. De fapt depinde de ce funcție folosiți.

Cum se poate folosi aceasta?

De exemplu, am văzut câteva scripturi învechite în care funcția crc32 () a fost folosită pentru a sparge parola. Această funcție returnează un rezultat întreg pe 32 de biți. Acest lucru înseamnă că pot exista doar 2 ^ 32 (sau 4,294,967,296) opțiuni posibile la ieșire.

Permiteți parolei parola:

Acum, să joace un personaj negativ care a furat baza de date, împreună cu parola trunchiată. Noi nu suntem capabili de a converti 323322056 în „supersecretpassword“, cu toate acestea, datorită unui script simplu, putem alege o parolă diferită, care este trunchiată va fi exact la fel ca și cel care se află în baza de date:

Acest script are nevoie cu siguranță de timp, dar în cele din urmă va reveni la un șir. Acum putem folosi șirul pe care l-am primit - în loc de "supersecretpassword" - care ne va permite să ne conectăm ca utilizator care a avut această parolă.

De exemplu, aici, în câteva minute, acest script mi-a revenit pe linia "MTIxMjY5MTAwNg ==". Să încercăm:

Cum poate fi prevenită această situație?

În zilele noastre, chiar și pe cel mai simplu computer de acasă, puteți utiliza miliarde de funcții hash pe secundă. Prin urmare, avem nevoie de o funcție hash care generează cât mai multă valoare.

De exemplu, puteți utiliza md5 (), care generează hashes 128-bit. Astfel, opțiunile de selecție devin mult mai mult 340,282,366,920,938,463,463,374,607,431,768,211,456. Fuga prin toate iterațiile pentru a găsi o coliziune este imposibilă. Cu toate acestea, unii oameni reușesc încă să găsească "găuri" pe lângă acestea aici).

Sha1 () este cea mai bună alternativă. aceasta returnează un hash de 160 de biți.

Chiar dacă am rezolvat coliziunile, aceasta nu înseamnă că ne-am asigurat din toate părțile.

Masa curcubeu este construită prin calcularea valorii hash a cuvintelor și expresiilor utilizate cel mai frecvent.

Astfel de tabele pot conține milioane și chiar miliarde de linii.







De exemplu, pentru a crea o astfel de tabelă, puteți trece prin dicționar și puteți crea un hash pentru fiecare cuvânt. De asemenea, puteți crea hash-uri pentru o combinație de cuvinte. Dar nu toate acestea; puteți introduce și numere înainte / după / între cuvinte și scrieți, de asemenea, valoarea unor astfel de hashes în tabel.

Aici pot fi compilate și folosite astfel de mese Rainbow uriașe.

Cum poate fi folosit:

Să ne imaginăm că avem o bază de date cu zeci de mii de parole în mâinile noastre. Nu va fi deosebit de dificil să le comparați cu valorile din tabelul curcubeu. Desigur, nu toate parolele vor coincide, dar în cele din urmă va exista o altă pereche!

Cum vă puteți apăra:

Doar adăugați "sare":

Tot ce trebuie să faceți este să concatenați "sarea" și parola înainte de hashing. Este puțin probabil în tabelul cu curcubeu să existe o astfel de valoare. Dar suntem încă în pericol!

Amintiți-vă că tabelele de curcubeu se pot forma după ce baza este furată.

Cum se poate folosi aceasta?

Dacă ați creat sare, atunci când baza este furat, aceasta va cădea în mâinile intrusilor. Tot ce va trebui să facă este să genereze o nouă masă de curcubeu cu "sărurile" pe care le-au primit din baza de date.

De exemplu, în tabelul curcubeu există o rulare a liniei "easypassword". În noua tabelă Rainbow, în locul valorii trecute, vor avea șirul "f # @ V) Hu ^% Hgfdseasypassword". Când rulează scenariul, pot obține din nou unele meciuri.

Cum să vă apărați?

Putem folosi "sarea unică" care va fi diferită pentru fiecare utilizator.

Supliment la sare pentru a deveni unic poate deveni un id de utilizator:

Acest lucru implică faptul că numele de utilizator nu se va schimba niciodată.

De asemenea, putem genera un șir aleatoriu pentru fiecare utilizator individual, decât pentru a obține o "sare unică". Această sare trebuie păstrată în același loc ca și înregistrarea utilizatorului.

Această metodă ne protejează de mesele de curcubeu, deoarece fiecare parolă are propria sa sare unică. Atacatorul va trebui să creeze 10 milioane de tabele separate Rainbow, care în practică este imposibil de realizat.

Cele mai multe funcții hash au fost dezvoltate, având în vedere că ele sunt adesea folosite pentru a calcula sumele de control ale unor valori sau fișiere cu verificarea integrității datelor.

Cum se utilizează?

Așa cum am spus mai devreme, un calculator cu o placă grafică puternică poate calcula miliarde de hashes pe secundă. Atacatorii pot folosi "forța brute", verificând fiecare parolă posibilă (efectuând o căutare completă a tuturor opțiunilor posibile).

Dacă credeți că o parolă de 8 caractere poate rezista unui "atac brut", atunci imaginați-vă:

  • Dacă parola conține majuscule, majuscule și cifre, acestea sunt doar 62 (26 + 26 + 10) caractere posibile.
  • Un șir de 8 caractere conține 62 ^ 8 combinații. Aceasta este puțin mai mare de 218 trilioane.
  • Dacă procesați 1 miliard de hashes pe secundă, parola va fi preluată în 60 de ore.

Pentru o parolă de 6 caractere, aceeași operație va dura mai mult de 1 minut.

Nu ezitați să solicitați utilizatorilor să aibă parole de 9 sau 10 caractere în lungime, deși acest lucru îi va face nervos.

Cum să vă apărați?

Utilizați funcții hash lente

Imaginați-vă că utilizați o funcție hash care generează 1 milion hashes pe secundă în loc de 1 miliard. Atacatorul trebuie să ridice parole de 1000 de ori mai mult. 60 de ore se vor transforma in 7 ani!

Prima opțiune este crearea acestei funcții:

Sau puteți utiliza un algoritm care utilizează un "parametru de cost", cum ar fi BLOWFISH. În PHP, acest lucru poate fi implementat folosind metoda crypt ().

Al doilea parametru din metoda crypt () conține valori separate prin semne de dolar ($).

Prima valoare este '$ 2a', care spune că vom folosi algoritmul BLOWFISH.

A doua valoare este '$ 10'. În acest caz, acesta este "parametrul de cost". Acest parametru reprezintă numărul de iterații care vor fi efectuate (10 => 2 ^ 10 = 1024 iterații.) Valoarea poate fi de la 04 la 31.

Să dăm un exemplu:

Ca rezultat, avem un hash care conține algoritmul ($ 2a), parametrul de cost ($ 10) și o sare cu o lungime de 22 de caractere. Restul este un hash. Testează:

Dacă executăm acest lucru, primim mesajul "Accesul este permis!"

Având în vedere tot ce am învățat, vom scrie o clasă:

De ce este necesară o funcție hash și cum să păstrați parolele în secret

Prin obținerea de informații imediat prin două canale (vedere și auz), eficiența predării este mult mai mare decât învățarea din cărți. Și temele și testele online vă vor permite să gândiți în mod constant în limba pe care o învățați și să vă verificați imediat cunoștințele!

De ce este necesară o funcție hash și cum să păstrați parolele în secret

De ce este necesară o funcție hash și cum să păstrați parolele în secret

Dacă doriți să învățați HTML mult timp, atunci am o veste bună pentru dvs.!

De ce este necesară o funcție hash și cum să păstrați parolele în secret

Dacă ați învățat deja HTML și doriți să treceți mai departe, următorul pas este să învățați tehnologia CSS.

De ce este necesară o funcție hash și cum să păstrați parolele în secret

Dacă doriți să înțeleagă conceptele de domeniu si hosting, învață cum să creeze o bază de date, încărca fișiere pe un site web prin intermediul unui server FTP, crea subdomenii, configurați cutiile poștale pentru site-ul și să monitorizeze participarea, acest curs este conceput special pentru tine!







Articole similare

Trimiteți-le prietenilor: