Hvorfor ikke bare SHA-256?
En almindelig kryptografisk hash som er det rette værktøj til integritet, men det forkerte værktøj til at lagre adgangskoder, og grunden er netop egenskaben, der gør den god andre steder: den er hurtig. En angriber, der stjæler en database med SHA-256-adgangskodehasher, kan prøve milliarder af gæt i sekundet på almindelig hardware, fordi hvert gæt blot er én hurtig hash. Almindelige adgangskoder falder næsten øjeblikkeligt. Hastighed, dyden ved en almenformålshash, er her en ulempe.
Lagring af adgangskoder kræver en hash, der er bevidst langsom og modstandsdygtig over for specialiseret hardware. Tre byggesten får det til at virke: saltning, en justerbar arbejdsfaktor og hukommelseshårdhed.
Saltning: at besejre forberegning
Et salt er en unik tilfældig værdi, der lagres ved siden af hver adgangskodehash og blandes ind i hashingen. Uden salte giver identiske adgangskoder identiske hasher, så en angriber kan forberegne en kæmpe tabel over hasher for almindelige adgangskoder én gang (en "rainbow table") og slå hvert match op øjeblikkeligt. Et unikt salt pr. adgangskode gør den forberegning værdiløs: angriberen må angribe hver hash for sig, og den samme adgangskode hashes forskelligt for hver bruger. Moderne adgangskodehashfunktioner genererer og lagrer saltet for dig.
Arbejdsfaktor: at gøre hvert gæt dyrt
En arbejdsfaktor (eller omkostningsparameter) styrer, hvor meget beregning hver hash kræver. Indstil den, så en enkelt hash er langsom nok til at være umærkelig ved en legitim login (et par hundrede millisekunder), men straffende i stor skala. Da det er en parameter, kan du hæve den gennem årene, efterhånden som hardware bliver hurtigere, og holde omkostningen ved at gætte nogenlunde konstant. Dette er knappen, en alemenformålshash simpelthen ikke har.
De tre standardvalg
- bcrypt er den længe etablerede, velforståede mulighed, bygget på Blowfish-chifferet med en konfigurerbar omkostningsfaktor. En sikker standard, hvor den er tilgængelig.
- scrypt tilføjer hukommelseshårdhed: den forbruger bevidst en justerbar mængde hukommelse, hvilket bremser angribere, der bruger GPU'er og specialchips, da disse skalerer beregning langt billigere end hukommelse.
- Argon2 vandt Password Hashing Competition i 2015 og er den nuværende anbefaling til nye systemer. Den er hukommelseshård med separate knapper for hukommelse, tid og parallelisme; varianten Argon2id er det sædvanlige valg.
Et hvilket som helst af disse er et rimeligt valg; den kardinale regel er at bruge et af dem, aldrig en bar hurtig hash, og aldrig at opfinde sin egen ordning.
Konklusionen
Brug SHA-256 (i Hash-værktøjet) til kontrolsummer og integritet, hvor hastighed er en fordel. Til adgangskoder, grib efter bcrypt, scrypt eller Argon2, hvor langsomhed og hukommelsesomkostning er hele pointen. De to opgaver ligner hinanden og kræver modsatte værktøjer.