Ce tip de date pentru a utiliza pentru parola hash domeniu si ce lungime?

Am'm nu sunt sigur cum hash parola de lucrări (va fi o punere în aplicare mai târziu), dar au nevoie pentru a crea schema de baze de date acum.

Am'm gândesc limitarea parole pentru a 4-20 personaje, dar după cum am înțeles, după criptare hash șir va fi de lungimi diferite.

Deci, cum de a stoca parolele în baza de date?

Comentarii la întrebare (5)
Soluția

Update: pur și Simplu, folosind o funcție hash nu este suficient de puternic pentru stocarea parolelor. Ar trebui să citiți răspuns la Gilles de pe acest thread pentru o explicație mai detaliată.

Pentru parole, utilizați o cheie-consolidarea algoritm hash ca Bcrypt dll sau Argon2i. De exemplu, în PHP, utilizați password_hash funcția (), care utilizează Bcrypt în mod implicit.

$hash = password_hash("rasmuslerdorf", PASSWORD_DEFAULT);

Rezultatul este un 60-șir de caractere similare la următoarele (dar cifrele vor varia, pentru că generează un unic sare).

$2y$10$.vGA1O9wmRjrwAVXD98HNOgsNpDczlqm3Jq7KnEd1rVAGv3Fykk1a

Utilizați SQL de date de tip CHAR(60)` pentru a stoca această codificare de un Bcrypt hash. Notă această funcție nu't codifica ca un șir de cifre hexazecimale, astfel încât să putem't la fel de ușor unhex pentru a stoca în binar.

Alte funcții hash încă folosește, dar nu pentru stocarea parole, așa că am'll keep original răspunsul de mai jos, scris în 2008.


Depinde de algoritm hash utilizați. Hashing produce întotdeauna un rezultat de aceeași lungime, indiferent de intrare. Este tipic pentru reprezentarea binar hash rezultat în text, ca o serie de cifre hexazecimale. Sau puteți folosi UNHEX() funcția de a reduce un șir de cifre hexazecimale de jumătate.

  • MD5 generează un 128-bit valoarea hash. Puteți folosi CHAR(32) sau BINAR(16)
  • SHA-1 generează un 160-bit valoarea hash. Puteți folosi CHAR(40) sau BINAR(20)
  • SHA-224 generează o 224-bit valoarea hash. Puteți folosi CHAR(56) sau BINAR(28)
  • SHA-256 generează un 256-bit valoarea hash. Puteți folosi CHAR(64) sau BINAR(32)
  • SHA-384 generează un 384-bit valoarea hash. Puteți folosi CHAR(96) sau BINAR(48)
  • SHA-512 generează un 512-bit valoarea hash. Puteți folosi CHAR(128) sau BINAR(64)
  • BCrypt generează un dependente de implementare 448-bit valoarea hash. S-ar putea nevoie CHAR(56), CHAR(60) CHAR(76), BINARE(56) sau BINAR(60)

Ca de 2015, NIST recomandă utilizarea SHA-256 sau mai mare pentru orice aplicații de funcții hash care necesită interoperabilitate. Dar NIST nu se recomanda utilizarea acestor simple funcții hash pentru stocarea parolele în siguranță.

Mai mică algoritmi hash au utilizările lor (ca intern la o cerere, nu pentru schimb), dar acestea sunt cunoscute a fi susceptibilă la atacuri]6.

Comentarii (30)

Puteți folosi de fapt, CHAR(lungime de hash) pentru a defini tipul de date MySQL pentru fiecare algoritm hash va evalua întotdeauna la același număr de caractere. De exemplu, SHA1 se întoarce mereu un 40-personaj număr hexazecimal.

Comentarii (1)

S-ar putea găsi acest articol Wikipedia pe sărare util. Ideea este de a adăuga un set de date la intamplare valoarea hash; acest lucru va proteja parolele din atacurilor de dicționar, dacă cineva obține acces neautorizat la hash-uri de parole.

Comentarii (3)

Ca un string lungime fixă (VARCHAR(n) sau cu toate acestea MySQL numește). Un hash are întotdeauna o lungime fixă, de exemplu, 12 caractere (în funcție de algoritmul hash utilizați). Deci un 20 char parola va fi redus la 12 char hash, și un 4 char parola ar genera, de asemenea, un 12 char hash.

Comentarii (1)

Folosiți întotdeauna o parola hash algoritm: Argon2, scrypt, bcrypt sau PBKDF2.

Argon2 a castigat 2015 hash parola de concurență. Scrypt, bcrypt și PBKDF2 sunt mai vechi algoritmi care sunt considerate mai puțin preferate acum, dar încă în mod fundamental de sunet, astfel încât în cazul în care platforma nu't suport Argon2 încă, l's ok pentru a utiliza un alt algoritm pentru acum.

Nu depozitați o parola direct într-o bază de date. Don't cripta, fie: în caz contrar, dacă site-ul va fi perforat, atacatorul devine cheia de decriptare și deci se pot obține toate parolele. Parolele TREBUIE să fie hashed.

Un password hash are proprietăți diferite de la un tabel hash hash sau un hash criptografic. Nu utilizați niciodată un obișnuit hash criptografice, cum ar fi MD5, SHA-256 sau SHA-512 pe o parolă. O parola hash algoritm foloseste o salt, care este unic (nu este folosit pentru orice alt utilizator sau în oricine altcineva's de date). Sarea este necesar, astfel încât atacatorii pot't doar pre-calcula hash-uri de parole comune: cu sare, ele trebuie să reporniți de calcul pentru fiecare cont. O parola hash algoritm este intrinsically slow — cât de încet puteți permite. Lentoarea doare atacatorul mult mai mult decât tine, pentru că atacatorul trebuie să încerce de mai multe parole diferite. Pentru mai multe informații, consultați Modul de siguranță, hash parole.

Un hash parola codifică patru bucăți de informații:

  • Un indicator de care algoritm este folosit. Acest lucru este necesar pentru agilitate: criptografice recomandări schimba de-a lungul timpului. Aveți nevoie pentru a fi capabil a trecerea la un nou algoritm.
  • O dificultate sau duritate indicator. Cel mai mare această valoare, cu atât mai de calcul este necesar pentru a calcula hash. Acest lucru ar trebui să fie o constantă sau o configurare globală valoare în schimbare parolă funcție, dar acesta ar trebui să crească de-a lungul timpului ca și calculatoare obține mai repede, astfel încât aveți nevoie să vă amintiți valoare pentru fiecare cont. Unii algoritmi au o singură valoare numerică, altele au mai multe parametri (de exemplu, pentru a regla utilizarea PROCESORULUI și memorie RAM de utilizare separat).
  • Sare. De sare trebuie să fie unice la nivel global, trebuie să fie stocate pentru fiecare cont. Sare ar trebui să fie generate în mod aleatoriu la fiecare schimbare a parolei.
  • Hash corespunzătoare, și anume producția de calcul matematic în algoritm hash.

Multe biblioteci include o pereche de funcții convenabil pachete această informație ca un singur șir: una care ia algoritmul indicator, indicator de duritate și parola, generează aleator un salt și se întoarce plin hash șir; și una care are o parolă și plin hash șir ca intrare și returnează un boolean care indică dacă parola este corectă. Nu's nici un standard universal, dar o comună de codare este

$algorithm$parameters$salt$output

în cazul în care algoritm este un număr sau un scurt șir alfanumeric de codare alegerea de algoritm, parametrii este un tipărit șir, și sare și ieșire sunt codificate în Base64 fără încetare =.

16 bytes sunt suficiente pentru sare și de ieșire. (A se vedea de exemplu recomandări pentru Argon2.) Codificat Base64, ca's 21 de caractere fiecare. Celelalte două părți depinde de algoritmul și parametri, dar 20-40 personajele sunt tipice. Ca's un total de aproximativ 82 de caractere ASCII (CHAR(82), și nu este nevoie pentru Unicode), la care ar trebui să adăugați o marjă de siguranță dacă tu crezi că-l's va fi dificil pentru a mări câmpul de mai târziu.

Dacă codarea hash într-un format binar, puteți obține până la 1 octet pentru algoritm, 1-4 bytes pentru duritate (dacă hard-codul unele dintre parametrii), și 16 bytes pentru fiecare sare și de ieșire, pentru un total de 37 bytes. Spune 40 bytes (BINAR(40)`) să aibă cel puțin o pereche de rezervă bytes. Rețineți că acestea sunt de 8-biți și bytes, nu caractere imprimabile, în special în domeniul pot include null bytes.

Rețineți că lungimea de hash este complet independentă de lungimea parolei.

Comentarii (0)

Hash-uri sunt o secvență de biți (128 de biți, 160 de biti, 256 biti, etc., în funcție de algoritm). Coloana ta ar trebui să fie binar scris, nu text/personaj-scris, dacă MySQL permite (SQL Server tip de date este binar(n) " sau " varbinary(n)`). Ar trebui, de asemenea, sare de hash. Sărurile pot fi text sau binar, și veți avea nevoie de o coloana corespunzătoare.

Comentarii (3)

Ar trebui să utilizați "TEXT" (stocarea număr nelimitat de caractere) de dragul înainte de compatibilitate. Algoritmi hash (trebuie să) a deveni mai puternic în timp și, astfel, acest câmp de baze de date va trebui să sprijine mai multe personaje de-a lungul timpului. În plus, în funcție de strategia de migrare poate fi necesar pentru a stoca noi și vechi hash-uri în același domeniu, atât de fixare lungimea la un singur tip de hash nu este recomandată.

Comentarii (0)

Este într-adevăr depinde de algoritm hash-ai're folosind. Lungimea parolei are puțin de a face cu o lungime de hash, dacă îmi amintesc corect. Uită-te în sus specificatiile de pe hash algoritm pe care îl utilizați, rula câteva teste, și trunchia de mai sus doar că.

Comentarii (0)

Am'am testat întotdeauna să găsească MAX string lungime de un string criptat și a stabilit ca numărul de caractere de tip VARCHAR. În funcție de cât de multe înregistrări tine're de gând să aibă, s-ar putea chiar ajuta dimensiunea bazei de date.

Comentarii (0)

pentru md5 vARCHAR(32) este necesar. Pentru cei care utilizează AES mai bine să utilizați varbinary.

Comentarii (1)