Hva er en hash, og hvorfor er den overalt i teknologi?
Du har sannsynligvis sett strenger som dette:
e3b0c44298fc1c149afbf4c8996fb924
27ae41e4649b934ca495991b7852b855
De dukker opp i programvarenedlastinger («verifiser SHA-256-hash»), i samtaler om blokkjede, i diskusjoner om passordsikkerhet og i utallige utviklerverktøy. Men hva er egentlig en hash, og hvorfor er den så grunnleggende for moderne teknologi?
Konseptet på vanlig norsk
En hashfunksjon tar en hvilken som helst inndata — et ord, en setning, en hel fil — og produserer en utdata med fast lengde kalt en hash-verdi (også kalt et sammendrag, kontrollsum eller fingeravtrykk). Nøkkelegenskapene er:
- Deterministisk. Den samme inndata gir alltid den samme utdata.
- Fast lengde. Uansett hvor stor inndataen er, er utdataen alltid like stor.
- Enveis. Du kan ikke rekonstruere den originale inndataen fra hash-utdataen.
- Snøskredeffekt. En liten endring i inndataen gir en fullstendig annerledes hash.
Tenk på det som et fingeravtrykk for data. Akkurat som fingeravtrykket ditt unikt identifiserer deg, men ikke kan brukes til å rekonstruere ansiktet ditt, identifiserer en hash unikt en databit, men kan ikke brukes til å rekonstruere originalen.
Et enkelt eksempel
Her er hva SHA-256-hashfunksjonen gjør med to veldig like inndata:
| Inndata | SHA-256-hash (første 16 tegn) |
|---|---|
| «Hello» | 185f8db32271fe25... |
| «hello» | 2cf24dba5fb0a30e... |
| «hello!» | ce06092fb948d9ff... |
Å endre ett enkelt tegn (stor H til liten h) eller legge til et utropstegn gir en fullstendig annerledes hash. Det er ingen mønster, ingen forutsigbar sammenheng. Dette er snøskredeffekten i praksis.
Visste du? SHA-256-hash-verdien av en tom inndata (bokstavelig talt ingenting) er e3b0c44298fc1c14.... Dette er en velkjent konstant. Alle SHA-256-implementeringer i verden produserer nøyaktig denne utdataen for en tom inndata.
Vanlige hash-algoritmer
MD5
- Utdata: 128 bit (32 heksadesimale tegn)
- Status: Brutt for sikkerhetsformål. Kollisjoner (ulike inndata som gir den samme hash-verdien) kan genereres på sekunder.
- Brukes fortsatt til: Filintegritetssjekker der sikkerhet ikke er et problem (f.eks. verifisering av at en nedlasting ikke ble ødelagt).
SHA-1
- Utdata: 160 bit (40 heksadesimale tegn)
- Status: Utfaset for sikkerhet. Kollisjoner er demonstrert.
- Brukes fortsatt til: Eldre systemer, Git-commit-identifikatorer.
SHA-256
- Utdata: 256 bit (64 heksadesimale tegn)
- Status: Gjeldende standard. Ingen kjente praktiske angrep.
- Brukes til: Passordlagring, digitale signaturer, blokkjede, filverifisering, TLS-sertifikater.
SHA-512
- Utdata: 512 bit (128 heksadesimale tegn)
- Status: Gjeldende standard. Enda større sikkerhetsmargin enn SHA-256.
- Brukes til: Høysikkerhetsapplikasjoner, noen passord-hash-ordninger.
Advarsel MD5 og SHA-1 bør aldri brukes til sikkerhetsformål (passord, digitale signaturer, sertifikater). De er kryptografisk brutt. Bruk SHA-256 eller SHA-512 for alt sikkerhetsrelatert.
Hvor hash-verdier brukes
Passordlagring
Når du oppretter en konto, lagrer ikke nettsiden (eller bør ikke lagre) det faktiske passordet ditt. I stedet lagrer den hash-verdien av passordet ditt. Når du logger inn, hasher systemet passordet du skriver inn og sammenligner det med den lagrede hash-verdien. Hvis de stemmer overens, er du inne.
Dette betyr at selv hvis en database brytes, får angriperne hash-verdier, ikke passord. De kan ikke reversere hash-verdien for å finne passordet ditt (selv om de kan prøve å gjette det ved å hashe vanlige passord og sammenligne).
Moderne passord-hashing går lenger med algoritmer som bcrypt, scrypt og Argon2, som legger til salt (tilfeldige data) og er bevisst trege for å gjøre brute-force-gjetting upraktisk.
Filverifisering
Når du laster ned programvare, gir nettsiden ofte en SHA-256-hash av filen. Etter nedlasting hasher du filen selv og sammenligner. Hvis hash-verdiene stemmer overens, er filen nøyaktig slik utgiveren mente. Hvis de avviker, ble filen skadet eller tuklet med under nedlastingen.
Forventet: a1b2c3d4e5f6...
Din fil: a1b2c3d4e5f6... ✓ Stemmer — filen er autentisk
Blokkjede og kryptovaluta
Hvert blokk i en blokkjede inneholder hash-verdien til det forrige blokket, noe som skaper en ubrytelig kjede. Hvis noen prøver å endre en tidligere transaksjon, endres hash-verdien til det blokket, noe som bryter kjeden fra det punktet og fremover, og gjør manipulering umiddelbart oppdagbar.
Bitcoin-mining er i bunn og grunn en konkurranse om å finne en inndata som gir en SHA-256-hash som starter med et bestemt antall nuller.
Digitale signaturer
Når du digitalt signerer et dokument, krypterer du ikke hele dokumentet med privatnøkkelen din. I stedet hasher du dokumentet, og hash-verdien krypteres. Dette er mye raskere og gir en kompakt signatur.
Datadeduplisering
Skytjenester bruker hash-verdier til å oppdage duplikatfiler. Hvis to brukere laster opp den samme filen, har den den samme hash-verdien, og tjenesten trenger bare å lagre én kopi.
Git-versjonskontroll
Hvert commit, fil og tre i Git er identifisert av SHA-1-hash-verdien. Det er slik Git vet om en fil har endret seg og sporer hele historikken til et prosjekt.
Visste du? Git migrerer gradvis fra SHA-1 til SHA-256. Overgangen startet fordi SHA-1-kollisjoner ble demonstrert i 2017, noe som teoretisk sett tillot noen å lage to ulike commits med den samme identifikatoren.
Irreversibilitetsproblemet (og hvorfor det er viktig)
Enveisnaturen til hash-verdier er både den største styrken og en hyppig kilde til forvirring.
Du kan ikke «dekryptere» en hash-verdi. En hash er ikke kryptering. Kryptering er toveis: krypterer med en nøkkel, dekrypterer med en nøkkel. Hashing er enveis: du kan beregne hash-verdien fra inndataen, men du kan ikke beregne inndataen fra hash-verdien.
Den eneste måten å «reversere» en hash-verdi på er å gjette den originale inndataen, hashe gjettet ditt og sjekke om det stemmer. For korte, enkle inndata (som vanlige passord) er dette mulig. For lange, tilfeldige inndata er det beregningsteknisk umulig.
Det er derfor passordlengde er så viktig. Hash-verdien av «passord123» kan finnes ved å prøve vanlige passord. Hash-verdien av «j8#kL9$mN2@pQ5&» ville ta lenger tid enn universets alder å finne ved gjetting.
Prøv det selv
Den beste måten å forstå hash-verdier på er å eksperimentere. Hash et ord, endre deretter ett tegn og se hvordan utdataen endrer seg fullstendig. Hash en fil før og etter endring og se forskjellen.
Tips Generer og verifiser hash-verdier for tekst eller filer: Slik genererer og verifiserer du hash-verdier. Prøv SHA-256, MD5, SHA-512 og mer — øyeblikkelig, gratis, i nettleseren din.
Utforsk hash-verdier på egenhånd:
Gratis, øyeblikkelig og uten registrering.