{"id":11,"date":"2026-06-10T09:13:59","date_gmt":"2026-06-10T09:13:59","guid":{"rendered":"https:\/\/shattered.io\/no\/2026\/06\/10\/hashfunksjoner\/"},"modified":"2026-06-10T12:35:02","modified_gmt":"2026-06-10T12:35:02","slug":"hashfunksjoner","status":"publish","type":"post","link":"https:\/\/shattered.io\/no\/cryptography\/hashfunksjoner\/","title":{"rendered":"Kryptografiske hashfunksjoner: egenskaper og bruk"},"content":{"rendered":"<h2 id=\"hva-er-en-hashfunksjon\">Hva er en hashfunksjon?<\/h2>\n<p>En hashfunksjon tar inn data av vilk\u00e5rlig lengde og gir ut en verdi med fast lengde. Inndataen kan v\u00e6re et passord, en fil, en hel database eller bare et enkelt tegn. Uansett blir resultatet et kort avtrykk, ofte kalt en hash eller en sjekksum. Tanken er enkel: lag et lite, h\u00e5ndterlig fingeravtrykk som representerer et st\u00f8rre innhold.<\/p>\n<p>Men ikke alle hashfunksjoner er like. En vanlig hashfunksjon, slik den brukes i en oppslagstabell i et dataprogram, har som m\u00e5l \u00e5 fordele verdier jevnt og v\u00e6re rask. En kryptografisk hashfunksjon har et helt annet ambisjonsniv\u00e5: den skal ogs\u00e5 motst\u00e5 aktive angripere som med vilje pr\u00f8ver \u00e5 lure den. Denne artikkelen handler om den siste typen og om hvilke egenskaper som skiller den fra en vanlig sjekksum.<\/p>\n<h2 id=\"kjerneegenskapene-til-en-kryptografisk-hash\">Kjerneegenskapene til en kryptografisk hash<\/h2>\n<p>For at en hashfunksjon skal kunne brukes til sikkerhet, m\u00e5 den oppfylle en rekke krav. Disse egenskapene henger sammen, og det er kombinasjonen av dem som gj\u00f8r funksjonen nyttig.<\/p>\n<h3 id=\"deterministisk\">Deterministisk<\/h3>\n<p>En kryptografisk hash er deterministisk. Den samme inndataen gir alltid n\u00f8yaktig samme hash, hver gang og p\u00e5 enhver maskin. Uten denne egenskapen ville det ikke g\u00e5 an \u00e5 sammenligne avtrykk, og funksjonen ville v\u00e6re ubrukelig til \u00e5 verifisere at noe er uendret.<\/p>\n<h3 id=\"rask-a-beregne\">Rask \u00e5 beregne<\/h3>\n<p>Det skal v\u00e6re billig og raskt \u00e5 regne ut hashen av en melding. Dette gj\u00f8r at funksjonen kan brukes i stor skala, for eksempel til \u00e5 sjekke mange filer eller behandle store datamengder. Samtidig finnes det situasjoner, som lagring av passord, der man bevisst gj\u00f8r prosessen tregere ved hjelp av spesialiserte funksjoner, nettopp for \u00e5 gj\u00f8re det dyrere for en angriper \u00e5 gjette seg frem.<\/p>\n<h3 id=\"preimage-motstand\">Preimage-motstand<\/h3>\n<p>Preimage-motstand betyr at det er praktisk umulig \u00e5 finne tilbake til inndataen ut fra hashen alene. Hashen skal v\u00e6re en enveis gate: lett \u00e5 g\u00e5 gjennom forover, urealistisk \u00e5 g\u00e5 baklengs. Hvis du bare har avtrykket, skal du ikke kunne regne deg frem til hva den opprinnelige meldingen var. Denne egenskapen er grunnen til at hasher kan brukes til \u00e5 lagre passord uten \u00e5 avsl\u00f8re dem.<\/p>\n<h3 id=\"andre-preimage-motstand\">Andre preimage-motstand<\/h3>\n<p>Andre preimage-motstand handler om en litt annen situasjon. Gitt en bestemt melding og dens hash, skal det v\u00e6re praktisk umulig \u00e5 finne en annen melding som gir samme hash. Med andre ord: en angriper som har et gyldig dokument, skal ikke kunne lage et alternativt dokument med samme avtrykk. Dette er avgj\u00f8rende n\u00e5r hashen brukes som bevis p\u00e5 at akkurat dette innholdet er ekte.<\/p>\n<h3 id=\"kollisjonsmotstand\">Kollisjonsmotstand<\/h3>\n<p>Kollisjonsmotstand er det sterkeste kravet. Det skal v\u00e6re praktisk umulig \u00e5 finne to forskjellige meldinger, hvilke som helst, som gir samme hash. Her st\u00e5r angriperen fritt til \u00e5 velge begge meldingene selv. Dette er et t\u00f8ffere krav enn andre preimage-motstand, fordi angriperen har flere frihetsgrader. Det var nettopp kollisjonsmotstanden til SHA-1 som ble brutt i 2017, da to ulike filer med samme SHA-1-verdi ble laget og vist frem offentlig.<\/p>\n<h3 id=\"lavineeffekt\">Lavineeffekt<\/h3>\n<p>Lavineeffekten betyr at den minste endring i inndataen gir et fullstendig annerledes resultat. Bytter du ett tegn, eller endrer en eneste bit, skal hele hashen forandre seg uten gjenkjennelig likhet med den forrige verdien. Denne egenskapen gj\u00f8r det enkelt \u00e5 oppdage selv \u00f8rsm\u00e5 endringer, og den hindrer en angriper i \u00e5 n\u00e6rme seg en \u00f8nsket hash gradvis ved \u00e5 gj\u00f8re sm\u00e5 justeringer.<\/p>\n<h2 id=\"hvordan-en-kryptografisk-hash-skiller-seg-fra-en-vanlig-hash\">Hvordan en kryptografisk hash skiller seg fra en vanlig hash<\/h2>\n<p>En vanlig, ikke-kryptografisk hashfunksjon er laget for ytelse og fordeling, ikke for \u00e5 st\u00e5 imot angrep. Den brukes for eksempel til \u00e5 plassere data raskt i en hashtabell, eller til en enkel sjekksum som fanger opp tilfeldige overf\u00f8ringsfeil. For slike form\u00e5l er det helt greit at funksjonen er forutsigbar og lett \u00e5 manipulere, fordi det ikke finnes noen motstander som pr\u00f8ver \u00e5 utnytte den.<\/p>\n<p>Forskjellen ligger i trusselmodellen. En kryptografisk hash m\u00e5 anta at noen aktivt fors\u00f8ker \u00e5 finne en kollisjon, reversere avtrykket eller bytte ut innhold uten \u00e5 endre hashen. Derfor er den designet slik at slike angrep blir praktisk umulige. En enkel sjekksum kan typisk lures med vilje av selv en lite avansert angriper, mens en kryptografisk hash er bygget for \u00e5 motst\u00e5 selv en motpart med store ressurser. N\u00e5r man trenger sikkerhet og ikke bare feilkontroll, er det den kryptografiske varianten som m\u00e5 brukes.<\/p>\n<h2 id=\"hvorfor-kollisjonsmotstand-er-det-vanskeligste-kravet\">Hvorfor kollisjonsmotstand er det vanskeligste kravet<\/h2>\n<p>De tre motstandsegenskapene henger sammen, men de er ikke like krevende \u00e5 bryte. Preimage-motstand og andre preimage-motstand handler begge om at angriperen er bundet til et fast m\u00e5l: en gitt hash, eller en gitt melding med sin hash. Han m\u00e5 treffe akkurat dette m\u00e5let, og det gj\u00f8r oppgaven sv\u00e6rt tung.<\/p>\n<p>Kollisjonsmotstand er annerledes, fordi angriperen her st\u00e5r fritt til \u00e5 velge begge meldingene selv. Han trenger ikke treffe en bestemt verdi p\u00e5 forh\u00e5nd, bare finne et hvilket som helst par som tilfeldigvis m\u00f8tes. Denne friheten gj\u00f8r det statistisk mye lettere \u00e5 finne en kollisjon enn \u00e5 treffe et forh\u00e5ndsbestemt avtrykk, et fenomen som er kjent fra sannsynlighetsregning under navnet bursdagsparadokset. Konsekvensen er at kollisjonsmotstand alltid er den svakeste flanken i en hashfunksjon, og det er derfor den brytes f\u00f8rst. Nettopp dette skjedde med SHA-1: det var kollisjonsmotstanden som falt i 2017, ikke evnen til \u00e5 motst\u00e5 reversering.<\/p>\n<p>For den som velger en hashfunksjon, betyr dette at man b\u00f8r se spesielt n\u00f8ye p\u00e5 kollisjonsmotstanden, s\u00e6rlig i bruksomr\u00e5der som digitale signaturer, der to dokumenter med samme hash er nok til \u00e5 gj\u00f8re alvorlig skade.<\/p>\n<h2 id=\"vanlige-bruksomrader\">Vanlige bruksomr\u00e5der<\/h2>\n<p>Kryptografiske hashfunksjoner dukker opp overalt der man trenger \u00e5 bevise at data er uendret eller \u00e5 lagre noe hemmelig p\u00e5 en forsvarlig m\u00e5te.<\/p>\n<ul>\n<li><strong>Passordlagring med salt.<\/strong> Tjenester b\u00f8r aldri lagre passord i klartekst. I stedet lagrer de hashen av passordet. N\u00e5r du logger inn, hashes passordet du oppgir og sammenlignes med den lagrede verdien. For \u00e5 hindre at like passord gir like avtrykk, og for \u00e5 gj\u00f8re forh\u00e5ndsberegnede angrep vanskeligere, legger man til en tilfeldig verdi som kalles salt f\u00f8r hashing. Til dette brukes gjerne spesialiserte, bevisst trege funksjoner.<\/li>\n<li><strong>Integritetssjekk.<\/strong> N\u00e5r du laster ned en fil, kan utgiveren oppgi hashen av den ekte filen. Du kan beregne hashen av din nedlastede kopi og sammenligne. Stemmer de, er filen sannsynligvis uendret. Avviker de, har noe g\u00e5tt galt eller blitt endret underveis.<\/li>\n<li><strong>Digitale signaturer.<\/strong> I stedet for \u00e5 signere et helt dokument, signerer man hashen av det. Det gj\u00f8r signaturen rask og kompakt. Samtidig betyr det at hele sikkerheten hviler p\u00e5 at det er umulig \u00e5 finne to dokumenter med samme hash. Derfor er kollisjonsmotstand s\u00e5 viktig nettopp her.<\/li>\n<li><strong>Blokkjeder.<\/strong> I en blokkjede knytter hver blokk seg til den forrige ved hjelp av en hash. Endrer noen en eldre blokk, endres hashen, og bruddet i kjeden blir synlig. Slik bygger hashfunksjoner en kjede der historikken er vanskelig \u00e5 forfalske uten \u00e5 bli oppdaget.<\/li>\n<\/ul>\n<h2 id=\"nar-en-hashfunksjon-ma-byttes-ut\">N\u00e5r en hashfunksjon m\u00e5 byttes ut<\/h2>\n<p>Egenskapene over er idealer som en hashfunksjon skal oppfylle. Problemet er at en funksjon som oppfyller dem i dag, ikke n\u00f8dvendigvis gj\u00f8r det for alltid. Forskning kan avdekke svakheter, og raskere maskinvare kan gj\u00f8re angrep som f\u00f8r var urealistiske, fullt mulige. SHA-1 er det tydeligste eksempelet: den hadde god kollisjonsmotstand i teorien, helt til den ikke lenger hadde det i praksis.<\/p>\n<p>L\u00e6rdommen er at valg av hashfunksjon er en beslutning som m\u00e5 holdes ved like. N\u00e5r en funksjon viser tegn til svakhet, s\u00e6rlig i kollisjonsmotstanden, er det p\u00e5 tide \u00e5 g\u00e5 over til en sterkere. I dag er funksjoner i SHA-2-familien, som SHA-256, og den nyere SHA-3 anbefalte valg der man trenger en kryptografisk hash. \u00c5 forst\u00e5 egenskapene som ligger til grunn, gj\u00f8r det lettere \u00e5 se hvorfor slike overganger er n\u00f8dvendige, og hvorfor en hash er mye mer enn bare en kort sjekksum.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hva er en hashfunksjon? En hashfunksjon tar inn data av vilk\u00e5rlig lengde og gir ut en verdi med fast lengde. Inndataen kan v\u00e6re et passord, en fil, en hel database\u2026<\/p>\n","protected":false},"author":2,"featured_media":24,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-11","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/posts\/11\/revisions\/27"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media\/24"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/no\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}