Definition: Hvad er Diffie-Hellman key exchange?
Diffie-Hellman key exchange (ofte forkortet DH) er en metode, hvor to parter kan etablere en fælles hemmelighed over en kommunikationskanal, som angribere kan lytte til. Pointen er, at ingen af parterne behøver at sende den fælles hemmelighed direkte. I stedet bygger de deres fælles værdi op ved hjælp af matematiske operationer på offentlige oplysninger og hver parts hemmelige bidrag.
Den fælles hemmelighed bruges ofte som udgangspunkt for at aflede en sessionnøgle, som derefter kan bruges til at kryptere og/eller autentificere data. DH alene er dog ikke automatisk “sikker kommunikation”; der mangler typisk et ekstra lag autentikation.
Enkelt model: sådan opstår en fælles hemmelighed
Tænk på følgende grundidé, uden at binde sig til en bestemt parameteropsætning:
- Parterne er enige om nogle offentlige systemparametre.
- Hver part vælger en privat hemmelig værdi (ofte kaldet “private key”/hemmelig exponent) og beregner en tilsvarende offentlig værdi.
- De offentliggjorte værdier sendes over netværket. Selv hvis en tredjepart ser dem, kan den ikke genskabe den fælles hemmelighed uden at kende de private værdier.
- Ved at kombinere den modtagne offentlige værdi med sin egen private værdi kan hver part beregne den samme fælles hemmelighed.
Det afgørende er, at den fælles værdi kan beregnes lokalt på hver side, men at en lytter kun har de offentlige komponenter.
De vigtigste dele og begreber
Når man “skaber en sikker forbindelse” med DH i praksis, handler det sjældent kun om selve nøgleudvekslingen. Der er typisk flere komponenter, som spiller sammen:
- Privat bidrag: Holdes hemmeligt hos hver part. Hvis dette kompromitteres, falder sikkerheden.
- Offentlige værdier: Kan observeres af andre. De skal være korrekte beregnede i henhold til protokollen.
- Fælles hemmelighed: Den værdi, som begge parter ender med, og som ofte efterfølgende omdannes til nøgler.
- Nøgleafledning (key derivation): Man bruger ofte den fælles hemmelighed til at udlede konkrete nøgler til fx kryptering og integritet.
- Autentikation: Et ekstra led, der binder nøgleudvekslingen til en bestemt identitet eller en forventet kontekst. Uden dette kan en angriber i princippet “indlede to separate DH-forløb” og omdirigere trafikken, så parterne tror de taler sammen, mens de egentlig hver især taler med angriberen.
Undtagelser og begrænsninger: hvor går “sikkerheden” galt?
Selv om DH er kendt som en solid idé, afhænger den reelle sikkerhed af implementering og protokolvalg. Her er de typiske steder, hvor det kan gå galt:
1) Man-in-the-middle kræver autentikation
Hvis parterne ikke autentificerer hinanden (eller på anden måde beskytter mod at offentlige værdier kan byttes), kan en angriber udnytte det til at etablere separate nøgler mod hver side. Resultatet kan være, at kommunikationen stadig krypteres, men at angriberen kan læse indholdet.
2) Parametre og valg påvirker styrken
DH’s styrke er ikke et “magisk” tal, men hænger sammen med, hvordan systemparametre vælges, samt hvordan nøgler genereres og bruges. Dårlige eller forældede valg kan svække sikkerheden.
3) Implementeringsfejl kan skabe sidekanaler
Selv med “rigtige” matematiske principper kan implementeringer fejle. Fx kan fejl i tilfældighedsgeneratoren, genbrug af nøgler eller uheldige måder at beregne på give et angreb mulighed. Derfor er det ikke nok kun at forstå DH; man skal også have fokus på korrekt og moderne implementering.
Forskelle og sammenligningspunkter: DH vs. “krypteret forbindelse”
Det er nyttigt at skelne mellem tre niveauer:
- Nøgleudveksling (DH): Etablerer en fælles hemmelighed.
- Kryptering: Selve beskyttelsen af data, som kræver nøgler.
- Autentikation/integritet: Sikrer at data og nøgler faktisk relaterer til den rette modpart, og at indhold ikke kan manipuleres uden at blive opdaget.
Derfor giver det mening at sige: DH kan være en del af vejen til en sikker forbindelse, men en “sikker forbindelse” kræver som regel mere end blot nøgleudvekslingen. Oftest indgår DH i en større protokol, hvor autentikation, integritet og key derivation er med.
Praktisk brug: hvad kan du kontrollere?
Hvis du vil kunne vurdere, om et setup reelt bruger DH på en måde, der giver sikkerhed, kan du tage disse kontrolpunkter med i din egen gennemgang:
- Er der autentikation? Kig efter mekanismer, der binder nøgleudvekslingen til en identitet eller en forventet nøglekæde.
- Er der moderne og sikre nøglevalg? Sørg for, at implementeringen bruger tidssvarende varianter og ikke forældede parametre.
- Bliver hemmelige værdier aldrig genbrugt eller lækket? Vær opmærksom på praksis omkring nøglegenerering og sessionhåndtering.
- Er nøgleafledning og integritet med? En sikker forbindelse handler normalt også om, at man kan opdage manipulation, ikke kun om hemmeligholdelse.
- Kan du verificere protokoladfærd i dokumentationen? Undersøg beskrivelserne for den konkrete protokol i dit miljø, fordi detaljer varierer mellem opsætninger.
Hvis du beskriver dit konkrete scenarie (fx hvilket system/protokol du bruger, og om der er autentikation på plads), kan jeg hjælpe med at afklare, hvilke dele der typisk spiller sammen med DH—uden at antage konkrete produkter eller versioner.
