Hvorfor ikke bare SHA-256?
En vanlig kryptografisk hash som er det rette verktøyet for integritet, men det feil verktøyet for å lagre passord, og grunnen er nettopp egenskapen som gjør den god andre steder: den er rask. En angriper som stjeler en database med SHA-256-passordhasher, kan prøve milliarder av gjetninger i sekundet på vanlig maskinvare, fordi hver gjetning bare er én rask hash. Vanlige passord faller nesten umiddelbart. Hastighet, dyden ved en allmennhash, er her en ulempe.
Passordlagring krever en hash som er bevisst treg og motstandsdyktig mot spesialisert maskinvare. Tre byggesteiner får det til å virke: salting, en justerbar arbeidsfaktor og minnehardhet.
Salting: å beseire forhåndsberegning
Et salt er en unik tilfeldig verdi som lagres ved siden av hver passordhash og blandes inn i hashingen. Uten salt gir identiske passord identiske hasher, så en angriper kan forhåndsberegne en gigantisk tabell over hasher for vanlige passord én gang (en "rainbow table") og slå opp hvert treff umiddelbart. Et unikt salt per passord gjør den forhåndsberegningen verdiløs: angriperen må angripe hver hash for seg, og det samme passordet hashes forskjellig for hver bruker. Moderne passordhashfunksjoner genererer og lagrer saltet for deg.
Arbeidsfaktor: å gjøre hver gjetning kostbar
En arbeidsfaktor (eller kostnadsparameter) styrer hvor mye beregning hver hash krever. Still den inn slik at én hash er treg nok til å være umerkelig ved en legitim innlogging (noen hundre millisekunder), men straffende i stor skala. Siden det er en parameter, kan du heve den gjennom årene etter hvert som maskinvaren blir raskere, og holde kostnaden ved å gjette omtrent konstant. Dette er knappen en allmennhash rett og slett ikke har.
De tre standardvalgene
- bcrypt er det langvarige, godt forståtte alternativet, bygd på Blowfish-chifferet med en konfigurerbar kostnadsfaktor. En trygg standard der det er tilgjengelig.
- scrypt legger til minnehardhet: den forbruker bevisst en justerbar mengde minne, noe som bremser angripere som bruker GPU-er og spesialbrikker, siden disse skalerer beregning langt billigere enn minne.
- Argon2 vant Password Hashing Competition i 2015 og er den nåværende anbefalingen for nye systemer. Den er minnehard med separate knapper for minne, tid og parallellitet; varianten Argon2id er det vanlige valget.
Hvilken som helst av disse er et fornuftig valg; den kardinale regelen er å bruke én av dem, aldri en bar rask hash, og aldri å finne opp sin egen ordning.
Konklusjonen
Bruk SHA-256 (i Hash-verktøyet) for kontrollsummer og integritet, der hastighet er en fordel. For passord, grip etter bcrypt, scrypt eller Argon2, der treghet og minnekostnad er hele poenget. De to oppgavene ser like ut og krever motsatte verktøy.