Generador i verificador de bcrypt
Genera un hash de bcrypt amb un factor de cost de 4 a 14, comprova una contrasenya amb un hash existent i consulta'n la versió, el cost, la sal i el resum.
Calcula el hash d'una contrasenya
- Versió
- Cost
- Sal (22 caràcters)
- Hash (31 caràcters)
Comprova una contrasenya amb un hash
- Versió
- Cost
- Sal (22 caràcters)
- Hash (31 caràcters)
Com calcular el hash d’una contrasenya amb bcrypt
- A Calcula el hash d’una contrasenya, escriu la Contrasenya. Un comptador en mostra la longitud en bytes UTF-8 i t’avisa quan passa dels 72 bytes.
- Tria el Factor de cost (4–14). La línia de sota mostra el nombre de rondes, per exemple 10 → 2^10 = 1024 rondes.
- Fes clic a Genera el hash. Una barra de progrés segueix la feina i la pàgina continua sent utilitzable mentre s’executa. Quan acaba, l’eina mostra el temps que ha trigat i el Hash de bcrypt, a punt per copiar.
- El hash es divideix en les seves parts: Versió, Cost, Sal (22 caràcters) i Hash (31 caràcters).
Per comprovar una contrasenya amb un hash, escriu la contrasenya, enganxa el hash (el que acabes de generar s’omple automàticament) i fes clic a Comprova la contrasenya. El resultat indica si coincideixen. Marca Amaga les contrasenyes per emmascarar els dos camps de contrasenya.
El càlcul del hash s’executa al teu navegador amb la biblioteca bcryptjs, que només es carrega quan la necessites per primera vegada. No s’envia enlloc cap contrasenya ni cap hash.
Com funciona bcrypt
bcrypt (Provos i Mazières, 1999) és una funció de hash de contrasenyes basada en el xifratge Blowfish. A diferència de SHA-256, és deliberadament lenta, i la seva lentitud és ajustable: el factor de cost és una potència de dos, de manera que cada +1 duplica la feina. Un cost de 10 vol dir 1024 iteracions de la costosa configuració de clau; un cost de 12, 4096. Aquesta lentitud gairebé no es nota quan un usuari inicia sessió, però fa que provar totes les combinacions sobre una base de dades robada sigui molt més car.
Un hash com $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy es llegeix així:
$2b$: la versió.$2a$i$2y$(PHP) són compatibles i es poden comprovar aquí;$2x$marca els hash d’una implementació antiga amb errors i es rebutja.10: el factor de cost.- Els 22 caràcters següents: una sal aleatòria de 128 bits, en l’alfabet propi de Base64 de bcrypt (
./A-Za-z0-9). - Els últims 31 caràcters: el resultat de 184 bits.
Com que la sal és aleatòria i es desa dins del hash, calcular dues vegades el hash de la mateixa contrasenya dona dos hashos diferents, i tots dos es verifiquen correctament. Per això una contrasenya es comprova amb una funció de verificació i no pas comparant hashos.
Com triar el cost
Tria el cost més alt que el teu servidor es pugui permetre mantenint ràpids els inicis de sessió, normalment al voltant d’un quart de segon per hash. OWASP recomana un cost mínim de 10 per a bcrypt. Els navegadors executen bcrypt en JavaScript, que és diverses vegades més lent que una implementació nativa en un servidor: a partir d’un cost de 12 l’eina avisa que el càlcul pot trigar d’un a diversos segons, i cada pas addicional duplica el temps. La feina es reparteix en porcions curtes, de manera que la pàgina no es bloqueja.
Per als sistemes nous, OWASP prefereix ara Argon2id, i bcrypt continua sent acceptable quan Argon2id no està disponible.
El límit de 72 bytes
bcrypt només fa servir els primers 72 bytes de la contrasenya; tot el que ve després s’ignora en silenci. Els bytes no són caràcters: una lletra amb accent ocupa 2 bytes en UTF-8 i un emoji en ocupa 4. Dues contrasenyes llargues que comparteixen els primers 72 bytes produeixen el mateix hash. El comptador de bytes t’avisa quan una contrasenya és massa llarga. Alguns sistemes calculen un hash previ de les contrasenyes llargues (per exemple amb HMAC-SHA256 i després Base64) abans de passar-les a bcrypt; si ho fas, no passis mai resums binaris en brut, perquè en moltes implementacions un byte zero acabaria la contrasenya abans d’hora.
Preguntes freqüents
Per què la mateixa contrasenya dona un hash diferent cada vegada?
Cada hash rep una sal aleatòria nova, que es desa dins del mateix hash. El botó Comprova la contrasenya llegeix la sal i el cost del hash i el torna a calcular, de manera que totes les versions es verifiquen.
Es pot desxifrar un hash de bcrypt?
No. bcrypt és una funció unidireccional. L’única manera de recuperar una contrasenya és endevinar-la i calcular el hash de cada intent, que és justament el que el factor de cost fa lent.
Quin factor de cost he de fer servir?
Almenys 10, i més si el teu servidor continua anant prou ràpid. Mesura-ho al maquinari de producció: el temps que es mostra aquí reflecteix JavaScript al teu navegador, que normalment és més lent que un servidor.
Els hashos $2a$, $2b$ i $2y$ són intercanviables?
Per a contrasenyes de menys de 256 bytes donen el mateix resultat, i aquesta eina comprova els tres. $2b$ va corregir un error de desbordament de longitud a la implementació d’OpenBSD, i $2y$ és el nom que PHP dona a una implementació correcta.
És segur escriure aquí una contrasenya real?
Tot s’executa localment i no s’envia ni es desa res. Per a comptes reals, tot i així és bona pràctica fer proves amb una contrasenya d’exemple i no amb una que facis servir.
Eines relacionades
- Generador de hash (MD5, SHA-256) Genera hashos MD5, SHA-1, SHA-256 i SHA-512 de text o de fitxers de qualsevol mida i verifica sumes de verificació. Tot s'executa al navegador.
- Generador de contrasenyes Generador de contrasenyes gratuït que crea contrasenyes aleatòries fortes de 4 a 128 caràcters al navegador amb un generador segur. No es desa ni s'envia res.
- Comprovador de la fortalesa de contrasenyes Comprova com de forta és la teva contrasenya: puntuació, temps estimat per desxifrar-la en quatre escenaris d'atac i consells, tot en local.
- Generador d'HMAC Calcula un HMAC-SHA1, SHA-256, SHA-384 o SHA-512 amb una clau en text, hex o Base64, obtén la sortida en hex i Base64 i comprova un webhook al navegador.