De ce avem nevoie de o funcție hash, și cum să păstreze secretul parolele

Din când în când ne place sau nu, dar spargerilor apar servere de baze de date. În acest sens, este important să se asigure că datele confidențiale, cum ar fi parole, nu vor fi divulgate. Astăzi, vom acoperi subiectul privind măsurile de protecție și parola hashing în aplicația Web.

Criptologia este un subiect destul de complex, în care sunt în nici un caz un expert. Pentru această zi, diverse universități și organizații de securitate angajate în cercetare în acest domeniu.

In acest articol voi încerca să stabili cât mai ușor posibil, pe o metodă de stocare a parolei firma în web-aplicații

Hașarea transformă datele într-un set de elemente de coarde și întregi.

Acest lucru se datorează one-way hash. „Unilaterala“ înseamnă că produc inversă transforma foarte bine, prea dificil sau chiar imposibil.

Cea mai frecventă funcție hash este MD5 ():

Folosind MD5 (), veți obține întotdeauna ca rezultat al șir de 32 de caractere. Dar aceste caractere sunt în hexazecimal; punct de vedere tehnic hash poate fi un număr întreg de 128 de biți. Puteți pune în funcția MD5 () și numărul de linii de orice lungime, dar de ieșire va primi întotdeauna rezultatul în 32 de caractere. Deja acest singur fapt este o dovadă bună că acesta este „one-way“ funcția.

procesul de înregistrare normală:

  • Utilizatorul completează formularul de înregistrare, inclusiv câmpul „Password“.
  • Handler script-ul pune datele în baza de date.
  • Înainte de a înregistra la baza de date, funcția hash parola este procesată.
  • Valoarea inițială a parolei nu este utilizat.

Procesul de Logon:

  • Utilizatorul introduce parola de conectare și lui.
  • Handler script-ul hashes parola introduse de utilizator.
  • Script-ul este o înregistrare în baza de date, și citește valoarea parolei pe care este stocată în el.
  • Parola din baza de date și parola introduse de utilizator sunt comparate, iar în cazul în care se potrivesc (în formă trunchiată), utilizatorul este admis în sistem.

proces hashing Parola va fi explicat mai târziu în acest articol.

Observați că valoarea inițială a parolei nu este stocată nicăieri. În cazul în care baza de date ajunge la atacatori, ei nu vor putea vedea parolele, nu? Dar nu destul. Să ne uităm la potențialele „găuri“.

„Conflictele“ apar atunci când hashing cele două tipuri diferite de date obținute același rezultat. De fapt, aceasta depinde de funcția pe care o utilizați.

Cum să-l folosească?

De exemplu, am văzut unele script-uri mai mari în cazul în care funcția crc32 () este utilizată pentru a hash parola. Această funcție returnează rezultatul ca număr întreg pe 32 de biți. Acest lucru înseamnă că producția poate fi doar 2 ^ 32 (sau 4,294,967,296) opțiuni.

Să parola zaheshiruem:

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 este, desigur, are nevoie de timp, dar în cele din urmă returnează un șir de caractere. Acum putem folosi șirul, care a primit - în loc de „supersecretpassword“ - care ne va permite să intre în sistem ca un utilizator care a avut parola.

De exemplu, aici este script-ul a revenit câteva clipe mai târziu, la fața locului I „MTIxMjY5MTAwNg ==“. Să-i dăm de încercare:

Cum pot fi prevenite acest lucru?

Astăzi, chiar și computerul cel mai de bază acasă, puteți utiliza miliardele de funcții hash în al doilea. Prin urmare, avem nevoie de o funcție hash care a generat cea mai mare valoare posibilă.

De exemplu, se poate folosi MD5 (), care genereaza 128-bit hash. Astfel, opțiunile de selecție devin mult mai 340.282.366.920.938.463.463.374.607.431.768.211.456. Kilometraj pe toate iterații nu este posibil să se găsească o coliziune. Cu toate acestea, unii oameni încă mai reușesc să găsească o „gaură“ mai multe despre asta aici).

SHA1 () este cea mai bună alternativă, deoarece returnează un hash de 160 de biți.

Chiar dacă ne-am ocupat de coliziuni, acest lucru nu înseamnă că se proteja de toate părțile.

Rainbow tabele sunt construite prin calcularea valorilor hash ale celor mai frecvent utilizate cuvinte și fraze.

Un astfel de tabel poate conține milioane și chiar miliarde de rânduri.

De exemplu, puteți merge pe jos prin dicționar și de a crea un hash pentru fiecare cuvânt pentru a crea un tabel. Puteți crea, de asemenea, pentru hash-uri combinații de cuvinte. Dar asta nu e tot; Puteți introduce, de asemenea, cifre înainte / după / între cuvinte, și, de asemenea, pentru a înregistra valoarea tabel hash.

Asta este astfel un imens tabele curcubeu pot fi compilate și utilizate.

Cum să-l folosească:

Să ne imaginăm că avem o bază în mâinile a zeci de mii de parole. Nu face prea mult efort pentru a le compara cu valorile din tabelele curcubeului. Desigur, nu toate parolele se potrivesc, dar în cele din urmă va exista un alt cuplu!

Cum se poate proteja:

Trebuie doar să adăugați „sare“:

Tot ce trebuie să faceți este să skonkatenirovat „sare“ și parola înainte de hashing. Aproape în tabelul de curcubeu, există o valoare. Dar suntem încă în pericol!

Amintiți-vă, tabele Rainbow poate fi format deja după ce baza va fi furat.

Cum să-l folosească?

Dacă ați creat o sare, acesta este furat de bază cade în mâini greșite. Tot ce trebuie să facă este de a genera un nou tabel curcubeu cu „sare“ pe care le-au primit de la baza de date.

De exemplu, în tabelul hash Rainbow are rânduri „easypassword“. Noile tabele curcubeu în loc de valorile anterioare acestea vor conține linia „f # @ V) Hu ^% Hgfdseasypassword“. Când se execută script-ul, puteți redobândi unele se suprapun.

Cum sa te protejezi?

Putem folosi „sare unic“, care va fi diferit pentru fiecare utilizator.

Adăugarea la sare, pentru a deveni un cod unic de utilizator poate fi:

Acest lucru în sine înseamnă că ID-ul utilizatorului nu se va schimba.

Putem genera, de asemenea, un șir aleatoriu pentru fiecare utilizator în parte, decât a obține „sare unică“. Această sare ar trebui să fie depozitate în același loc în care intrarea de utilizator.

Această metodă ne protejează de tabele curcubeu de la fiecare are propria sa parolă unică de sare. Un atacator ar trebui să creeze 10 milioane de tabele curcubeu individuale, care, în practică, nu este fezabilă.

Cele mai multe funcții hash sunt dezvoltate, având în vedere că acestea sunt adesea folosite pentru a calcula suma de control a unor valori sau fișiere cu integritate de verificare a datelor.

Cum să-l folosească?

Așa cum am spus mai devreme, un calculator cu o placă grafică puternică poate calcula miliarde de hash-uri pe secundă. Atacatorii pot folosi „brute force“, verificând fiecare parola posibile (efectuarea o căutare exhaustivă a tuturor opțiunilor posibile).

Dacă credeți că o parolă de 8 caractere poate rezista „atac brute“, vă rugăm să oferiți:

  • Dacă parola dvs. conține, litere și numere majuscule minuscule, este doar 62 (26 + 26 + 10) de caractere posibile.
  • Un șir de 8 caractere conține 62 ^ 8 combinații diferite. Este un pic mai mult de 218000000000000.
  • În cazul în care mânerul 1 miliard pe secundă hash, parola va fi preluat în decurs de 60 de ore.

Lungimea parolei de 6 caractere, aceeași operațiune va dura mai mult de 1 minut.

Nu ezitați să solicite parole de lungime 9 sau 10 caractere, chiar dacă le va irita.

Cum să-și apere?

Utilizați o funcție hash lent

Imaginați-vă că utilizați o funcție hash care generează 1 milion de hash-uri pe secundă în loc de 1 miliard de. Predetsya atacator de 1000 de ori mai mult timp pentru a ridica parole. 60 de ore transformat în 7 ani!

Prima opțiune este de a crea o funcție:

Sau puteți utiliza un algoritm care utilizează „parametrul de cost“, cum ar fi BLOWFISH. In PHP, acest lucru se poate realiza prin metoda criptă ().

Al doilea parametru în metoda criptă () conține valori separate semne dolar ($).

Prima valoare este „$ 2a“, care spune că vom folosi algoritmul Blowfish.

Al doilea sens al „$ 10“. În acest caz, este „opțiunea de cost.“ Acest parametru reprezintă numărul de iterații care trebuie efectuate (10 => 2 ^ 10 = 1024 iterații.) Valoarea poate fi 04-31.

Să facem un exemplu:

Ca rezultat, am apelat algoritm hash, care cuprinde ($ 2a), un parametru de cost ($ 10), și sare de 22 de caractere. Orice altceva este un hash. Suntem de testare:

Dacă avem, vom primi mesajul „Accesul este permis!“

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

De ce avem nevoie de o funcție hash, și cum să păstreze secretul parolele

Prin obținerea de informații de la două canale (vedere si auz) eficacitatea instruirii de învățare departe superioare de cărți. O temele pentru acasă și teste on-line vă va permite să se gândească în mod constant în limba țintă și imediat verifica cunoștințele!

De ce avem nevoie de o funcție hash, și cum să păstreze secretul parolele

De ce avem nevoie de o funcție hash, și cum să păstreze secretul parolele

Dacă doriți o lungă perioadă de timp pentru a studia modul în HTML, mi-ai, pentru ai vesti bune!

De ce avem nevoie de o funcție hash, și cum să păstreze secretul parolele

Dacă ați învățat deja HTML și doresc să avanseze, următorul pas va fi de a studia tehnologia CSS.

De ce avem nevoie de o funcție hash, și cum să păstreze secretul parolele

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