{"id":11,"date":"2026-06-10T09:14:43","date_gmt":"2026-06-10T09:14:43","guid":{"rendered":"https:\/\/shattered.io\/se\/2026\/06\/10\/hashfunktioner\/"},"modified":"2026-06-10T12:36:00","modified_gmt":"2026-06-10T12:36:00","slug":"hashfunktioner","status":"publish","type":"post","link":"https:\/\/shattered.io\/se\/cryptography\/hashfunktioner\/","title":{"rendered":"Kryptografiska hashfunktioner: egenskaper och anv\u00e4ndning"},"content":{"rendered":"<h2 id=\"vad-en-hashfunktion-gor\">Vad en hashfunktion g\u00f6r<\/h2>\n<p>En hashfunktion tar emot data av godtycklig storlek och producerar ett resultat av fast l\u00e4ngd. Resultatet kallas hashv\u00e4rde, hashsumma eller fingeravtryck. Oavsett om indatan \u00e4r ett enda ord eller en stor fil f\u00e5r hashv\u00e4rdet samma l\u00e4ngd, och det fungerar som ett kompakt avtryck av den ursprungliga datan.<\/p>\n<p>Alla hashfunktioner \u00e4r dock inte byggda f\u00f6r s\u00e4kerhet. Enkla hashfunktioner anv\u00e4nds till exempel f\u00f6r att f\u00f6rdela data i en hashtabell, d\u00e4r m\u00e5let bara \u00e4r snabb uppslagning och en j\u00e4mn spridning. En kryptografisk hashfunktion st\u00e4ller betydligt h\u00e5rdare krav. Den ska inte bara sprida data j\u00e4mnt, utan ocks\u00e5 st\u00e5 emot en motst\u00e5ndare som aktivt f\u00f6rs\u00f6ker lura den. Det \u00e4r skillnaden mellan de tv\u00e5 som den h\u00e4r artikeln handlar om.<\/p>\n<h2 id=\"karnegenskaperna-hos-en-kryptografisk-hashfunktion\">K\u00e4rnegenskaperna hos en kryptografisk hashfunktion<\/h2>\n<p>En kryptografisk hashfunktion definieras av en upps\u00e4ttning egenskaper. Tillsammans g\u00f6r de att ett hashv\u00e4rde kan anv\u00e4ndas som ett p\u00e5litligt fingeravtryck.<\/p>\n<h3 id=\"deterministisk\">Deterministisk<\/h3>\n<p>Funktionen \u00e4r deterministisk. Samma indata ger alltid exakt samma hashv\u00e4rde. Utan denna egenskap skulle det vara meningsl\u00f6st att j\u00e4mf\u00f6ra hashv\u00e4rden, eftersom samma data skulle kunna ge olika resultat vid olika tillf\u00e4llen. Determinismen g\u00f6r att tv\u00e5 parter kan ber\u00e4kna hashv\u00e4rdet var f\u00f6r sig och \u00e4nd\u00e5 komma fram till samma v\u00e4rde om datan \u00e4r identisk.<\/p>\n<h3 id=\"snabb-att-berakna\">Snabb att ber\u00e4kna<\/h3>\n<p>Funktionen ska vara snabb att ber\u00e4kna i framriktningen. Att ta fram hashv\u00e4rdet f\u00f6r en stor fil ska g\u00e5 undan, annars blir den opraktisk i de system som beh\u00f6ver hantera mycket data. Snabbheten i framriktningen f\u00e5r dock inte inneb\u00e4ra att det ocks\u00e5 g\u00e5r snabbt att g\u00e5 bakl\u00e4nges, vilket n\u00e4sta egenskap handlar om.<\/p>\n<h3 id=\"motstand-mot-urbild\">Motst\u00e5nd mot urbild<\/h3>\n<p>Funktionen ska ge motst\u00e5nd mot urbild. Givet ett hashv\u00e4rde ska det vara praktiskt ogenomf\u00f6rbart att hitta n\u00e5gon indata som producerar just det v\u00e4rdet. Med andra ord g\u00e5r det inte att v\u00e4nda funktionen bakl\u00e4nges. Det \u00e4r denna egenskap som g\u00f6r att ett hashv\u00e4rde kan publiceras \u00f6ppet, eller att ett l\u00f6senord kan lagras som hashv\u00e4rde, utan att den underliggande datan avsl\u00f6jas.<\/p>\n<h3 id=\"motstand-mot-andra-urbild\">Motst\u00e5nd mot andra urbild<\/h3>\n<p>Funktionen ska ge motst\u00e5nd mot andra urbild. Givet en best\u00e4md indata, och d\u00e4rmed dess hashv\u00e4rde, ska det vara praktiskt ogenomf\u00f6rbart att hitta en annan indata som r\u00e5kar ge samma hashv\u00e4rde. Den h\u00e4r egenskapen skyddar mot att n\u00e5gon byter ut en specifik fil mot en annan med samma fingeravtryck.<\/p>\n<h3 id=\"kollisionsmotstand\">Kollisionsmotst\u00e5nd<\/h3>\n<p>Funktionen ska ge kollisionsmotst\u00e5nd. Det ska vara praktiskt ogenomf\u00f6rbart att hitta tv\u00e5 olika indata som ger samma hashv\u00e4rde, oavsett vilka. Skillnaden mot motst\u00e5nd mot andra urbild \u00e4r subtil men viktig: h\u00e4r f\u00e5r angriparen fritt v\u00e4lja b\u00e5da indata, och beh\u00f6ver inte utg\u00e5 fr\u00e5n en given fil. Kollisionsmotst\u00e5nd \u00e4r ofta den sv\u00e5raste egenskapen att uppr\u00e4tth\u00e5lla, och det var precis den som f\u00f6ll f\u00f6r SHA-1 n\u00e4r en praktisk kollision demonstrerades 2017.<\/p>\n<h3 id=\"lavineffekten\">Lavineffekten<\/h3>\n<p>Funktionen ska uppvisa en lavineffekt. En minimal \u00e4ndring i indatan, till exempel en enda \u00e4ndrad bokstav, ska ge ett helt annorlunda hashv\u00e4rde som inte liknar det gamla. Effekten g\u00f6r att \u00e4ven den allra minsta manipulation i en fil syns tydligt i hashv\u00e4rdet, och den bidrar till att resultatet ser slumpm\u00e4ssigt ut.<\/p>\n<h2 id=\"hur-de-skiljer-sig-fran-icke-kryptografiska-hashfunktioner\">Hur de skiljer sig fr\u00e5n icke-kryptografiska hashfunktioner<\/h2>\n<p>En icke-kryptografisk hashfunktion, som de som anv\u00e4nds i en hashtabell eller f\u00f6r en enkel kontrollsumma, \u00e4r optimerad f\u00f6r hastighet och j\u00e4mn f\u00f6rdelning. Den bryr sig inte om en aktiv motst\u00e5ndare. Det kan vara fullt godtagbart att tv\u00e5 olika indata ibland ger samma resultat, eftersom systemet \u00e4nd\u00e5 hanterar s\u00e5dana kollisioner, och det \u00e4r ofta l\u00e4tt att medvetet konstruera indata som krockar.<\/p>\n<p>En kryptografisk hashfunktion antar i st\u00e4llet att n\u00e5gon aktivt f\u00f6rs\u00f6ker hitta kollisioner eller v\u00e4nda funktionen bakl\u00e4nges, och den \u00e4r byggd f\u00f6r att st\u00e5 emot det. Det \u00e4r d\u00e4rf\u00f6r man aldrig ska anv\u00e4nda en enkel kontrollsumma eller en hashtabellfunktion f\u00f6r s\u00e4kerhets\u00e4ndam\u00e5l som l\u00f6senordslagring eller signaturer. De \u00e4r gjorda f\u00f6r olika problem. En enkel kontrollsumma f\u00e5ngar slumpm\u00e4ssiga \u00f6verf\u00f6ringsfel, men erbjuder inget skydd mot en motst\u00e5ndare som avsiktligt vill skapa en kollision.<\/p>\n<h2 id=\"vanliga-anvandningsomraden\">Vanliga anv\u00e4ndningsomr\u00e5den<\/h2>\n<p>Kryptografiska hashfunktioner finns under ytan i en stor del av modern programvara.<\/p>\n<h3 id=\"losenordslagring-med-salt\">L\u00f6senordslagring med salt<\/h3>\n<p>En ansvarsfullt byggd tj\u00e4nst lagrar aldrig l\u00f6senord i klartext. I st\u00e4llet sparar den ett hashv\u00e4rde av l\u00f6senordet. F\u00f6r att skydda mot f\u00f6rber\u00e4knade tabeller l\u00e4ggs ett unikt slumpv\u00e4rde, ett s\u00e5 kallat salt, till varje l\u00f6senord innan det hashas. Saltet g\u00f6r att tv\u00e5 anv\u00e4ndare med samma l\u00f6senord \u00e4nd\u00e5 f\u00e5r olika hashv\u00e4rden, och att en angripare inte kan \u00e5teranv\u00e4nda arbete mellan konton. F\u00f6r just l\u00f6senord anv\u00e4nds dessutom ofta funktioner som medvetet \u00e4r l\u00e5ngsamma, f\u00f6r att g\u00f6ra storskaliga gissningsattacker dyrare. Om databasen l\u00e4cker blir det betydligt sv\u00e5rare f\u00f6r en angripare att \u00e5terskapa de ursprungliga l\u00f6senorden.<\/p>\n<h3 id=\"kontroll-av-integritet\">Kontroll av integritet<\/h3>\n<p>Hashv\u00e4rden anv\u00e4nds flitigt f\u00f6r att kontrollera att data inte har \u00e4ndrats. En utgivare publicerar hashv\u00e4rdet av en fil, och mottagaren ber\u00e4knar v\u00e4rdet p\u00e5 sin egen kopia och j\u00e4mf\u00f6r. St\u00e4mmer de \u00f6verens \u00e4r filen med mycket stor sannolikhet of\u00f6r\u00e4ndrad. Det f\u00e5ngar b\u00e5de slumpm\u00e4ssiga \u00f6verf\u00f6ringsfel och avsiktlig manipulation, f\u00f6rutsatt att hashfunktionen fortfarande \u00e4r s\u00e4ker.<\/p>\n<h3 id=\"digitala-signaturer\">Digitala signaturer<\/h3>\n<p>I en digital signatur signeras inte hela meddelandet direkt, utan ett hashv\u00e4rde av meddelandet. Hashfunktionen komprimerar meddelandet till ett fingeravtryck av fast l\u00e4ngd, och det \u00e4r fingeravtrycket som signeras med en privat nyckel. Hela konstruktionen vilar p\u00e5 att hashfunktionen \u00e4r kollisionsbest\u00e4ndig, eftersom en kollision annars skulle g\u00f6ra det m\u00f6jligt att flytta en giltig signatur till ett annat meddelande.<\/p>\n<h3 id=\"blockkedjor\">Blockkedjor<\/h3>\n<p>I en blockkedja knyts blocken samman med hj\u00e4lp av hashv\u00e4rden. Varje block inneh\u00e5ller hashv\u00e4rdet av det f\u00f6reg\u00e5ende blocket, vilket skapar en kedja. En \u00e4ndring i ett gammalt block skulle \u00e4ndra dess hashv\u00e4rde och d\u00e4rmed bryta alla efterf\u00f6ljande l\u00e4nkar, vilket g\u00f6r manipulation av historiken l\u00e4tt att uppt\u00e4cka.<\/p>\n<h2 id=\"att-valja-en-saker-hashfunktion\">Att v\u00e4lja en s\u00e4ker hashfunktion<\/h2>\n<p>Att en hashfunktion en g\u00e5ng ans\u00e5gs s\u00e4ker betyder inte att den f\u00f6rblir det. SHA-1 \u00e4r det tydligaste exemplet: den anv\u00e4ndes brett i m\u00e5nga \u00e5r, men teoretiska svagheter ledde till slut fram till en praktisk kollision, och funktionen anses inte l\u00e4ngre s\u00e4ker f\u00f6r \u00e4ndam\u00e5l som kr\u00e4ver kollisionsmotst\u00e5nd. I dag \u00e4r SHA-2-familjen, d\u00e4ribland SHA-256, det vanliga valet, och SHA-3 finns som ett alternativ med en annan underliggande konstruktion. Den som bygger system b\u00f6r f\u00f6lja aktuella rekommendationer och byta funktion i god tid, snarare \u00e4n att v\u00e4nta tills en svaghet redan har utnyttjats.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Vad en hashfunktion g\u00f6r En hashfunktion tar emot data av godtycklig storlek och producerar ett resultat av fast l\u00e4ngd. Resultatet kallas hashv\u00e4rde, hashsumma eller fingeravtryck. Oavsett om indatan \u00e4r ett\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\/se\/wp-json\/wp\/v2\/posts\/11","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/comments?post=11"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/11\/revisions"}],"predecessor-version":[{"id":27,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/posts\/11\/revisions\/27"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/media\/24"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/media?parent=11"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/categories?post=11"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/se\/wp-json\/wp\/v2\/tags?post=11"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}