{"id":10,"date":"2026-06-10T09:12:32","date_gmt":"2026-06-10T09:12:32","guid":{"rendered":"https:\/\/shattered.io\/dk\/2026\/06\/10\/digitale-signaturer\/"},"modified":"2026-06-10T12:33:06","modified_gmt":"2026-06-10T12:33:06","slug":"digitale-signaturer","status":"publish","type":"post","link":"https:\/\/shattered.io\/dk\/cryptography\/digitale-signaturer\/","title":{"rendered":"Digitale signaturer: hvordan hashing og n\u00f8gler skaber tillid"},"content":{"rendered":"<h2 id=\"hvad-er-en-digital-signatur\">Hvad er en digital signatur?<\/h2>\n<p>En digital signatur er en kryptografisk metode til at bevise to ting p\u00e5 \u00e9n gang: at en besked virkelig stammer fra den, der h\u00e6vder at have sendt den, og at beskeden ikke er blevet \u00e6ndret undervejs. Den fungerer som en digital pendant til en h\u00e5ndskreven underskrift, men er langt st\u00e6rkere, fordi den binder underskriften matematisk til selve indholdet.<\/p>\n<p>Digitale signaturer hviler p\u00e5 to byggesten: kryptografiske hashfunktioner og asymmetriske n\u00f8gler. Tilsammen g\u00f8r de det muligt at underskrive noget p\u00e5 en m\u00e5de, som alle kan kontrollere, men ingen kan forfalske uden den rette hemmelige n\u00f8gle.<\/p>\n<h2 id=\"de-to-byggesten\">De to byggesten<\/h2>\n<h3 id=\"hashfunktionen\">Hashfunktionen<\/h3>\n<p>En hashfunktion omdanner en besked af vilk\u00e5rlig st\u00f8rrelse til et fingeraftryk af fast l\u00e6ngde, en digest. Den er deterministisk, s\u00e5 det samme input altid giver det samme hash, og den har en st\u00e6rk lavineeffekt, s\u00e5 selv den mindste \u00e6ndring i beskeden giver et helt andet hash. Det er disse egenskaber, der g\u00f8r hashet egnet som en kompakt stedfortr\u00e6der for hele beskeden.<\/p>\n<h3 id=\"asymmetriske-nogler\">Asymmetriske n\u00f8gler<\/h3>\n<p>Asymmetrisk kryptografi bruger et n\u00f8glepar: en privat n\u00f8gle, som ejeren holder hemmelig, og en offentlig n\u00f8gle, som frit kan deles. De to n\u00f8gler h\u00e6nger matematisk sammen, men man kan i praksis ikke udlede den private n\u00f8gle fra den offentlige. Det, der l\u00e5ses med den ene, kan kun behandles korrekt med den anden. I forbindelse med signaturer betyder det, at noget skabt med den private n\u00f8gle kan kontrolleres med den offentlige.<\/p>\n<p>Netop fordi n\u00f8glerne er adskilte, kan en afsender dele sin offentlige n\u00f8gle med hele verden uden at sv\u00e6kke sikkerheden. Enhver kan bruge den til at kontrollere en signatur, men ingen kan bruge den til at fremstille en. Det er denne asymmetri, der g\u00f8r digitale signaturer mulige: kontrol er \u00e5ben for alle, mens selve underskriften forbliver forbeholdt den, der besidder den hemmelige n\u00f8gle. Holdes den private n\u00f8gle virkelig hemmelig, er det praktisk umuligt for andre at forfalske en gyldig signatur.<\/p>\n<h2 id=\"sadan-signeres-en-besked\">S\u00e5dan signeres en besked<\/h2>\n<p>Det er fristende at tro, at man krypterer hele beskeden, n\u00e5r man signerer den, men s\u00e5dan fungerer det normalt ikke. I stedet sker signeringen i to trin:<\/p>\n<ol>\n<li><strong>Beregn hashet.<\/strong> F\u00f8rst k\u00f8rer afsenderen beskeden gennem en hashfunktion og f\u00e5r et fingeraftryk af fast l\u00e6ngde. Uanset om beskeden er en kort s\u00e6tning eller et stort dokument, bliver resultatet en kompakt digest.<\/li>\n<li><strong>Signer hashet med den private n\u00f8gle.<\/strong> Dern\u00e6st anvender afsenderen sin private n\u00f8gle p\u00e5 dette hash. Resultatet er den digitale signatur, som sendes med sammen med beskeden.<\/li>\n<\/ol>\n<p>Grunden til, at man signerer hashet og ikke hele beskeden, er b\u00e5de effektivitet og praktik. Det er hurtigere at arbejde med en lille digest end med en stor besked, og resultatet er lige s\u00e5 sikkert, forudsat at hashfunktionen er st\u00e6rk. Hashet repr\u00e6senterer hele beskeden, s\u00e5 en signatur over hashet er i praksis en signatur over indholdet.<\/p>\n<p>Denne arbejdsdeling forklarer ogs\u00e5, hvorfor signaturen fungerer lige godt, uanset om man underskriver en kort e-mail eller et stort installationsprogram. Hashfunktionen reducerer altid inputtet til et fingeraftryk af samme faste l\u00e6ngde, s\u00e5 den asymmetriske del af arbejdet har lige meget at g\u00f8re i begge tilf\u00e6lde. Beskedens st\u00f8rrelse p\u00e5virker dermed kun den hurtige hashberegning, ikke den tungere n\u00f8gleoperation. Det er en af grundene til, at netop kombinationen af en hashfunktion og et n\u00f8glepar er blevet den dominerende m\u00e5de at lave signaturer p\u00e5.<\/p>\n<h2 id=\"sadan-verificeres-en-signatur\">S\u00e5dan verificeres en signatur<\/h2>\n<p>Modtageren skal kunne kontrollere, at signaturen er \u00e6gte, og at beskeden ikke er \u00e6ndret. Det sker ogs\u00e5 i to trin:<\/p>\n<ol>\n<li><strong>Beregn hashet selv.<\/strong> Modtageren k\u00f8rer den modtagne besked gennem den samme hashfunktion og f\u00e5r et fingeraftryk.<\/li>\n<li><strong>Kontroller signaturen med den offentlige n\u00f8gle.<\/strong> Ved hj\u00e6lp af afsenderens offentlige n\u00f8gle udledes det hash, der oprindeligt blev signeret. Stemmer dette overens med det hash, modtageren selv beregnede, er signaturen gyldig.<\/li>\n<\/ol>\n<p>Hvis de to hash er ens, ved modtageren to ting. For det f\u00f8rste kommer signaturen fra en, der havde adgang til den private n\u00f8gle, eftersom kun den n\u00f8gle kunne frembringe en signatur, der passer til den offentlige. For det andet er beslutningen ikke \u00e6ndret, for var bare en byte blevet rettet, ville modtagerens hash v\u00e6re forskelligt p\u00e5 grund af lavineeffekten, og kontrollen ville fejle.<\/p>\n<p>Det er denne dobbelte garanti, der g\u00f8r digitale signaturer s\u00e5 nyttige: de bekr\u00e6fter b\u00e5de afsenderens identitet og indholdets uforanderlighed i \u00e9n og samme handling.<\/p>\n<p>En tredje egenskab f\u00f8lger naturligt af de to f\u00f8rste, nemlig uafviselighed. Eftersom kun indehaveren af den private n\u00f8gle kan have skabt en gyldig signatur, kan vedkommende vanskeligt bagefter ben\u00e6gte at have underskrevet. Det g\u00f8r digitale signaturer velegnede d\u00e9r, hvor det skal kunne dokumenteres, hvem der stod bag en handling, for eksempel ved aftaler eller udgivelse af software. Foruds\u00e6tningen er naturligvis, at den private n\u00f8gle ikke er kommet p\u00e5 afveje, for en kompromitteret n\u00f8gle underminerer hele garantien.<\/p>\n<h2 id=\"hvorfor-en-kollision-truer-signaturer\">Hvorfor en kollision truer signaturer<\/h2>\n<p>Hele sikkerheden ved en digital signatur afh\u00e6nger af, at hashfunktionen er st\u00e6rk. Helt konkret afh\u00e6nger den af, at man ikke kan finde to forskellige beskeder med samme hash. Hvis denne kollisionsmodstand brydes, opst\u00e5r der et alvorligt hul.<\/p>\n<p>Forestil dig, at en angriber konstruerer to dokumenter med samme hash. Det ene er harml\u00f8st, det andet skadeligt. Angriberen f\u00e5r offeret til at signere det harml\u00f8se dokument. Fordi de to dokumenter deler hash, og signaturen reelt er sat p\u00e5 hashet, g\u00e6lder den nu lige s\u00e5 godt for det skadelige dokument. Angriberen kan derefter pr\u00e6sentere det skadelige dokument sammen med den \u00e6gte signatur, og enhver kontrol baseret p\u00e5 hashet vil acceptere det.<\/p>\n<p>Det er pr\u00e6cis derfor, SHAttered-angrebet fra 2017 var s\u00e5 vigtigt. Det fremstillede to forskellige PDF-filer med det samme SHA-1-hash og viste dermed, at SHA-1 ikke l\u00e6ngere kunne b\u00e6re v\u00e6gten af en digital signatur. En signatur er aldrig st\u00e6rkere end den hashfunktion, den bygger p\u00e5. Falder hashfunktionen, falder signaturens trov\u00e6rdighed med den.<\/p>\n<h2 id=\"certifikater-og-kodesignering-i-praksis\">Certifikater og kodesignering i praksis<\/h2>\n<p>Digitale signaturer er ikke et abstrakt begreb. De er i daglig brug rundt om i den digitale infrastruktur.<\/p>\n<h3 id=\"certifikater\">Certifikater<\/h3>\n<p>N\u00e5r din browser opretter en sikker forbindelse, fremviser serveren et certifikat, der knytter dens identitet til en offentlig n\u00f8gle. Certifikatet er underskrevet af en certifikatudsteder, og din browser kontrollerer den signatur. Hele tillidsk\u00e6den bygger p\u00e5, at signaturerne i certifikaterne er \u00e6gte, hvilket igen kr\u00e6ver en st\u00e6rk hashfunktion. Da SHA-1 svigtede, var det netop derfor, certifikater baseret p\u00e5 den blev udfaset til fordel for SHA-256.<\/p>\n<h3 id=\"kodesignering\">Kodesignering<\/h3>\n<p>Udgivere af software underskriver deres programmer, s\u00e5 brugere og styresystemer kan kontrollere, at koden stammer fra den rette kilde og ikke er blevet manipuleret efter udgivelsen. N\u00e5r du installerer et signeret program, beregnes hashet, og signaturen kontrolleres mod udgiverens offentlige n\u00f8gle. Er bare en del af programmet \u00e6ndret, fejler kontrollen. Kodesignering er en af grundene til, at man kan stole p\u00e5, at en opdatering faktisk kommer fra den oprindelige leverand\u00f8r.<\/p>\n<h2 id=\"den-korte-konklusion\">Den korte konklusion<\/h2>\n<p>En digital signatur kombinerer en hashfunktion med et asymmetrisk n\u00f8glepar for at bevise b\u00e5de hvem der har underskrevet, og at indholdet er u\u00e6ndret. Man signerer hashet af beskeden med sin private n\u00f8gle, og modtageren kontrollerer det med den offentlige. Styrken hviler helt p\u00e5 hashfunktionen: kan nogen finde kollisioner, kan en signatur flyttes fra et harml\u00f8st til et skadeligt dokument. SHAttered gjorde netop dette muligt for SHA-1 og blev en tydelig p\u00e5mindelse om, hvorfor signaturer skal bygge p\u00e5 en st\u00e6rk og tidssvarende hashfunktion som SHA-256.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Hvad er en digital signatur? En digital signatur er en kryptografisk metode til at bevise to ting p\u00e5 \u00e9n gang: at en besked virkelig stammer fra den, der h\u00e6vder at\u2026<\/p>\n","protected":false},"author":2,"featured_media":25,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[2],"tags":[],"class_list":["post-10","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-cryptography"],"_links":{"self":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/10","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/comments?post=10"}],"version-history":[{"count":1,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/10\/revisions"}],"predecessor-version":[{"id":26,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/posts\/10\/revisions\/26"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media\/25"}],"wp:attachment":[{"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/media?parent=10"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/categories?post=10"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/shattered.io\/dk\/wp-json\/wp\/v2\/tags?post=10"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}