Bcrypt-generator og -kontroll
Lag en bcrypt-hash med kostnadsfaktor fra 4 til 14, kontroller et passord mot en eksisterende hash og se versjon, kostnad, salt og hashverdi.
Hash et passord
- Versjon
- Kostnad
- Salt (22 tegn)
- Hash (31 tegn)
Kontroller et passord mot en hash
- Versjon
- Kostnad
- Salt (22 tegn)
- Hash (31 tegn)
Slik hasher du et passord med bcrypt
- Under Hash et passord skriver du inn Passord. En teller viser lengden i UTF-8-byte og advarer deg når den går over 72 byte.
- Velg Kostnadsfaktor (4–14). Linjen under viser antall runder, for eksempel 10 → 2^10 = 1 024 runder.
- Klikk Generer hash. En fremdriftslinje følger arbeidet, og siden kan brukes mens det pågår. Når det er ferdig, viser verktøyet tiden det tok og Bcrypt-hash, klar til å kopieres.
- Hashen deles opp i delene Versjon, Kostnad, Salt (22 tegn) og Hash (31 tegn).
For å kontrollere et passord mot en hash skriver du inn passordet, limer inn hashen (den du nettopp laget, fylles ut automatisk) og klikker Kontroller passord. Resultatet forteller om de samsvarer. Huk av for Skjul passord for å skjule begge passordfeltene.
Hashingen kjører i nettleseren din med biblioteket bcryptjs, som lastes først når du trenger det. Ingen passord og ingen hash sendes noe sted.
Slik fungerer bcrypt
bcrypt (Provos og Mazières, 1999) er en passordhashfunksjon bygget på Blowfish-chifferet. I motsetning til SHA-256 er den med vilje treg, og tregheten kan justeres: kostnadsfaktoren er en toerpotens, så hvert trinn opp dobler arbeidet. Kostnad 10 betyr 1 024 iterasjoner av den kostbare nøkkeloppsettingen, kostnad 12 betyr 4 096. Tregheten merkes knapt når en bruker logger inn, men den gjør det mye dyrere å knekke en stjålet database med rå makt.
En hash som $2b$10$N9qo8uLOickgx2ZMRZoMyeIjZAgcfl7p92ldGxad68LJZdL17lhWy leses slik:
$2b$: versjonen.$2a$og$2y$(PHP) er kompatible og kan kontrolleres her.$2x$markerer hasher fra en gammel implementasjon med feil og avvises.10: kostnadsfaktoren.- De neste 22 tegnene: et tilfeldig 128-bits salt i bcrypts eget Base64-alfabet (
./A-Za-z0-9). - De siste 31 tegnene: resultatet på 184 biter.
Fordi saltet er tilfeldig og lagres i hashen, gir hashing av samme passord to ganger to ulike hasher, og begge kan verifiseres. Derfor kontrollerer du et passord med en verifiseringsfunksjon i stedet for å sammenligne hasher.
Velg kostnad
Velg den høyeste kostnaden serveren din har råd til uten at innloggingen blir treg, typisk rundt et kvart sekund per hash. OWASP anbefaler minst kostnad 10 for bcrypt. Nettlesere kjører bcrypt i JavaScript, som er flere ganger tregere enn en innebygd serverimplementasjon: fra kostnad 12 advarer verktøyet om at hashing kan ta fra ett til flere sekunder, og hvert ekstra trinn dobler tiden. Arbeidet deles i korte stykker, så siden fryser ikke.
For nye systemer foretrekker OWASP nå Argon2id, mens bcrypt fortsatt er akseptabelt der Argon2id ikke er tilgjengelig.
Grensen på 72 byte
bcrypt bruker bare de første 72 bytene av passordet, og alt etter det ignoreres uten melding. Byte er ikke tegn: en bokstav med aksent tar 2 byte i UTF-8, og en emoji tar 4. Norske tegn som æ, ø og å tar 2 byte hver. To lange passord som har de første 72 bytene felles, gir samme hash. Telleren advarer deg når et passord er for langt. Noen systemer forhasher lange passord (for eksempel med HMAC-SHA256 og deretter Base64) før bcrypt. Hvis du gjør det, må du aldri sende rå binære hashverdier, fordi en nullbyte avslutter passordet for tidlig i mange implementasjoner.
Ofte stilte spørsmål
Hvorfor gir samme passord ulik hash hver gang?
Hver hash får et nytt tilfeldig salt, som lagres inne i hashen. Knappen Kontroller passord leser saltet og kostnaden fra hashen og beregner den på nytt, så alle versjoner kan verifiseres.
Kan en bcrypt-hash dekrypteres?
Nei. bcrypt er en enveisfunksjon. Den eneste måten å finne et passord på er å gjette det og hashe hvert forsøk, og det er nettopp det kostnadsfaktoren gjør tregt.
Hvilken kostnadsfaktor bør jeg bruke?
Minst 10, og høyere hvis serveren din fortsatt er rask nok. Mål på produksjonsmaskinvaren din: tiden som vises her, gjelder JavaScript i nettleseren din, som vanligvis er tregere enn en server.
Er $2a$-, $2b$- og $2y$-hasher utskiftbare?
For passord under 256 byte gir de samme resultat, og dette verktøyet kontrollerer alle tre. $2b$ rettet en feil med lengdeoverflyt i OpenBSDs implementasjon, og $2y$ er PHPs navn på en korrekt implementasjon.
Er det trygt å skrive inn et ekte passord her?
Alt kjører lokalt, og ingenting sendes eller lagres. For ekte kontoer er det likevel lurt å teste med et eksempelpassord i stedet for et du bruker.
Relaterte verktøy
- Hash-generator Lag MD5-, SHA-1-, SHA-256- og SHA-512-hasher av tekst eller filer i alle størrelser, og kontroller sjekksummer. Alt kjører i nettleseren din.
- Passordgenerator Gratis passordgenerator som lager sterke tilfeldige passord på 4 til 128 tegn i nettleseren med sikker tilfeldighet. Ingenting lagres eller sendes.
- Passordstyrke-sjekker Test hvor sterkt passordet ditt er. Se poengsum, anslått knekketid i fire angrepsscenarioer og konkrete tips, alt sjekket lokalt i nettleseren din.
- HMAC-generator Beregn HMAC-SHA1, SHA-256, SHA-384 eller SHA-512 med tekst-, hex- eller Base64-nøkkel, få hex- og Base64-utdata og kontroller en webhook-signatur i nettleseren.