Varför inte bara SHA-256?

En vanlig kryptografisk hash som är rätt verktyg för integritet, men fel verktyg för att lagra lösenord, och skälet är just egenskapen som gör den bra på andra håll: den är snabb. En angripare som stjäl en databas med SHA-256-lösenordshashar kan testa miljarder gissningar per sekund på vanlig hårdvara, eftersom varje gissning bara är en snabb hash. Vanliga lösenord faller nästan omedelbart. Hastighet, dygden hos en allmän hash, är här en nackdel.

Lösenordslagring kräver en hash som är avsiktligt långsam och motståndskraftig mot specialiserad hårdvara. Tre byggstenar får det att fungera: saltning, en justerbar arbetsfaktor och minneshårdhet.

Saltning: att besegra förberäkning

Ett salt är ett unikt slumpvärde som lagras bredvid varje lösenordshash och blandas in i hashningen. Utan salt ger identiska lösenord identiska hashar, så en angripare kan förberäkna en jättelik tabell med hashar för vanliga lösenord en gång (en "rainbow table") och slå upp varje träff omedelbart. Ett unikt salt per lösenord gör den förberäkningen värdelös: angriparen måste angripa varje hash för sig, och samma lösenord hashas olika för varje användare. Moderna lösenordshashfunktioner genererar och lagrar saltet åt dig.

Arbetsfaktor: att göra varje gissning dyr

En arbetsfaktor (eller kostnadsparameter) styr hur mycket beräkning varje hash kräver. Ställ in den så att en enda hash är tillräckligt långsam för att vara omärkbar vid en legitim inloggning (några hundra millisekunder) men bestraffande i stor skala. Eftersom det är en parameter kan du höja den genom åren när hårdvaran blir snabbare, och hålla kostnaden för att gissa ungefär konstant. Detta är ratten en allmän hash helt enkelt inte har.

De tre standardvalen

  • bcrypt är det sedan länge etablerade, välförstådda alternativet, byggt på Blowfish-chiffret med en konfigurerbar kostnadsfaktor. En säker standard där det finns tillgängligt.
  • scrypt lägger till minneshårdhet: det förbrukar avsiktligt en justerbar mängd minne, vilket trubbar av angripare som använder GPU:er och specialchip, eftersom dessa skalar beräkning långt billigare än minne.
  • Argon2 vann Password Hashing Competition 2015 och är den nuvarande rekommendationen för nya system. Det är minneshårt med separata rattar för minne, tid och parallellism; varianten Argon2id är det vanliga valet.

Vilket som helst av dessa är ett rimligt val; den främsta regeln är att använda ett av dem, aldrig en naken snabb hash, och aldrig att uppfinna ditt eget system.

Slutsatsen

Använd SHA-256 (i Hash-verktyget) för kontrollsummor och integritet, där hastighet är en fördel. För lösenord, grip efter bcrypt, scrypt eller Argon2, där långsamhet och minneskostnad är hela poängen. De två uppgifterna ser lika ut och kräver motsatta verktyg.