Kryptografi for nybegynnere: Hva er hashing?
Av Natalia Moskaleva den 13. november 2023
5 min lesetid

Hashing spiller en avgjørende rolle i håndteringen og beskyttelsen av digital informasjon. Men hva er det egentlig, og hvordan fungerer det?
I dette blogginnlegget skal vi se nærmere på prinsippene og de praktiske bruksområdene for hashing.
Hva er hashing?
Hashing er prosessen med å konvertere data - tekst, tall, filer og praktisk talt alt annet - til et fast antall byte (representert ved en streng med tilsynelatende tilfeldige bokstaver og tall). Dette gjøres ved hjelp av en spesialisert matematisk algoritme som kalles en hash-funksjon.
Det viktigste med en hash-funksjon er at den er enveis. Når dataene er hashet, blir det beregningsmessig umulig* å reversere prosessen og avkode den opprinnelige meldingen. Hashing endrer dataene irreversibelt for å sikre integriteten.
Hashing hindrer også uautoriserte aktører i å utnytte sensitiv informasjon. Selv om en ondsinnet part får tilgang til informasjonen, vil den forbli uleselig i hashet form.
* Selv om det kan være beregningsmessig umulig å reversere hashingoperasjonen, kan angripere utnytte forhåndsberegnede tabeller til å gjette den opprinnelige inndataen. Denne sårbarheten utnyttes ofte til å knekke passordhashes. Derfor er det viktig å bruke hashfunksjoner som anses som sikre og oppdaterte (mer om dette nedenfor).
En kort historikk om hashing: en algoritme og en datastruktur
Vi kan spore oppfinnelsen av de første hashfunksjonene tilbake til 1958, da Hans Peter Luhn introduserte Key Word in Context (KWIC)-algoritmen.
KWIC fikk intet mindre enn en revolusjonerende virkning: Den forandret indekseringen av tekstlig informasjon, og gjorde det mulig å lage indekser automatisk fra omfattende tekstkilder. KWIC var i bunn og grunn datidens svar på en søkemotor, som hjalp brukerne med å få rask tilgang til informasjonen de trengte.
Med tiden utviklet hashing seg og fikk mange andre bruksområder.
Selv om hashing fortsatt er relevant for effektiv dataindeksering (se hashtabell-datastruktur), brukes det i dag først og fremst for å forbedre sikkerheten.
Prinsippet er alltid det samme: å omdanne data til en tegnstreng av fast størrelse. Implementeringene er imidlertid forskjellige.
I denne artikkelen fokuserer vi hovedsakelig på "kryptografisk hashing", som refererer til hashingfunksjoner som er utviklet for å styrke sikkerhetstiltak.
Eksempel på kryptografisk hash-funksjon
For å få en bedre forståelse av hvordan hashing fungerer, kan vi ta utgangspunkt i et scenario der vi trenger å hashe to forskjellige tekststrenger:
Tekststreng 1: "Den raske, brune reven hopper over den late hunden."
MD5: 9e107d9d372bb6826bd81d3542a419d6
SHA-256: e4d909c290d0fb1ca068ffaddf22cbd0d0be6a8a3e8365e361d13ec37dd6b674
SHA3-256: a80f839cd4f83f6c3dafc87feae470045e4eb0d366397d5c6ce34ba1739f734d
Tekststreng 2: "Den late hunden blir overkjørt av en rask brun rev."
MD5: 3278a6f1b9bdc8a0ff58f8bfc1158fb1
SHA-256: 5da0032e38cb7b00c9ff1c1b82b5167aee0cf3e031c16f1b65d61b189b1d4cb7
SHA3-256: 46fe653b6903bfa3397c4f095c034738673c45acfad1c782fc4b72e32da13304
Legg merke til at de resulterende hashene ikke kan dekrypteres, noe som gjør det umulig å reversere den opprinnelige meldingen.
Dessuten genererer funksjonene konsekvent hasher med fast lengde, selv om de opprinnelige setningene har ulik lengde. Selv om vi hashet innholdet i en hel bok, vil lengden på hashen forbli den samme.
Hvordan er dette mulig? Hemmeligheten er å dele dataene inn i like store blokker.
La oss se nøyaktig hvordan hashing-funksjonen fungerer.
Hvordan fungerer en hashing-algoritme?
På et overordnet nivå følger hashing-algoritmer disse trinnene:
- Meldingsinngang: Brukeren velger data som skal hashes.
- Valg av algoritme: Hashingalgoritmen velges ut fra det spesifikke bruksområdet og sikkerhetskravene. Vanlige valg inkluderer SHA-256 og SHA3-256.
- Bruk av hash-funksjon: Dataene behandles gjennom den valgte hashfunksjonen, som tar inngangsdataene og omdanner dem til en hashverdi med fast størrelse.
SHA-256 fungerer for eksempel med blokkstørrelser på 512 bits, noe som tilsvarer omtrent 32 Unicode-tegn (eller 64 ASCII-tegn). Når en kort melding hashes, behandler algoritmen den én gang for å generere den endelige hashverdien. Hvis meldingen er kortere enn en hel blokk, blir den fylt ut slik at den passer til blokkstørrelsen. For større inndata (over 512 bits) deler algoritmen dataene inn i 512-biters biter og behandler dem sekvensielt. Algoritmen kombinerer deretter hashverdiene til disse bitene for å skape den endelige hashverdien. For veldig store datasett eller filer gjentas prosessen flere ganger.
- Lagring eller deling: Den resulterende hashverdien, ofte kalt en "message digest", sendes til mottakeren eller lagres for å verifisere dataintegriteten.
Det er en veldig rask prosess: Hash-verdien beregnes vanligvis på mikrosekunder. SHA3-256 kan for eksempel behandle omtrent 100 megabit per sekund.
Det finnes mange verktøy på nettet som er utviklet for hashing av data.
Hvis du er utvikler, har du sannsynligvis allerede innlemmet kryptografisk hashing i applikasjonene dine. Dette kan involvere kryptografiske biblioteker som hashlib eller bcrypt, en egen Node-kryptomodul for hash-generering eller JWT-biblioteker som jsonwebtoken, som bruker hashing til å signere og verifisere JWT-tokens.
Egenskaper ved en kryptografisk hash-funksjon
Kryptografiske hashfunksjoner har flere viktige egenskaper som gjør dem egnet for sikkerhetsrelaterte applikasjoner. En robust kryptografisk hashfunksjon er:
- Deterministisk
En kryptografisk hashfunksjon er deterministisk, noe som betyr at den konsekvent produserer samme utdata for en gitt inndata. Den minste endring i inndataene vil resultere i en helt annen hash, som vi har illustrert ovenfor. - Irreversibel (preimage-resistens)
Det er beregningsmessig umulig å reversere en hash og finne den opprinnelige inndataen. Denne egenskapen, kjent som preimage-resistens, beskytter hashede data. -
Kollisjonsresistent
Kryptografiske hashfunksjoner er utformet for å motstå kollisjonsangrep. En kollisjon oppstår når to forskjellige inndata gir samme hashverdi. Kollisjoner er problematiske fordi de kan utnyttes av angripere. En god kryptografisk hashfunksjon gjør det svært vanskelig å finne kollisjoner.
Samlet sett gjør de ovennevnte egenskapene kryptografiske hashfunksjoner spesielt godt egnet for sikkerhetsapplikasjoner, der dataintegritet og konfidensialitet er avgjørende.
Ikke-kryptografiske hashfunksjoner har derimot andre krav. De prioriterer gjerne effektivitet og hastighet, og legger mindre vekt på kollisjonsresistens. Disse funksjonene trenger ikke de komplekse sikkerhetsfunksjonene til kryptografiske hashfunksjoner.
Hvilke hashalgoritmer er i bruk?
Message Digest 5 (MD5)
MD5 var en av de første standardene for hashalgoritmer. Den ble mye brukt til verifisering av filintegritet (sjekksummer) og lagring av hashede passord i databaser.
Det er en enkel algoritme som sender ut en fast 128-biters streng for hver inndata, og som bruker en grunnleggende enveisoperasjon over flere runder for å beregne utdataene. Enkelheten og den korte utdatalengden gjør imidlertid MD5 svært utsatt for utnyttelse. I dag anses MD5 som usikker og bør ikke lenger brukes.
Sikker hashalgoritme (SHA)
SHA er en familie av hashalgoritmer.
SHA1 ble utviklet av det amerikanske National Security Agency (NSA) og ligner på MD5. Den genererer 160-biters hashverdier, representert ved 40-sifret lange heksadesimale strenger. SHA1 anses også som utdatert og upålitelig for sikkerhetsformål. I stedet anbefales det å bruke SHA2 eller SHA3.
SHA2-familien, som også er utviklet av NSA, består av seks forskjellige hashfunksjoner som produserer hashverdier av varierende lengde: 224, 256, 384 eller 512 bits. SHA2 er den gjeldende sikre standarden for hashing av sensitive data.
SHA3 ble introdusert i 2006 som en del av et bredere system av hashalgoritmer kjent som KECCAK (uttales "ketch-ak"). Den er et alternativ til SHA2 og kan brukes til sikker hashing.
Andre hashing-algoritmer
Det finnes mange andre hashing-algoritmer der ute, inkludert BLAKE (som brukes i Ethereum), Bcrypt, Argon2 og flere.
Her er en omfattende sammenligning av hashfunksjoner.
Over tid har hashalgoritmer blitt mer avanserte og sikre. Dette har gjort det stadig mer utfordrende for ondsinnede aktører å reversere hashede verdier. Selv om hashfunksjoner fortsatt kan brytes, gjør de komplekse matematiske operasjonene som ligger bak dem, det til en svært krevende oppgave uten betydelig regnekraft.
Hva brukes hashing til?
SHA-256-sjekksummer: Brukes til å verifisere integriteten til filer og nedlastinger for å sikre at de ikke har blitt tuklet med.
Hashing av passord: Brukes til sikker lagring og verifisering av passord. Hashing kombineres ofte med salting for å gjøre passordene mer komplekse og unike uten å stille ekstra krav til brukerne. Enkelt forklart: Hvis en tilfeldig saltverdi legges til to identiske passord, vil de resulterende hashene være forskjellige. Dette beskytter mot regnbuetabellangrep og anbefales på det sterkeste fordi mennesker er eksepsjonelt dårlige til å finne sikre passord på egen hånd.
SSL/TLS-sertifikater: Brukes til å autentisere identiteten til et nettsted, etablere tillit og sikre forbindelser for nettbaserte transaksjoner.
Digitale signaturer: Brukes til å validere ektheten til digitale meldinger eller dokumenter.
Pålitelig tidsstempling: Brukes til å fastslå tidspunktet da digitale data ble opprettet eller endret ved hjelp av et pålitelig tidsstempel, noe som er viktig for juridiske og regulatoriske formål.
Signerte JSON Web Tokens (JWT): Brukes til identitetsadministrasjon og til sikker overføring av informasjon mellom parter man stoler på.
Alle disse bruksområdene er avhengige av kjernefunksjonen til kryptografisk hashing: å garantere dataintegritet og forhindre forstyrrelser eller manipulering av informasjon.
Hashing vs. kryptering
Selv om begrepene "hashing" og "kryptering" noen ganger brukes om hverandre, tjener de ulike formål.
Hashing er i seg selv irreversibel: Hashing gjør det umulig å dekode hashede verdier. Kryptering, derimot, gir alltid en dekrypteringsnøkkel for å tolke dataene.
Hashing er derfor beregnet på integritetsvalidering, mens kryptering sikrer datakonfidensialitet.
Table of contents
Disse relaterte artiklene

10 bruksområder for verifiserbare legitimasjonsopplysninger

6 forretningsfordeler med verifiserbare legitimasjonsopplysninger

Digital identitet i Europa avhenger av mer enn lommebøker
Sign up for our newsletter
Stay up to date on industry news and insights