Hva er SHA-256? Slik virker det, MD5 vs SHA-256 og sjekksum
SHA-256 er en kryptografisk hashfunksjon som gjør om hvilken som helst inndata, fra én enkelt bokstav til en fil på flere gigabyte, til en fast verdi på 256 biter, vanligvis skrevet som 64 heksadesimale tegn. Den tilhører SHA-2-familien, som NIST publiserte i FIPS 180-2 i 2002. Samme inndata gir alltid samme hash, og hashen kan ikke gjøres om tilbake til inndataene.
Prøv gratis: Hash tekst online Gratis å bruke, ingen konto nødvendig.
Så hva er SHA-256 brukt til i praksis? Først og fremst til å bevise at data ikke er endret: sjekksummer for nedlastinger, TLS-sertifikater, Git, Bitcoin og signerte API-forespørsler bygger på den. Denne guiden forklarer hvordan SHA-256 virker, hvordan MD5 vs SHA-256 skiller seg fra hverandre, hva en sjekksum er og hvordan du kontrollerer en SHA-256-sjekksum i Windows, macOS og Linux. Hver hash nedenfor er beregnet med kode og kontrollert to ganger. Vil du prøve eksemplene selv, limer du dem inn i den gratis hashgeneratoren.
Hva er SHA-256?
SHA står for Secure Hash Algorithm. SHA-2 ble utviklet av NSA og standardisert av NIST, først i FIPS 180-2 (2002) og i dag i FIPS 180-4. Familien har flere medlemmer, oppkalt etter lengden på utdataene: SHA-224, SHA-256, SHA-384 og SHA-512, i tillegg til SHA-512/224 og SHA-512/256. SHA-256 er den mest brukte av dem.
En hash fungerer som et fingeravtrykk for data. Her er et eksempel på en SHA-256-hash for ordet «hello» og for tom inndata:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("") = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
Begge resultatene er like lange, fordi utdataene alltid er 256 biter. Det er 32 byte, og siden ett heksadesimalt siffer rommer 4 biter, blir det 256 ÷ 4 = 64 heksadesimale tegn.
Slik virker SHA-256, kort fortalt
- Utfylling. Meldingen får en 1-bit, deretter nuller og til slutt sin opprinnelige lengde som et 64-biters tall, slik at totalen blir et multiplum av 512 biter.
- Blokker. Den utfylte meldingen deles i blokker på 512 biter.
- Komprimering. Hver blokk går gjennom 64 runder med enkle operasjoner på 32-biters ord: bitrotasjoner, XOR, AND og addisjon modulo 2³². Rundene blander blokken inn i en intern tilstand på åtte 32-biters ord (8 × 32 = 256 biter).
- Utdata. Etter siste blokk er tilstanden hashen.
Hver blokk endrer tilstanden som neste blokk starter med, så en endring hvor som helst i inndataene påvirker resultatet.
Viktige egenskaper ved SHA-256
- Deterministisk. De samme bytene gir alltid samme hash, på hvilken som helst datamaskin.
- Fast størrelse. Et ord på 5 byte og en fil på 5 GB gir begge 64 heksadesimale tegn.
- Snøskredeffekt. En bitteliten endring i inndataene endrer utdataene fullstendig.
- Motstand mot urbilde. Gitt en hash finnes det ingen kjent måte å finne en passende inndata på, annet enn å gjette.
- Kollisjonsmotstand. Ingen har noen gang funnet to ulike inndata med samme SHA-256-hash.
Snøskredeffekten er lett å se. «hello» og «Hello» skiller seg med én bokstav, og bokstavene h (01101000) og H (01001000) skiller seg med bare én bit:
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-256("Hello") = 185f8db32271fe25f561a6fc938b2e264306ec304eda518007d1764826381969
De to hashene er ulike i 125 av sine 256 biter, nær halvparten man kan vente av tilfeldige utdata, og i 61 av de 64 heksadesimale tegnene.
En begrensning: motstand mot urbilde beskytter uforutsigbare data, ikke korte strenger som er lette å gjette. Hashen av «hello» finnes i alle oppslagstabeller på nettet, fordi hvem som helst kan hashe vanlige ord og lagre resultatene.
Hva er en sjekksum?
En sjekksum er en kort verdi som beregnes fra data, slik at du senere kan se om dataene er endret. Enkle sjekksummer som CRC32, brukt i ZIP-filer og nettverkspakker, fanger opp utilsiktede feil som en ødelagt nedlasting eller en defekt disk, men de er lette å forfalske med vilje.
SHA-256 brukt som sjekksum beskytter også mot bevisst manipulering, fordi ingen kan lage en endret fil som stemmer med den opprinnelige verdien. Én forutsetning gjelder: Den forventede hashen må komme fra en kilde du stoler på, for eksempel prosjektets offisielle HTTPS-side eller en signert sjekksumfil. En angriper som kontrollerer nedlastingssiden, kan bytte ut både filen og den publiserte hashen.
Hvor SHA-256 brukes
- Programvarenedlastinger. Linux-distribusjoner og mange programmer publiserer SHA-256-sjekksummer for installasjonsfilene sine, ofte i en
SHA256SUMS-fil. - TLS-sertifikater. Sertifikatet som sikrer et HTTPS-nettsted, er i de fleste tilfeller signert over en SHA-256-hash, vist som «sha256WithRSAEncryption» eller «ecdsa-with-SHA256». De store nettleserne sluttet å stole på SHA-1-signerte sertifikater i 2017.
- Bitcoin. Minere hasher blokkhoder med SHA-256 brukt to ganger (dobbel SHA-256) og endrer et tall kalt nonce til resultatet havner under et mål. Det søket er arbeidsbeviset (proof of work).
- Git. Git har tradisjonelt navngitt commits og filer etter SHA-1-hashen deres. Siden versjon 2.29 (2020) lager
git init --object-format=sha256et repository som bruker SHA-256 i stedet. - HMAC-SHA256 og JWT. HMAC blander en hemmelig nøkkel inn i hashen, slik at bare den som har nøkkelen, kan lage en gyldig verdi. Webhooks og API-forespørsler signeres ofte slik, og JWT-algoritmen HS256 er HMAC med SHA-256; HMAC-generatoren beregner en slik verdi. Ikke bruk en enkel
SHA-256(key + message)i stedet: den er sårbar for lengdeutvidelsesangrep, som HMAC hindrer.
MD5 vs SHA-256 (og SHA-1, SHA-512)
| Algoritme | Utdata | Heks-tegn | Publisert | Sikkerhetsstatus |
|---|---|---|---|---|
| MD5 | 128 biter | 32 | 1992 (RFC 1321) | Knekt: praktiske kollisjoner siden 2004 |
| SHA-1 | 160 biter | 40 | 1995 (FIPS 180-1) | Knekt: første offentlige kollisjon i 2017 |
| SHA-256 | 256 biter | 64 | 2002 (FIPS 180-2) | Sikker: ingen kjente kollisjoner |
| SHA-512 | 512 biter | 128 | 2002 (FIPS 180-2) | Sikker: ingen kjente kollisjoner |
Samme inndata gjennom alle fire:
MD5("hello") = 5d41402abc4b2a76b9719d911017c592
SHA-1("hello") = aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d
SHA-256("hello") = 2cf24dba5fb0a30e26e83b2ac5b9e29e1b161e5c1fa7425e73043362938b9824
SHA-512("hello") = 9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043
Hva er MD5? MD5 er en eldre 128-biters hash fra 1992. I 2004 viste forskere ledet av Xiaoyun Wang hvordan man lager to ulike inndata med samme MD5-hash, og senere arbeid gjorde slike kollisjoner raske å beregne. MD5 må ikke brukes der noen med vilje kan lage en fil som passer.
SHA-1 holdt lenger. I februar 2017 kunngjorde CWI Amsterdam og Google SHAttered: to ulike PDF-filer med samme SHA-1-hash. NIST anbefaler å erstatte SHA-1 helt innen 31. desember 2030.
SHA-256 har ingen kjent praktisk angrepsmetode. Et kollisjonssøk med rå kraft ville kreve rundt 2¹²⁸ forsøk, langt utenfor rekkevidden til noen eksisterende datamaskin.
I valget mellom MD5 vs SHA-256 bør du altså bruke SHA-256 til alt som har med sikkerhet å gjøre. MD5 går fortsatt fint der ingen prøver å lure deg, for eksempel for å oppdage utilsiktet skade eller finne dupliserte filer på din egen disk.
SHA-256 og SHA-512 er begge sikre; SHA-256 er standardvalget med bredest støtte. SHA-3 (FIPS 202, 2015) er en egen konstruksjon, standardisert som et alternativ og ikke fordi SHA-2 var knekt.
Hashing er ikke kryptering
Kryptering, som AES, kan reverseres: Med riktig nøkkel får du de opprinnelige dataene tilbake. En hash har verken nøkkel eller vei tilbake; den er alltid 256 biter uansett hvor store inndataene er, så de opprinnelige dataene finnes ikke i utdataene. Nettsteder som hevder å «dekryptere SHA-256», slår bare opp hasher av vanlige ord og passord som de har beregnet på forhånd.
Hvorfor ren SHA-256 er feil for passord
SHA-256 er laget for å være rask, og det er nettopp problemet for passord. Lekker en database med SHA-256-hasher av passord, kan angripere teste milliarder av gjetninger i sekundet på grafikkort. Uten salt får dessuten to brukere med samme passord samme hash.
Passord trenger en treg hashfunksjon med salt: Argon2id, scrypt eller bcrypt (eller PBKDF2 med mange iterasjoner). De gjør hver gjetning dyr. Les mer om salt og om hva som skjer når hashede passord lekker, i hva som skjer når et passord hashes.
Slik kontrollerer du en SHA-256-sjekksum
- Kopier den forventede SHA-256-verdien fra den offisielle nedlastingssiden eller sjekksumfilen.
- Beregn hashen av filen du lastet ned.
- Sammenlign alle 64 tegn, ikke bare de første. Store og små bokstaver spiller ingen rolle i heksadesimal.
Hvis verdiene er ulike, sletter du filen og laster den ned på nytt fra den offisielle kilden.
Windows
I ledeteksten:
certutil -hashfile ubuntu.iso SHA256
Legg alltid til SHA256: uten det bruker certutil SHA-1. I PowerShell bruker Get-FileHash SHA-256 som standard og kan gjøre sammenligningen for deg:
Get-FileHash .\ubuntu.iso
(Get-FileHash .\ubuntu.iso).Hash -eq "paste-the-expected-hash-here"
Den andre linjen skriver ut True eller False; -eq skiller ikke mellom store og små bokstaver, så utdataene med store bokstaver stemmer med en sjekksum med små.
macOS
shasum -a 256 ubuntu.iso
shasum -a 256 -c ubuntu.iso.sha256
Den første linjen skriver ut hashen. Den andre kontrollerer den mot en sjekksumfil, som inneholder hashen, to mellomrom og filnavnet.
Linux
sha256sum ubuntu.iso
sha256sum -c SHA256SUMS --ignore-missing
Med -c leser sha256sum sjekksumfilen og skriver ut ubuntu.iso: OK eller FAILED. --ignore-missing hopper over oppføringer for filer du ikke har lastet ned.
En vanlig felle når du hasher tekst på kommandolinjen: echo "hello" | sha256sum gir 5891b5b522d5df086d0ff0b110fbd9d21bb4fc7163af34d08286a2e846f6be03, ikke verdien 2cf24d… ovenfor, fordi echo legger til et linjeskift. Bruk printf 'hello' | sha256sum for å hashe nøyaktig fem byte.
I nettleseren
MD5- og SHA-256-hashgeneratoren beregner MD5, SHA1, SHA224, SHA256, SHA384, SHA512, Keccak-256 og RIPEMD160 samtidig, i modusen Tekst eller Fil.
- Tekst: Den hasher nøyaktig det du skriver, som UTF-8, og en teller viser antall byte, så et bortkommet mellomrom eller linjeskift er lett å oppdage.
- Fil: Filen leses og hashes lokalt med biblioteket crypto-js, uten å bli lastet opp.
- Kontroll: Lim inn den publiserte verdien i feltet «Forventet hash», så blir algoritmen som stemmer, merket med «Samsvar». Heks-sammenligningen ignorerer store og små bokstaver, mellomrom og et
0x-prefiks. - Utdata: heksadesimal (små eller store bokstaver), Base64, Base64url eller binær.
To begrensninger: Hele filen lastes inn i minnet først, så for ISO-filer på flere gigabyte er kommandolinjeverktøyene ovenfor et bedre valg. Og raden merket SHA3 er Keccak-512 med den opprinnelige utfyllingen, som skiller seg fra NIST SHA3-512.
Vanlige spørsmål
Kan SHA-256 dekrypteres eller reverseres?
Nei. SHA-256 er en enveisfunksjon uten nøkkel. «SHA-256-dekryptere» finner bare inndata som allerede står i oppslagstabellene deres. Det fungerer for vanlige ord og svake passord, men ikke for tilfeldige data.
Er SHA-256 fortsatt sikker?
Ja. Det finnes ingen kjente praktiske kollisjons- eller urbildeangrep mot SHA-256, og NIST godkjenner den fortsatt. Selv en stor kvantedatamaskin med Grovers algoritme ville, så vidt man vet i dag, bare redusere innsatsen for et urbilde fra rundt 2²⁵⁶ til rundt 2¹²⁸ operasjoner.
Hvorfor er en SHA-256-hash 64 tegn lang?
Hashen er på 256 biter. Skrevet heksadesimalt står hvert tegn for 4 biter, så 256 ÷ 4 = 64 tegn. Den samme verdien er 32 byte, eller 44 tegn i Base64.
Hva er forskjellen på SHA-2 og SHA-256?
SHA-2 er familien av hashfunksjoner definert i FIPS 180-4. SHA-256 er ett medlem av den, sammen med SHA-224, SHA-384 og SHA-512. Når programvare sier «SHA-2» uten størrelse, menes som regel SHA-256.
Kan to filer ha samme SHA-256-hash?
I teorien ja, fordi det finnes uendelig mange mulige filer og bare 2²⁵⁶ mulige hasher. I praksis har ingen noen gang funnet to ulike inndata med samme SHA-256-hash, så like hasher regnes som bevis på at filene er identiske.
Prøv gratis: Hash tekst online Gratis å bruke, ingen konto nødvendig.