Vad är en hash och varför finns den överallt inom teknik?
Du har förmodligen sett strängar som dessa:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
De dyker upp vid nedladdning av programvara ("verifiera SHA-256-hashen"), i blockkedjor, i diskussioner om lösenordssäkerhet och i otaliga utvecklarverktyg. Men vad är en hash egentligen, och varför är den så grundläggande för modern teknik?
Konceptet på vanlig svenska
En hashfunktion tar vilken indata som helst — ett ord, en mening, en hel fil — och producerar ett utdata med fast längd som kallas ett hashvärde (kallas även digest, kontrollsumma eller fingeravtryck). Nyckelegenskaperna är:
- Deterministisk. Samma indata ger alltid samma utdata.
- Fast längd. Oavsett hur stor indatan är, är utdatan alltid samma storlek.
- Envägsfunktion. Du kan inte rekonstruera den ursprungliga indatan från hashvärdet.
- Lavineffekt. En liten förändring i indatan ger ett helt annorlunda hashvärde.
Tänk på det som ett fingeravtryck för data. Precis som ditt fingeravtryck unikt identifierar dig men inte kan användas för att rekonstruera ditt ansikte, identifierar ett hashvärde unikt ett stycke data men kan inte användas för att rekonstruera originalet.
Ett enkelt exempel
Här är vad SHA-256-hashfunktionen gör med två mycket liknande indata:
| Indata | SHA-256-hash (första 16 tecken) |
|---|---|
| "Hello" | 185f8db32271fe25... |
| "hello" | 2cf24dba5fb0a30e... |
| "hello!" | ce06092fb948d9ff... |
Att ändra ett enda tecken (versalt H till gemener h) eller lägga till ett utropstecken ger ett helt annat hashvärde. Det finns inget mönster, inget förutsägbart samband. Det är lavineffekten i praktiken.
Visste du att? SHA-256-hashen för en tom indata (bokstavligen ingenting) är e3b0c44298fc1c14.... Det är en välkänd konstant. Varje SHA-256-implementation i världen ger exakt samma utdata för en tom indata.
Vanliga hashalgoritmer
MD5
- Utdata: 128 bitar (32 hexadecimala tecken)
- Status: Trasig för säkerhetsändamål. Kollisioner (olika indata som ger samma hash) kan genereras på sekunder.
- Används fortfarande för: Filintegritetskontroller där säkerhet inte är ett problem (t.ex. verifiera att en nedladdning inte korrupterades).
SHA-1
- Utdata: 160 bitar (40 hexadecimala tecken)
- Status: Föråldrad för säkerhet. Kollisioner har demonstrerats.
- Används fortfarande för: Äldre system, Git commit-identifierare.
SHA-256
- Utdata: 256 bitar (64 hexadecimala tecken)
- Status: Nuvarande standard. Inga kända praktiska attacker.
- Används för: Lösenordslagring, digitala signaturer, blockkedjor, filverifiering, TLS-certifikat.
SHA-512
- Utdata: 512 bitar (128 hexadecimala tecken)
- Status: Nuvarande standard. Ännu större säkerhetsmarginal än SHA-256.
- Används för: Säkerhetskritiska tillämpningar, vissa lösenordshashningssystem.
Observera MD5 och SHA-1 bör aldrig användas för säkerhetsändamål (lösenord, digitala signaturer, certifikat). De är kryptografiskt trasiga. Använd SHA-256 eller SHA-512 för allt säkerhetsrelaterat.
Var hashvärden används
Lösenordslagring
När du skapar ett konto lagrar webbplatsen inte (eller borde inte lagra) ditt faktiska lösenord. I stället lagrar den hashen av ditt lösenord. När du loggar in hashar systemet det lösenord du anger och jämför med den lagrade hashen. Om de matchar, är du inne.
Det innebär att även om en databas komprometteras får angripare hashvärden, inte lösenord. De kan inte reversera hashen för att hitta ditt lösenord (men de kan försöka gissa det genom att hasha vanliga lösenord och jämföra).
Modern lösenordshashning går ännu längre med algoritmer som bcrypt, scrypt och Argon2, som lägger till salt (slumpmässiga data) och är avsiktligt långsamma för att göra brute-force-gissning opraktisk.
Filverifiering
När du laddar ner programvara tillhandahåller webbplatsen ofta en SHA-256-hash för filen. Efter nedladdningen hashar du filen själv och jämför. Om hashvärdena stämmer överens är filen exakt vad utgivaren avsåg. Om de skiljer sig har filen skadats eller manipulerats under nedladdningen.
Förväntad: a1b2c3d4e5f6...
Din fil: a1b2c3d4e5f6... ✓ Match — filen är äkta
Blockkedjor och kryptovaluta
Varje block i en blockkedja innehåller hashen av det föregående blocket, vilket skapar en obrytbar kedja. Om någon försöker ändra en tidigare transaktion ändras hashen för det blocket, vilket bryter kedjan från den punkten framåt och gör manipulering omedelbart detekterbar.
Bitcoin-mining är i grunden en tävling om att hitta en indata som ger en SHA-256-hash som börjar med ett visst antal nollor.
Digitala signaturer
När du digitalt signerar ett dokument krypterar du inte hela dokumentet med din privata nyckel. I stället hashas dokumentet och hashen krypteras. Det är mycket snabbare och ger en kompakt signatur.
Dataavduplicering
Molnlagringstjänster använder hashvärden för att identifiera dubblettfiler. Om två användare laddar upp samma fil har den samma hash, och tjänsten behöver bara lagra en kopia.
Git-versionskontroll
Varje commit, fil och träd i Git identifieras av dess SHA-1-hash. Det är hur Git vet om en fil har ändrats och hur det spårar ett projekts hela historia.
Visste du att? Git migrerar gradvis från SHA-1 till SHA-256. Övergången inleddes eftersom SHA-1-kollisioner demonstrerades 2017, vilket teoretiskt tillåter någon att skapa två olika commits med samma identifierare.
Irreversibilitetsproblemet (och varför det spelar roll)
Hashvärdenas envägsnatur är både deras största styrka och en vanlig källa till förvirring.
Du kan inte "dekryptera" ett hashvärde. En hash är inte kryptering. Kryptering är tvåvägs: kryptera med en nyckel, dekryptera med en nyckel. Hashning är envägs: du kan beräkna hashen från indatan men inte indatan från hashen.
Det enda sättet att "reversera" en hash är att gissa den ursprungliga indatan, hasha din gissning och kontrollera om det stämmer. För korta, enkla indata (som vanliga lösenord) är det möjligt. För långa, slumpmässiga indata är det beräkningsmässigt omöjligt.
Det är därför lösenordslängd spelar så stor roll. Hashen för "lösenord123" kan hittas genom att prova vanliga lösenord. Hashen för "j8#kL9$mN2@pQ5&" skulle ta längre tid än universums ålder att hitta genom gissning.
Prova själv
Det bästa sättet att förstå hashvärden är att experimentera. Hasha ett ord, ändra sedan ett tecken och se hur utdatan ändras helt. Hasha en fil före och efter modifiering och se skillnaden.
Tips Generera och verifiera hashvärden för valfri text eller fil: Så genererar och verifierar du hashvärden. Prova SHA-256, MD5, SHA-512 och mer — direkt, gratis, i webbläsaren.
Utforska hashvärden praktiskt:
Gratis, direkt och ingen registrering krävs.