Forestil dig, at du kunne tage et vilkårligt stykke data — et enkelt ord, en roman, en 4 GB video — og reducere det til en kort streng af tegn med fast længde, der unikt identificerer det. Ændr et enkelt komma i originalen, og strengen bliver fuldstændig anderledes. Og der er ingen måde at vende processen om for at genskabe de originale data.
Det er nøjagtigt, hvad en kryptografisk hashfunktion gør. Den er en af de mest fundamentale byggeklodser i moderne sikkerhed, og den beskytter stille og roligt næsten alt, hvad du gør online.
Fingeraftryksmetaforen
En hash fungerer som et digitalt fingeraftryk. Dit fingeraftryk identificerer dig unikt, men ingen kan rekonstruere dit ansigt ud fra det. På samme måde identificerer en kryptografisk hash unikt et stykke data uden at afsløre, hvad dataene er.
Giv et vilkårligt input til en hashfunktion, og du får et digest (også kaldet hashværdi eller checksum) — en streng af hexadecimale tegn med fast længde. SHA-256, en af de mest almindelige algoritmer, producerer altid et 64-tegns output uanset inputstørrelse.
| Input | SHA-256-digest (første 16 tegn) |
|---|---|
Hello |
185f8db32271fe25... |
hello |
2cf24dba5fb0a30e... |
| Hele Wikipedia-dumpen | (stadig 64 tegn) |
De fire essentielle egenskaber
En funktion kvalificerer sig kun som en kryptografisk hash, hvis den opfylder disse egenskaber:
- Deterministisk. Det samme input producerer altid det samme output, på enhver maskine, til enhver tid.
- Envejs (pre-image-resistens). Givet en hash er det beregningsmæssigt umuligt at finde det originale input. Du kan ikke "afhashe" data.
- Kollisionsresistent. Det er praktisk talt umuligt at finde to forskellige input, der producerer det samme digest. For SHA-256 er chancen for en tilfældig kollision cirka 1 ud af 2^128 — et tal større end atomerne i det observerbare univers.
- Lavineeffekt. Ændring af en enkelt bit i inputtet vender cirka halvdelen af bitsene i outputtet. Der er intet detekterbart mønster eller sammenhæng mellem lignende input.
Vigtig skelnen: Hashing er ikke kryptering. Kryptering er reversibel med en nøgle; hashing er bevidst irreversibel. Du krypterer data for at beskytte dem under transport. Du hasher data for at verificere deres integritet eller gemme et bevis uden at beholde originalen.
Almindelige hashalgoritmer
MD5 (1991)
- Output: 128 bits (32 hex-tegn)
- Status: Kryptografisk brudt. Forskere kan generere kollisioner på sekunder på en bærbar.
- Ses stadig i: Ikke-sikkerhedsrelaterede checksums til fildownloads og ældre systemer.
SHA-1 (1995)
- Output: 160 bits (40 hex-tegn)
- Status: Frarådet til sikkerhed. Google demonstrerede en praktisk kollision i 2017 ("SHAttered"-angrebet).
- Ses stadig i: Ældre Git-repositorier, nogle ældre certifikater.
SHA-256 (2001)
- Output: 256 bits (64 hex-tegn)
- Status: Nuværende standard. Ingen kendte praktiske angreb.
- Bruges i: TLS-certifikater, Bitcoin, adgangskodehashing, digitale signaturer, filintegritetsverifikation.
SHA-3 (2015)
- Output: Variabel (typisk 256 bits)
- Status: Nyeste standard, baseret på et helt andet internt design (Keccak sponge-konstruktion) end SHA-2-familien.
- Bruges i: Fremadrettede systemer, Ethereum, situationer der kræver algoritmediversitet.
| Algoritme | Outputstørrelse | Sikker? | Hastighed |
|---|---|---|---|
| MD5 | 128 bits | Nej | Meget hurtig |
| SHA-1 | 160 bits | Nej | Hurtig |
| SHA-256 | 256 bits | Ja | Moderat |
| SHA-3-256 | 256 bits | Ja | Moderat |
Hvor kryptografisk hashing bruges
Adgangskodeopbevaring
Når du opretter en konto, gemmer et veldesignet system aldrig din adgangskode i klartekst. Det gemmer hashen. Når du logger ind, hasher systemet det, du skriver, og sammenligner det med den gemte værdi. Selv hvis databasen bliver kompromitteret, får angriberne hashes — ikke adgangskoder.
Moderne systemer går videre ved at tilføje et tilfældigt salt (ekstra data tilføjet før hashing) og bruge bevidst langsomme algoritmer som bcrypt, scrypt eller Argon2 for at gøre brute-force-gætning upraktisk.
Filintegritetsverifikation
Softwaredistributører offentliggør SHA-256-checksums sammen med deres downloads. Efter download beregner du hashen af filen på din maskine og sammenligner. Et match beviser, at filen ikke er blevet beskadiget eller manipuleret under transporten.
Digitale signaturer
Når du digitalt signerer et dokument, hasher systemet dokumentet først og krypterer derefter hashen med din private nøgle. Modtageren dekrypterer den med din offentlige nøgle og sammenligner den med deres egen hash af dokumentet. Dette er langt mere effektivt end at kryptere hele dokumentet og beviser både forfatterskab og integritet.
Blockchain
Hver blok i en blockchain indeholder hashen af den forrige blok, hvilket skaber en uforanderlig kæde. Ændring af en tidligere transaktion ændrer blokkens hash, hvilket bryder kæden fra det punkt og fremefter, så manipulation øjeblikkeligt bliver synlig.
Hvorfor MD5 og SHA-1 anses for brudte
En hashalgoritme er "brudt", når nogen bevidst kan skabe to forskellige input, der producerer den samme hash (en kollision). Dette underminerer ethvert brugsscenarie, der er afhængigt af unikhed.
- MD5: Kollisioner kan genereres på sekunder. Forskere har skabt to forskellige PDF-filer med identiske MD5-hashes.
- SHA-1: SHAttered-angrebet i 2017 producerede to forskellige PDF'er med den samme SHA-1-hash, hvilket krævede cirka 6.500 års enkelt-CPU-beregning (muligt med cloud-ressourcer).
Praktisk regel: Brug aldrig MD5 eller SHA-1 til noget sikkerhedsrelateret — adgangskoder, certifikater, digitale signaturer eller integritetskontroller, hvor en modstander kan være involveret. Brug SHA-256 eller SHA-3 i stedet.
Gå videre
Hashing er et af de koncepter, der bliver intuitive, når du eksperimenterer med det. Prøv at hashe en sætning, ændr derefter ét tegn og observer lavineeffekten med det samme.
- Sådan genererer og verificerer du hashes — trinvis vejledning
- Hash-generator — beregn SHA-256, MD5, SHA-512 og mere øjeblikkeligt i din browser
- Hash-identifikator — indsæt en ukendt hash og identificér dens algoritme
