Hva er en digital signatur?

En digital signatur er en kryptografisk metode for å bevise to ting samtidig: at en melding virkelig kommer fra den oppgitte avsenderen, og at den ikke er endret underveis. Den fyller mye av den samme rollen som en håndskrevet underskrift, men er langt vanskeligere å forfalske, og den er knyttet direkte til selve innholdet i meldingen.

Digitale signaturer er en grunnstein i tilliten på nett. De ligger bak sertifikatene som sikrer nettforbindelser, bak signert programvare og bak mange former for elektronisk dokumentutveksling. To byggeklosser gjør dette mulig: en kryptografisk hashfunksjon og et par med asymmetriske nøkler. I denne artikkelen ser vi på hvordan de spiller sammen, og hvorfor en kollisjon i hashfunksjonen kan true hele ordningen.

Asymmetriske nøkler: et par som hører sammen

Digitale signaturer bygger på asymmetrisk kryptografi. I motsetning til en delt hemmelighet bruker dette to forskjellige, men matematisk sammenkoblede nøkler:

  • En privat nøkkel som eieren holder strengt hemmelig.
  • En offentlig nøkkel som kan deles fritt med hvem som helst.

Det som er signert med den private nøkkelen, kan kontrolleres med den tilhørende offentlige nøkkelen, men ikke omvendt. Den offentlige nøkkelen lar andre bekrefte en signatur, men gir dem ikke mulighet til å lage nye signaturer i eierens navn. Hele sikkerheten hviler på at den private nøkkelen forblir hemmelig. Mister eieren kontroll over den, kan en angriper signere i eierens sted.

Hvorfor hashfunksjonen er med

Man kunne i teorien tenke seg å signere hele meldingen direkte, men i praksis signerer man ikke selve dokumentet. I stedet beregnes først en kryptografisk hash av meldingen, et kort avtrykk med fast lengde, og det er denne hashen som signeres med den private nøkkelen.

Det er flere grunner til dette. For det første er meldinger ofte store, mens en hash er kort. Å signere et lite avtrykk er mye raskere og mer praktisk enn å bearbeide hele innholdet. For det andre gir hashen et fast format uavhengig av hvor lang eller kort meldingen er. Og fordi en god hashfunksjon har sterk lavineeffekt, vil enhver endring i meldingen, selv en eneste bit, gi et helt annet avtrykk. Dermed vil en endret melding ikke lenger passe til signaturen.

Resultatet er at signaturen knytter seg til nøyaktig dette innholdet. Hashen fungerer som et stedfortredende fingeravtrykk: signerer du avtrykket, har du i praksis signert meldingen, så lenge avtrykket entydig representerer innholdet.

Slik foregår signering og verifisering

Prosessen kan deles i to deler: avsenderen signerer, og mottakeren kontrollerer.

Signering med privat nøkkel

Når avsenderen vil signere en melding, skjer følgende. Først beregnes en kryptografisk hash av meldingen. Deretter bearbeides denne hashen med avsenderens private nøkkel, og resultatet blir selve signaturen. Signaturen sendes vanligvis sammen med meldingen. Avsenderen kan også dele, eller henvise til, sin offentlige nøkkel slik at andre kan kontrollere signaturen.

Verifisering med offentlig nøkkel

Mottakeren som vil kontrollere signaturen, gjør to ting. Han beregner selv hashen av meldingen han har mottatt, helt uavhengig. Deretter bruker han avsenderens offentlige nøkkel på signaturen for å utlede hvilket avtrykk signaturen svarer til. Til slutt sammenlignes de to. Hvis avtrykket mottakeren regnet ut, stemmer med det signaturen peker på, vet han to ting: meldingen er uendret siden den ble signert, og den må ha blitt signert med den private nøkkelen som hører til den offentlige nøkkelen han brukte. Stemmer de ikke, er enten meldingen endret, eller så er signaturen ikke ekte.

Det fine med denne ordningen er at hvem som helst kan kontrollere signaturen med den offentlige nøkkelen, mens bare eieren av den private nøkkelen kan lage en gyldig signatur i utgangspunktet.

Hva en digital signatur faktisk garanterer

En gyldig digital signatur gir tre ting på én gang, og det er nyttig å holde dem fra hverandre.

For det første gir den integritet: meldingen er ikke endret siden den ble signert. Endrer noen så mye som ett tegn, endres avtrykket, og signaturen passer ikke lenger. For det andre gir den autentisitet: signaturen kan bare ha blitt laget med den private nøkkelen som hører til den offentlige nøkkelen mottakeren bruker, så den knytter meldingen til en bestemt nøkkeleier. For det tredje gir den et grunnlag for ikke-benektelse: ettersom bare eieren har den private nøkkelen, er det vanskelig for ham i ettertid å nekte for å ha signert meldingen.

Disse tre egenskapene forutsetter alle at den private nøkkelen er holdt hemmelig, og at hashfunksjonen er sterk. Svikter noen av disse forutsetningene, svikter garantiene med dem. Det er også grunnen til at håndtering og beskyttelse av private nøkler er et eget tema i praksis: en lekket privat nøkkel lar en angriper signere i eierens navn, helt uavhengig av hvor god hashfunksjonen er.

Hvorfor en hash-kollisjon truer signaturer

Hele tryggheten i en digital signatur hviler på en stilltiende antakelse: at hashen entydig representerer innholdet. Signaturen dekker jo strengt tatt bare avtrykket, ikke hele meldingen direkte. Så lenge det er umulig å finne to meldinger med samme hash, er dette helt trygt, fordi en gyldig signatur over et avtrykk i praksis bare kan passe til den ene meldingen som ga det avtrykket.

Men hvis hashfunksjonen er sårbar for kollisjoner, faller denne antakelsen. Tenk deg at en angriper klarer å lage to dokumenter med nøyaktig samme hash, ett harmløst og ett skadelig. Han kan da få det harmløse dokumentet signert, for eksempel ved å sende det til en intetanende part for godkjenning. Etterpå bytter han ut dokumentet med den skadelige varianten. Fordi de to har samme hash, gjelder den opprinnelige signaturen fortsatt for det nye innholdet. En mottaker som kontrollerer signaturen, vil få et gyldig resultat og bli lurt til å tro at det skadelige dokumentet er ekte og godkjent.

Dette er ikke et tenkt scenario uten forankring. I 2017 ble den første praktiske kollisjonen for SHA-1 demonstrert, kalt SHAttered, der to forskjellige PDF-filer fikk samme SHA-1-verdi. Det var nettopp denne typen trussel som gjorde funnet så alvorlig for alle systemer som signerte SHA-1-avtrykk. En signatur er aldri sterkere enn hashfunksjonen den bygger på. Derfor ble SHA-1 frarådet til signering, og sterkere funksjoner som SHA-256 tok over.

Sertifikater og kodesignering i praksis

To av de mest synlige bruksområdene for digitale signaturer er sertifikater og kodesignering.

Et digitalt sertifikat binder en identitet, for eksempel et domenenavn, til en offentlig nøkkel. Sertifikatet er selv signert av en betrodd utsteder. Når nettleseren din kobler seg til et nettsted, kontrollerer den signaturen på sertifikatet for å bekrefte at den offentlige nøkkelen virkelig tilhører domenet. Dette er en av grunnene til at overgangen fra SHA-1 til SHA-256 i sertifikater var så viktig: en svak hashfunksjon her ville undergrave tilliten til hele forbindelsen.

Kodesignering fungerer etter samme prinsipp. Når en utvikler signerer et program eller en oppdatering, lages et hash-avtrykk av filen, og dette signeres med utviklerens private nøkkel. Når du installerer programmet, kan systemet kontrollere signaturen og dermed bekrefte at filen kommer fra riktig avsender og ikke er endret. Endrer noen så mye som en byte i filen, stemmer ikke lenger avtrykket, og signaturen blir ugyldig. Men dersom hashfunksjonen tillater kollisjoner, kunne en angriper i prinsippet smugle inn endret kode under en signatur som fortsatt ser gyldig ut.

Tillit bygget på to byggeklosser

Digitale signaturer viser hvordan to enkle ideer, en enveis hashfunksjon og et par med asymmetriske nøkler, til sammen gir noe svært kraftfullt: et bevis på både avsender og uendret innhold som hvem som helst kan kontrollere, men nesten ingen kan forfalske. Hashfunksjonen sørger for at signaturen er knyttet til nøyaktig dette innholdet, og nøkkelparet sørger for at bare rett eier kan signere.

Samtidig understreker historien om SHAttered hvor avhengig denne ordningen er av en sterk hashfunksjon. Den dagen avtrykket ikke lenger er unikt, slår sikkerheten sprekker. Derfor er valget av hashfunksjon ikke en teknisk detalj, men en forutsetning for at en digital signatur i det hele tatt skal være verdt å stole på.