Hashing
Også kendt som: hashfunktion, kryptografisk hash
At lave en vilkårlig mængde data om til en kort værdi af fast længde, der ændrer sig helt, hvis blot ét tegn ændres.
Kladde - dette opslag er endnu ikke gennemgået.
Formelt
En beregning, der kun går én vej, og som laver input af enhver størrelse om til en værdi af fast størrelse. Samme input giver altid samme resultat, resultatet kan ikke regnes tilbage til input, og det er praktisk talt umuligt at finde to input med samme resultat.
Forklaret enkelt
Som et fingeraftryk - det identificerer en person uden at indeholde personen, og ingen kan genskabe et menneske ud fra et fingeraftryk.
I praksis
En dansk webshop gemmer kun en langsom, bevidst tung hash af hver kundes adgangskode. Da databasen bliver stjålet, får angriberne hashes, de skal gætte sig igennem én ad gangen, ikke adgangskoder.
Hvorfor det betyder noget
Det er sådan, systemer opdager manipulation af filer og beskeder, og sådan de tjekker adgangskoder uden at skulle gemme dem.
Teknisk uddybning
En kryptografisk hashfunktion H afbilder input af vilkårlig længde over i en n-bit digest og forventes at have tre egenskaber: preimage-resistens (givet h koster det ca. 2^n at finde m med H(m) = h), second-preimage-resistens (givet m koster det ca. 2^n at finde m' ≠ m med samme digest) og kollisionsresistens (at finde et vilkårligt par koster ca. 2^(n/2) på grund af fødselsdagsgrænsen). Kvadratrodseffekten er grunden til, at en digest på 256 bit giver 128 bits kollisionssikkerhed. Ikke-kryptografiske hashes i hashtabeller og checksummer (CRC32, xxHash, MurmurHash) har ingen af disse egenskaber; SipHash er en nøglet mellemting designet til at stoppe denial of service via hash-flooding.
De standardiserede familier er SHA-2 (SHA-224/256/384/512 og den afkortede SHA-512/256, NIST FIPS 180-4), bygget på Merkle-Damgård-konstruktionen, og SHA-3 (FIPS 202, 2015), bygget på Keccak-svampen, som også definerer de udvidelige outputfunktioner SHAKE128 og SHAKE256. BLAKE2 og BLAKE3 er udbredte alternativer uden for NIST. MD5 har været brudt i praksis siden Wang m.fl.'s kollisioner i 2004, og MD5-kollisioner med valgt præfiks blev brugt til et falsk CA-certifikat (2008) og i Flame-malwaren (2012). SHA-1 faldt med SHAttered-kollisionen i 2017 og en praktisk kollision med valgt præfiks i 2020; NIST har meldt ud, at SHA-1 skal udfases senest 31. december 2030. Git adresserer stadig objekter med SHA-1 som standard, men bruger en variant, der opdager kollisionsforsøg, og SHA-256-repositorier er mulige.
Merkle-Damgård-hashes afslører deres interne tilstand i outputtet, hvilket muliggør length extension-angreb: kender man H(hemmelighed ‖ m) og hemmelighedens længde, kan man beregne H(hemmelighed ‖ m ‖ padding ‖ m') uden at kende hemmeligheden. Derfor er H(nøgle ‖ besked) ikke en sikker MAC, og derfor findes HMAC (RFC 2104, FIPS 198-1); SHA-3, SHA-512/256 og BLAKE3 er ikke sårbare på den måde.
Lagring af adgangskoder er den hyppigste fejlanvendelse. Almindelige hashfunktioner er designet til at være hurtige, så et grafikkort kan afprøve milliarder af SHA-256-gæt i sekundet. Adgangskoder kræver en saltet, bevidst dyr password-hashfunktion: Argon2id (RFC 9106), scrypt, bcrypt (som stiltiende afkorter input ved 72 byte) eller PBKDF2 med mange iterationer (NIST SP 800-132). OWASP's Password Storage Cheat Sheet anbefaler som minimum Argon2id med 19 MiB hukommelse, to iterationer og parallelitet 1. Et unikt tilfældigt salt pr. adgangskode gør forudberegnede rainbow tables værdiløse; en valgfri pepper, der opbevares uden for databasen, giver ekstra beskyttelse, hvis kun databasen lækker. Hashing er heller ikke kryptering eller anonymisering: en hash af et CPR-nummer eller en e-mailadresse er pseudonyme data efter databeskyttelsesforordningen, fordi det lille inputrum kan gennemløbes, og hashene dermed kan vendes ved brute force.
Relationer
- Åbner for
- Digital signatur
- Implementerer
- Integritet
- Forveksl ikke med
- Kryptering
- Bruges sammen med
- AdgangskodeTLS
Kilder og videre læsning
Standarder og officielle tekster
- NIST FIPS 180-4 - Secure Hash Standard (SHS)
Lærebøger
- Paar & Pelzl, Understanding Cryptography
Hvor dataene kommer fra
Dette opslag er skrevet af en AI ud fra kilderne ovenfor og er endnu ikke gennemgået af et menneske. Brug det som udgangspunkt, og tjek alt vigtigt mod kilderne.
Se gennemgangskøenForeslå en rettelse på GitHubDette begreb som JSON
Test dig selv
Indlæser…