Trei abordări pentru parole care stochează explicate cu exemple.
Astăzi, aproape fiecare site trebuie să păstreze o listă de nume de utilizator și parole. Multe aplicații multi-utilizator necesită metoda de autentificare utilizator, parole și apar normale.
Cea mai simplă abordare - pur și simplu stoca
Cea mai simplă abordare pentru gestionarea numelor de utilizator și parole - toate stocate în text simplu (fără criptare și permutare a elementelor) într-un fișier sau bază de date. Rezultatul ar fi:
Plusuri stocați parole într-o formă necriptat
1. Autenticitatea de verificare (verifică dacă numele de utilizator și parola pereche coincide cu perechea în tabel) este foarte simplu - compară siruri de caractere!
2. parolele uitate pot fi restaurate - codul este disponibil imediat, dacă specificați un nume de utilizator.
Contra stocarea parolelor într-o formă necriptată
1. În primul rând, oricine are acces la dosar (sau este de natură să producă un eșantion din tabel) are acces imediat la toate parolele! Un angajat cu acces legitim la fișierul poate imprima fișierul sau trimite informații prin e-mail și - Voila! - toate parolele compromise.
2. A doua problemă este că, în timpul schimbului de informații de autentificare a se vedea parola pe rețea. Dacă toate nu utilizează comunicarea securizată, parola va fi vizibilă atunci când trece prin rețea. De exemplu, chiar dacă aplicația Web utilizează SSL (Secure Sockets Layer nivel) pentru a trimite o parolă, parola este încă vizibilă atunci când serverul de aplicații web selectează informații dintr-o bază de date la distanță. Rezultatele interogării sunt trimise prin rețea necriptat.
Este permis pentru a stoca parolele în text clar?
Apoi da, păstrați parolele într-o formă necriptat în mod normal.
criptare parola - un pic mai sigur
Cea mai bună abordare pentru stocarea parolelor (și singura alternativă rezonabilă, în cazul în care utilizatorii trebuie să fie capabil de a recupera parolele) - cripta parolele înainte de a le depozita.
Această abordare se bazează pe deținerea unui mister. Secret este algoritmul de criptare și cheia utilizată în combinație cu algoritm de criptare avansată.
Parola de criptare - operațiune reversibilă. Misterul parola utilizată pentru distorsiunea, și același mister poate fi folosit pentru a recupera parola originală. Atunci când utilizatorul setează o parolă, parola stocată este decriptat cu secretul, și parolele sunt comparate. O abordare alternativă - pentru a cripta parola furnizate de un secret și pentru a compara cele două versiuni distorsionate - o coincidență indică faptul că, având parola corectă.
În cazul în care utilizatorii au nevoie pentru a prelua parola, parola stocată este decriptat și livrate la utilizator (de obicei prin e-mail).
criptare Pro folosind secrete
1. Parolele pierdute sau uitate pot fi recuperate.
2. Doar un singur secret, (sau algoritmul cheie) ar trebui să fie depozitate în condiții de siguranță.
3. Pentru multi-user aplicații distribuite folosind criptarea trebuie transmise parola necriptată (pentru verificare) sau trebuie să treacă secretul pentru a efectua autentificarea pe client.
criptare parola Contra
1. În cazul în care secretul este compromis, toate parolele compromise. Dacă cineva are acces la secretul și pentru a stoca parole, parole pot fi decriptate!
2. acces numai la stocarea parolelor este suficient pentru a furniza informații despre parole, deoarece toate parolele sunt criptate folosind același algoritm. Dacă doi utilizatori au aceeași parolă criptată, de asemenea, ele trebuie să aibă aceeași parolă. hackeri Cunning cu acces la un depozit de parole pot crea utilizatori cu parole cunoscute și pentru a verifica pentru alți utilizatori cu aceeași parolă. Acest tip de atac este un tip de atac cunoscut plaintext. Un astfel de atac poate fi oprită prin sare (vezi mai jos).
3. Atunci când se utilizează o parolă cifru bloc trebuie să fie stocate într-o parte a parolei criptate. Este necesar să se păstreze lungimea, deoarece cifrul bloc dau întotdeauna un bloc de dimensiune fixă de text criptat. Dacă parola nu este criptat (de exemplu, dacă este depozitat ca o coloană din tabel), informațiile sunt foarte utile pentru spărgători parole. Cunoașterea exactă lungimea parolei simplifică foarte mult ghicirea parolei.
Este această soluție de stocare acceptabilă parola?
În cazul în care este necesară recuperarea parolei pierdute, da - este singura soluție acceptabilă. Câteva recomandări:
Stocarea parolelor trunchiată - decizie ireversibilă
O funcție hash criptografic este o funcție ireversibilă. Funcția hash preia datele de intrare de orice lungime și generează date unice de ieșire de lungime fixă. De exemplu, dacă parola (de orice lungime) este trunchiată MD5 funcție hash criptografice, rezultatul este numărul de 128 de biți unic corespunzător parola. criptografici sunt de lucru hashes nu numai parole - în cazul în care un hash criptografic al celor două fișiere este identică, cele două fișiere sunt identice.
În ultimii ani, datorită creșterii puterii de calcul, unele funcții hash criptografice nu mai este recomandată utilizarea (MD4, MD5, SHA1). Cu toate acestea, utilizarea lor este acceptabil pentru hash parole. Sau modificați codul astfel încât acesta utilizează SHA-2.
La stocarea parolei parole hash trunchiată (forțat prin algoritmul hash), iar hash rezultată este stocată în locul parolei. Pentru a compara parolele zaheshiruyte specificate parola folosind aceeași funcție hash și comparați rezultatele. În cazul în care se potrivesc hash, parolele se potrivesc.
Frumusetea unei funcții ireversibile constă în faptul că este imposibil să se calculeze pe baza de parola pe hash. parole trunchiată nu sunt rezistente la brute-force atac - în cazul în care hash parola și un atacator dicționar poate calcula tuturor hash cuvintele într-un dicționar pentru a compara cuvinte cu hash parola și de a afla parola. parolă puternică (care conține litere, cifre și caractere speciale) ajuta la protejarea împotriva atacurilor brute force.
Pro magazin trunchiată parole
1. Parola necriptat originală nu este stocat deloc. Chiar dacă o parolă este compromisă de stocare, numai hash-uri sunt disponibile în mod public.
2. Parola nu este stocată și nu poate fi estimată, ceea ce face foarte dificilă parola hacking.
3. Nu au nevoie de un mister, deoarece nici un mister nu este folosit pentru a hash parola.
4. Pentru multi-user aplicații hash parola distribuite pot fi folosite pentru autentificare. Dacă utilizați criptarea trebuie să treacă parola necriptate (pentru verificare) sau trebuie să treacă secretul pentru a efectua autentificarea pe client.
Contra stocarea parolelor trunchiată
1. parolele pierdute nu pot fi restaurate (dar de a utiliza metodele brute force). Noua parolă este necesară pentru a crea și trimite utilizatorului.
2. În ceea ce privește parola criptate atunci când nu utilizați sare (vezi mai jos), utilizatorii au aceeași parolă va avea aceeași parolă hash.
Este această soluție de stocare acceptabilă parola?
Da, dar următoarele orientări:
Depozitarea lungimea parolei - de ce și cum
De ce este necesar pentru a stoca lungimea parolei?
lungimea parolei este necesară numai atunci când criptarea și decriptarea parola folosind un cifru bloc. Multe cifrurile bloc au o dimensiune a blocului de 64 de biți - dimensiunea datelor criptate este un multiplu de 8 octeți. 12 byte parola de criptare de ieșire 16 bytes voință. Când descifrarea rezultatul 16 byte este un șir de 16 octeți de gunoi în ultimele 4 octeți. Dacă lungimea parolei stocată, excesul poate fi îndepărtat cu parola plus decriptare. Fara a inlatura orice încercare de a compara linia primitivă nu - parola de 12 caractere nu coincide cu parola din 16 caractere decriptat. Încercarea de a compara parolele criptate pentru a verifica pentru un meci poate da gres, deoarece in plus 4 adăugări octeți pot diferi de criptare pentru criptare.
Hashing nu necesită o anumită lungime a parolei - 12 caractere parola folosind hash SHA-2 produce întotdeauna o putere de 320 de biți, și hash aceeași parolă dă întotdeauna la ieșire aceleași 320 de biți.
Atunci când se utilizează un algoritm de criptare, cum ar fi ROT13 (nu este recomandat), lungimea parolei criptate coincide cu parola de lungimea inițială. Oricine are acces la stocarea parolelor poate obține atunci lungimea parolei. Dacă decideți să utilizați algoritmul de criptare sau un cifru flux (spre deosebire de un cifru bloc), asigurați-vă că pentru a completa cu datele de ieșire pentru a ascunde lungimea parolei.
Cum pot stoca lungimea parolei?
O soluție - de a păstra lungimea parolei ca o coloană din tabel. Dezavantajul acestei abordări este că, dacă un hacker avea acces la datele, valoarea lungimii parolei facilitează foarte mult atac brute force. Știind că parola dvs. conține un total de 5 caractere, care permite hacker pentru a limita numărul de încercări de ghicirea parolei necesare pentru a sparge parola.
O soluție mai bună - de a păstra lungimea parolei ca parte din șirul criptat. lungimea parolei poate fi adăugat la începutul șirului parolei (de exemplu, primele două caractere). În descifrarea parola în primele două caractere restaurate lungimea și parola sunt tăiate în siguranță. Lungimea de stocare, criptat cu o parolă asigură că nimeni nu poate avea acces la lungimea parolei, fără cunoașterea secretelor utilizate pentru a cripta parola.
Exemplu - Lungimea de stocare și parole circumcizie
magazin mesaj cu o lungime:
Recuperarea mesajelor dintr-o matrice binar:
Sărarea - Sare îmbunătățește gustul tuturor
Hashing (sau criptare) din aceeași parolă pentru doi utilizatori dă același rezultat. repetitivă informații pot fi folosite cu rea intenție pentru a obține parole. Un utilizator cu acces la stocarea parolelor poate seta propria parolă într-un cuvânt de dicționar, apoi scanați stocarea de parole pe prezența unui alt utilizator cu aceeași trunchiată sau parola criptate. Atunci când se constată o potrivire parola utilizatorului este compromisă.
Un simplu sărare - utilizarea bucății date suplimentare
Pentru a evita problema de mai sus poate introduce unele variații în tocare (algoritmul sau criptare). De exemplu, dacă la început să se alăture parola de conectare, trunchiată sau un rezultat criptat nu va fi la fel mai.
Desigur, Bob și Eva au aceeași parolă. Chiar mai rău, în cazul în care un atacator pentru a obține stoca parola, hacker-ul va fi capabil de a pre-calcula hash pentru întregul dicționar pentru a căuta meciuri în stocarea de parole, în mare măsură accelerarea procesului de rupere.
Dacă adăugați datele de conectare în combinație:
Acum, Bob și Eva au diferite parolele HASH. În cazul în care un hacker devine rost de bolta parolei, iar acum hacker ar trebui să calculeze hash pentru fiecare parolă în mod specific pentru fiecare utilizator. Un hacker ar trebui să pre-calcula hash dicționarului cu prefixul lui Bob și prefixate cu Evei „Bob“. „Eva.“ - nu este o sarcină ușoară.
sărare avansat - utilizarea informațiilor aleatorii
Utilizarea sărurilor parole aleatorii îmbunătățește foarte mult puterea de criptare și complică foarte mult enumerare de rupere.
Pentru a utiliza sarea aleatorie a acestuia, se calculează un număr aleator și utilizați numărul aleatoriu ca o componentă în calcularea unui hash sau criptare. Stocați număr aleatoriu într-o bază de date coloană care numărul a fost mai târziu disponibil cu verificarea parolei.
Când salvați inițial parola pentru Bob:
1. Se calculează numerele aleatoare (folosiți un puternic generator de aleatoriu criptografic, cum ar fi în System.Security.Cryptography).
2. Adăugați un număr aleatoriu la prompt parola.
3. Calculati hash și cripta șirul rezultat.
4. Salvare hash sau rezultatul de criptare și numărul aleatoriu în stocarea parolei.
Atunci când se compară parolele să urmeze același algoritm:
1. Ia un număr aleator de la magazin parola.
2. Adăugați un număr aleatoriu la prompt parola.
3. Calculati hash și cripta șirul rezultat.
4. Comparați rezultatul cu hash stocate sau criptate potrivire parole înseamnă potrivire parole.
Folosind un număr aleatoriu, mai degrabă decât utilizarea de conectare. Conectări nu sunt întâmplătoare - respectă regulile foarte stricte. Numerele aleatoare (care provine de la un generator de încredere număr aleator criptografic) să introducă o mai mare dezordine în hash ca rezultat sau date de ieșire criptate. Rețineți că, dacă sarea utilizată de conectare, datele de conectare nu poate fi schimbat deloc. Când modificați hash de conectare devine nevalid.
Codificarea datelor binare de ieșire în formă de text
Date rezultate din funcțiile hash și algoritmi de criptare binare. Pentru a stoca date binare în formă de șiruri de text pot fi date codificate.
Două scheme de codificare populare - UUEncode (popular în lumea Unix) și Base64 (de popular peste tot). Base64 - schema de codificare utilizată pentru a converti atașamentele binare pentru a trimite e-mail prin SMTP (Simple Mail Transfer Protocol).
Exemplu - codifică șirul binar în matrice
Exemplu - decodificare într-o matrice șir binar
algoritmi de criptare și exemple
.NET Framework (System.Security.Cryptography) include suport nativ pentru mai mulți algoritmi de criptare:
• DES - un vechi, dezafectate.
• TripleDES - vechi, dar încă persistente.
• RC2 - vechi, dar încă util.
• Rijndael (AES) - o modernă.
codificare line - Exemplu:
Exemplu - decodificare linii:
algoritmi Hash și exemple
.NET Framework (System.Security.Cryptography) include suport nativ pentru mai multe funcții hash criptografice:
Exemplu - hashing șirul:
EXEMPLU - Compararea a două hashes la egalitate:
concluzie
Aveți deja suficiente informații pentru a lua decizii în cunoștință de cauză cu privire la stocarea de parole.
• Dacă aveți nevoie pentru a recupera parolele, utilizați criptare.
• Dacă nu aveți pentru a recupera parolele folosind hash-uri (mai sigur).
• Ce ai face, adăugați sare la parole.
• Proiectul Descărcați demo - 5.26 Kb • Descărcare sursă - 12.2 Kb Introducere Este de remarcat faptul că metoda prezentată poate fi extins pentru a găzdui mai multe opțiuni cu bariere permanente. După ce a studiat un exemplu simplu, trece la opțiuni mai complicate pentru a schimba în timp.
• Codul de descărcare sursă - 251 KB • proiect Descarca Demo - 181 Kb Introducere Istoria rețelelor neuronale începe în anii 1950. când a fost prezentat arhitectura cea mai simplă rețele neuronale. După lucrările inițiale pe ideea rețelelor neuronale a devenit destul de popular. Dar apoi zona.