De Diffie-Hellman-sleuteluitwisseling was een van de belangrijkste ontwikkelingen in de cryptografie met openbare sleutels en wordt nog steeds veelvuldig toegepast in allerlei hedendaagse beveiligingsprotocollen.
Het stelt twee partijen die elkaar nog niet eerder hebben ontmoet, in staat om op een veilige manier een sleutel vast te stellen die ze kunnen gebruiken om hun communicatie te beveiligen. In dit artikel leggen we uit waarvoor het wordt gebruikt, hoe het stap voor stap werkt, wat de verschillende variaties zijn en op welke veiligheidsaspecten moet worden gelet om het veilig te implementeren.
Wat is de Diffie-Hellman sleuteluitwisseling?
De Diffie-Hellman sleuteluitwisseling was de eerste veelgebruikte methode om veilig sleutels te ontwikkelen en uit te wisselen over een onveilig kanaal.
Het lijkt misschien niet zo spannend of baanbrekend in de bovenstaande termen, dus laten we een voorbeeld geven dat uitlegt waarom de Diffie-Hellman sleuteluitwisseling zo’n belangrijke mijlpaal was in de wereld van de cryptografie, en waarom het vandaag de dag nog steeds zo vaak wordt gebruikt.
Laten we zeggen dat je een topgeheime spion bent en dat je belangrijke informatie naar je hoofdkwartier moet sturen. Hoe voorkom je dat je vijanden het bericht in handen krijgen?
De meest gebruikelijke oplossing is om het bericht te versleutelen met een code. De eenvoudigste manier is om de code en de sleutel die u wilt gebruiken van tevoren af te spreken, of dit via een veilig communicatiekanaal te doen.
Laten we zeggen dat u een bijzonder slechte spion bent, en dat u en uw hoofdkwartier besluiten om een zwakke shift-cipher te gebruiken om uw berichten te coderen. In deze code wordt elke “a” een “b”, elke “b” wordt een “c”, elke “c” wordt een “d”, enzovoort, helemaal tot de “z” een “a” wordt.
Onder deze verschuivingscode wordt het bericht “Laten we gaan eten” een “Mfu’t hfu ejoofs”. Gelukkig zijn uw tegenstanders in onze hypothetische situatie net zo incompetent als u en zijn zij niet in staat zo’n eenvoudige code te kraken, zodat zij geen toegang hebben tot de inhoud van het bericht.
Maar wat gebeurt er als u van tevoren geen code met uw ontvanger kon afspreken?
Laten we zeggen dat u wilt communiceren met een spion van een geallieerd land dat u nog nooit eerder hebt ontmoet. Je hebt geen beveiligd kanaal om met hem te praten. Als je je bericht niet versleutelt, kan elke tegenstander die het onderschept de inhoud lezen. Als je het bericht versleutelt zonder de bondgenoot de code te vertellen, dan kan de vijand het niet lezen, maar de bondgenoot ook niet.
Dit probleem was een van de grootste raadsels in de cryptografie tot in de zeventiger jaren:
Hoe kun je veilig informatie met iemand uitwisselen als je niet van tevoren de gelegenheid hebt gehad om de sleutel te delen?
De Diffie-Hellman sleuteluitwisseling was het eerste publiekelijk gebruikte mechanisme om dit probleem op te lossen. Het algoritme stelt mensen die elkaar nog nooit hebben ontmoet in staat om veilig een gedeelde sleutel te maken, zelfs over een onveilig kanaal dat door tegenstanders in de gaten kan worden gehouden.
De geschiedenis van de Diffie-Hellman sleuteluitwisseling
De Diffie-Hellman sleuteluitwisseling vindt zijn oorsprong in de jaren zeventig. Hoewel het gebied van de cryptografie zich in de twintigste eeuw aanzienlijk had ontwikkeld, waren deze ontwikkelingen vooral gericht op het gebied van symmetrische-sleutel cryptografie.
Het duurde tot 1976 voordat publieke-sleutel algoritmen in de publieke sfeer opdoken, toen Whitfield Diffie en Martin Hellman hun paper, New Directions in Cryptography, publiceerden. De samenwerking schetste de mechanismen achter een nieuw systeem, dat bekend zou worden als de Diffie-Hellman sleuteluitwisseling.
Het werk was gedeeltelijk geïnspireerd door eerdere ontwikkelingen van Ralph Merkle. Bij de zogenaamde Merkle’s Puzzles maakt de ene partij een aantal cryptografische puzzels en stuurt die naar de andere partij.
De ontvanger kiest willekeurig een puzzel om op te lossen en doet vervolgens de nodige moeite om deze te voltooien. Als de puzzel is opgelost, krijgt de ontvanger een identificatiecode en een sessiesleutel. De ontvanger stuurt dan de identifier terug naar de originele verzender, die zo weet welke puzzel is opgelost.
Omdat de originele verzender de puzzels heeft gemaakt, laat de identifier hem weten welke sessiesleutel de ontvanger heeft ontdekt, en de twee partijen kunnen deze sleutel gebruiken om veiliger te communiceren. Als een aanvaller meeluistert met de interactie, heeft hij toegang tot alle puzzels, evenals de identifier die de ontvanger terugstuurt naar de oorspronkelijke afzender.
De identifier vertelt de aanvaller niet welke sessiesleutel wordt gebruikt, dus de beste aanpak voor het ontcijferen van de informatie is om alle puzzels op te lossen om de juiste sessiesleutel te achterhalen. Omdat de aanvaller gemiddeld de helft van de puzzels moet oplossen, is het uiteindelijk veel moeilijker voor hem om de sleutel te achterhalen dan voor de ontvanger.
Deze aanpak biedt meer veiligheid, maar is verre van een perfecte oplossing. De Diffie-Hellman sleuteluitwisseling nam enkele van deze ideeën en maakte ze complexer om een veilige methode van publieke-sleutel cryptografie te creëren.
Hoewel het bekend is geworden als de Diffie-Hellman sleuteluitwisseling, heeft Martin Hellman voorgesteld om het algoritme in plaats daarvan de Diffie-Hellman-Merkle sleuteluitwisseling te noemen, om het werk weer te geven dat Ralph Merkle in de publieke-sleutel cryptografie heeft gestoken.
In het openbaar werd gedacht dat Merkle, Hellman en Diffie de eersten waren die public-key cryptografie ontwikkelden, totdat in 1997 de Britse regering het werk van James Ellis, Clifford Cox en Malcolm Williamson uit het begin van de jaren 70 declasseerde.
Het blijkt dat het trio tussen 1969 en 1973 met het eerste public-key encryptie schema kwam, maar hun werk werd twee decennia lang geheim gehouden. Het werd uitgevoerd onder het Government Communication Headquarters (GCHQ), een Britse inlichtingendienst.
Hun ontdekking was eigenlijk het RSA-algoritme, dus Diffie, Hellman en Merkle waren nog steeds de eersten die de Diffie-Hellman sleuteluitwisseling ontwikkelden, maar niet langer de eerste uitvinders van public-key cryptografie.
Waar wordt de Diffie-Hellman sleuteluitwisseling gebruikt?
Het belangrijkste doel van de Diffie-Hellman sleuteluitwisseling is om op een veilige manier gedeelde geheimen te ontwikkelen die kunnen worden gebruikt om sleutels af te leiden. Deze sleutels kunnen dan worden gebruikt met symmetrische algoritmen om informatie op een beschermde manier over te dragen. Symmetrische algoritmen worden meestal gebruikt om het grootste deel van de gegevens te versleutelen, omdat zij efficiënter zijn dan algoritmen met openbare sleutels.
Technisch kan de Diffie-Hellman sleuteluitwisseling worden gebruikt om openbare en particuliere sleutels vast te stellen. In de praktijk wordt echter meestal RSA gebruikt. Dit komt omdat het RSA algoritme ook in staat is om public-key certificaten te ondertekenen, terwijl de Diffie-Hellman sleuteluitwisseling dat niet is.
Het ElGamal algoritme, dat veel werd gebruikt in PGP, is gebaseerd op de Diffie-Hellman sleuteluitwisseling, dus elk protocol dat het gebruikt is effectief een soort Diffie-Hellman aan het implementeren.
Als een van de meest gebruikte methoden voor het veilig distribueren van sleutels, is de Diffie-Hellman sleutel uitwisseling vaak geïmplementeerd in beveiligingsprotocollen zoals TLS, IPsec, SSH, PGP, en vele anderen. Hierdoor is het een integraal onderdeel van onze veilige communicatie.
Als onderdeel van deze protocollen wordt de Diffie-Hellman sleuteluitwisseling vaak gebruikt om uw verbinding met een website te beveiligen, om op afstand toegang te krijgen tot een andere computer, en voor het verzenden van versleutelde e-mails
Hoe werkt de Diffie-Hellman sleuteluitwisseling?
De Diffie-Hellman sleuteluitwisseling is complex en het kan moeilijk zijn om te begrijpen hoe het werkt. Het maakt gebruik van zeer grote getallen en veel wiskunde, iets waar velen van ons nog steeds bang voor zijn van die lange en saaie lessen op de middelbare school.
Om het wat begrijpelijker te maken, zullen we beginnen met het uitleggen van de Diffie-Hellman sleuteluitwisseling met een analogie. Als je eenmaal een idee hebt hoe het in grote lijnen werkt, gaan we verder met een meer technische beschrijving van de onderliggende processen.
De beste analogie voor het Diffie-Hellman schema is te denken aan twee mensen die verf mengen. Laten we de cryptografie-standaard gebruiken, en zeggen dat ze Alice en Bob heten. Ze zijn het eens over een willekeurige kleur om mee te beginnen. Laten we zeggen dat ze elkaar een bericht sturen en geel als gemeenschappelijke kleur kiezen, zoals in het onderstaande schema:
Ze stellen hun eigen kleur in. Ze vertellen de andere partij niet wat hun keuze is. Laten we zeggen dat Alice rood kiest, terwijl Bob lichtgroenblauw kiest.
De volgende stap is dat zowel Alice als Bob hun geheime kleur (rood voor Alice, groenblauw voor Bob) mengen met het geel dat ze onderling hebben afgesproken. Volgens het diagram krijgt Alice een oranjeachtige mix, terwijl Bob’s resultaat een dieper blauw is.
Als ze klaar zijn met het mengen, sturen ze het resultaat naar de andere partij. Alice ontvangt het diepere blauw, terwijl Bob de oranjekleurige verf krijgt.
Als ze het gemengde resultaat van hun partner hebben ontvangen, voegen ze hun geheime kleur eraan toe. Alice neemt de diepere blauwe kleur en voegt haar geheime rode verf toe, terwijl Bob zijn geheime groen-blauwe kleur toevoegt aan de oranje mix die hij zojuist heeft ontvangen.
Het resultaat? Ze komen allebei uit op dezelfde kleur, in dit geval een walgelijk bruin. Het is misschien niet het soort kleur waarmee je je woonkamer zou willen schilderen, maar het is niettemin een gedeelde kleur. Deze gedeelde kleur wordt het gemeenschappelijk geheim genoemd.
Het kritische deel van de Diffie-Hellman sleuteluitwisseling is dat beide partijen met hetzelfde resultaat eindigen, zonder ooit het geheel van het gemeenschappelijk geheim over het communicatiekanaal te hoeven sturen. Door het kiezen van een gemeenschappelijke kleur, hun eigen geheime kleuren, het uitwisselen van de mix en dan nog eens hun eigen kleur toe te voegen, komen beide partijen op hetzelfde gemeenschappelijke geheim uit zonder ooit het hele ding te hoeven versturen.
Als een aanvaller meeluistert met de uitwisseling, is het enige dat hij kan benaderen de gemeenschappelijke gele kleur waarmee Alice en Bob beginnen, evenals de gemengde kleuren die worden uitgewisseld. Omdat dit gebeurt met enorme getallen in plaats van verf, is deze informatie niet genoeg om de aanvaller de oorspronkelijke geheime kleuren of het gemeenschappelijke geheim te laten onderscheiden (technisch gezien is het mogelijk om het gemeenschappelijke geheim uit deze informatie te berekenen, maar in een veilige implementatie van de Diffie-Hellman sleuteluitwisseling zou dit een onhaalbare hoeveelheid tijd en rekenkracht kosten).
Deze structuur van de Diffie-Hellman sleuteluitwisseling is wat het zo nuttig maakt. Het stelt de twee partijen in staat om over een potentieel gevaarlijke verbinding te communiceren en toch tot een gedeeld geheim te komen dat zij kunnen gebruiken om encryptie-sleutels te maken voor hun toekomstige communicatie. Het maakt niet uit of er aanvallers meeluisteren, want het volledige gedeelde geheim wordt nooit over de verbinding verstuurd.
De technische details van de Diffie-Hellman sleuteluitwisseling
Tijd voor wat wiskunde…
Maak je geen zorgen, we doen het rustig aan en proberen het hele proces zo begrijpelijk mogelijk te maken. Het volgt een soortgelijk uitgangspunt als de analogie hierboven, maar in plaats van het mengen en verzenden van kleuren, maakt het Diffie-Hellman schema in feite berekeningen gebaseerd op uitzonderlijk grote priemgetallen, die vervolgens worden verzonden.
Om de veiligheid te garanderen wordt aanbevolen dat het priemgetal (p) ten minste 2048 bits lang is, wat het binaire equivalent is van een decimaal getal van ongeveer deze grootte:
415368757628736598425938247569843765827634879128375827365928736 84273684728938572983759283475934875938475928475928739587249587 29873958729835792875982795837529876348273685729843579348795827 93857928739548772397592837592478593867045986792384737826735267 3547623568734869386945673456827659498063849024875809603947902 7945982730187439759284620950293759287049502938058920983945872 0948602984912837502948019371092480193581037995810937501938507913 95710937597019385089103951073058710393701934701938091803984091804 98109380198501398401983509183501983091079180395810395190395180935 8109385019840193580193840198340918093851098309180019
Om te voorkomen dat iemands hoofd ontploft, zullen we deze uitleg met veel kleinere getallen doornemen. Wees je ervan bewust dat de Diffie-Hellman sleuteluitwisseling onveilig zou zijn als er zulke kleine getallen gebruikt zouden worden als in ons voorbeeld. We gebruiken zulke kleine getallen alleen om het concept op een eenvoudiger manier te demonstreren.
In de meest eenvoudige vorm van de Diffie-Hellman sleuteluitwisseling beginnen Alice en Bob met het wederzijds beslissen over twee getallen om mee te beginnen, in tegenstelling tot de enkele gemeenschappelijke verf in het voorbeeld hierboven. Dit zijn de modulus (p) en de basis (g).
In de praktijk is de modulus (p) een zeer groot priemgetal, terwijl de basis (g) relatief klein is om berekeningen te vereenvoudigen. De basis (g) wordt afgeleid van een cyclische groep (G) die gewoonlijk ruim voor de andere stappen wordt gegenereerd.
Voor ons voorbeeld zeggen we dat de modulus (p) 17 is, terwijl de basis (g) 4 is.
Als ze deze getallen eenmaal samen hebben besloten, kiest Alice een geheim getal (a) voor zichzelf, terwijl Bob zijn eigen geheime getal (b) kiest. Laten we zeggen dat ze kiezen:
a = 3
b = 6
Alice voert dan de volgende berekening uit om haar het getal te geven dat ze naar Bob zal sturen:
A = ga mod p
In de bovenstaande berekening betekent mod een modulo-bewerking. Dit zijn in wezen berekeningen om uit te vinden wat de rest is na deling van de linkerkant door de rechterkant. Als voorbeeld:
15 mod 4 = 3
Als je begrijpt hoe modulo-bewerkingen werken, kun je ze zelf uitvoeren in de volgende berekeningen, anders kun je een online rekenmachine gebruiken.
Dus laten we onze getallen in de formule zetten:
A = 43 mod 17
A = 64 mod 17
A = 13
Wanneer we hetzelfde doen voor Bob, krijgen we:
B = 46 mod 17
B = 4096 mod 17
B = 16
Alice stuurt dan haar resultaat (A) naar Bob, terwijl Bob zijn cijfer (B) naar Alice stuurt. Alice berekent vervolgens het gedeelde geheim (s) met behulp van het getal dat ze van Bob heeft ontvangen (B) en haar geheime getal (a), met behulp van de volgende formule:
s = Ba mod p
s = 163 mod 17
s = 4,096 mod 17
s = 16
Bob voert dan wat in wezen dezelfde berekening is uit, maar dan met het getal dat Alice hem heeft gestuurd (A), en ook met zijn eigen geheime getal (b):
s = Ab mod p
s = 136 mod 17
s = 4,826,809 mod 17
s = 16
Zoals je kunt zien, kwamen beide partijen uit op hetzelfde resultaat voor s, 16. Dit is het gedeelde geheim, dat alleen Alice en Bob kennen. Ze kunnen dit gebruiken om een sleutel voor symmetrische encryptie op te zetten, waarmee ze veilig informatie tussen elkaar kunnen versturen op een manier dat alleen zij er toegang toe hebben.
Merk op dat hoewel B en s hetzelfde zijn in het bovenstaande voorbeeld, dit slechts toeval is, gebaseerd op de kleine getallen die voor deze illustratie zijn gekozen. Normaal gesproken zouden deze waarden niet hetzelfde zijn in een echte implementatie van de Diffie-Hellman sleuteluitwisseling.
Ondanks dat veel van de bovenstaande gegevens in klare tekst (p, g, A en B) over het kanaal worden gestuurd en door potentiële aanvallers kunnen worden gelezen, wordt het gedeelde geheim (s) nooit verzonden. Het zou voor een aanvaller niet praktisch zijn om het gedeelde geheim (s) of een van de geheime getallen (a en b) te berekenen uit de informatie die in klare tekst wordt verzonden.
Hierbij wordt er natuurlijk van uitgegaan dat de Diffie-Hellman sleuteluitwisseling correct is geïmplementeerd en dat voldoende grote getallen worden gebruikt. Zolang deze bepalingen worden nageleefd, wordt de Diffie-Hellman sleuteluitwisseling beschouwd als een veilige manier om een gedeeld geheim tot stand te brengen dat kan worden gebruikt om toekomstige communicatie te beveiligen.
Een gedeelde sleutel tussen meerdere partijen tot stand brengen
De Diffie-Hellman sleuteluitwisseling kan ook worden gebruikt om een gedeelde sleutel met een groter aantal deelnemers tot stand te brengen. Het werkt op dezelfde manier, behalve dat er meer berekeningsrondes nodig zijn voor elke partij om hun geheime nummer toe te voegen en te eindigen met hetzelfde gedeelde geheim.
Net als bij de twee-partijen versie van de Diffie-Hellman sleuteluitwisseling, worden sommige delen van de informatie over onveilige kanalen verzonden, maar niet genoeg voor een aanvaller om in staat te zijn het gedeelde geheim te berekenen.
Waarom is de Diffie-Hellman sleuteluitwisseling veilig?
Op wiskundig niveau berust de Diffie-Hellman sleuteluitwisseling op eenrichtingsfuncties als de basis voor zijn veiligheid. Dit zijn berekeningen die in één richting eenvoudig zijn uit te voeren, maar in omgekeerde richting veel moeilijker zijn te berekenen.
Meer in het bijzonder berust het op het Diffie-Hellman probleem, waarbij wordt aangenomen dat het onder de juiste parameters ondoenlijk is gab te berekenen uit de afzonderlijke waarden van g, ga en gb. Er is momenteel geen algemeen bekende manier om gab gemakkelijk uit de andere waarden te vinden, en daarom wordt de Diffie-Hellman sleuteluitwisseling als veilig beschouwd, ondanks het feit dat aanvallers de waarden p, g, A en B kunnen onderscheppen.
Authenticatie & de Diffie-Hellman sleuteluitwisseling
In de echte wereld wordt de Diffie-Hellman sleuteluitwisseling zelden op zichzelf gebruikt. De belangrijkste reden hiervoor is dat het geen authenticatie biedt, wat gebruikers kwetsbaar maakt voor man-in-the-middle aanvallen.
Deze aanvallen kunnen plaatsvinden wanneer de Diffie-Hellman sleuteluitwisseling op zichzelf is geïmplementeerd, omdat het geen manier heeft om te verifiëren of de andere partij in een verbinding werkelijk is wie ze zeggen dat ze zijn. Zonder enige vorm van authenticatie kunnen gebruikers in feite verbinding maken met aanvallers terwijl zij denken dat zij communiceren met een vertrouwde partij.
Om deze reden wordt de Diffie-Hellman sleuteluitwisseling over het algemeen geïmplementeerd naast enige vorm van authenticatie. Hierbij wordt vaak gebruik gemaakt van digitale certificaten en een publiek-sleutel algoritme, zoals RSA, om de identiteit van elke partij te verifiëren.
Variaties van de Diffie-Hellman sleuteluitwisseling
De Diffie-Hellman sleuteluitwisseling kan op een aantal verschillende manieren worden geïmplementeerd, en het heeft ook de basis geleverd voor verschillende andere algoritmen. Sommige van deze implementaties bieden autorisatie, terwijl andere verschillende cryptografische eigenschappen hebben zoals perfecte voorwaartse geheimhouding.
Elliptische-kromme Diffie-Hellman
Elliptische-kromme Diffie-Hellman maakt gebruik van de algebraïsche structuur van elliptische krommen om de implementaties in staat te stellen een vergelijkbaar niveau van veiligheid te bereiken met een kleinere sleutelgrootte. Een 224-bit elliptische-curve sleutel biedt hetzelfde veiligheidsniveau als een 2048-bit RSA sleutel. Dit kan uitwisselingen efficiënter maken en de opslagvereisten verminderen.
Behalve de kleinere sleutellengte en het feit dat het vertrouwt op de eigenschappen van elliptische krommen, werkt elliptische-curve Diffie-Hellman op een vergelijkbare manier als de standaard Diffie-Hellman sleuteluitwisseling.
TLS
TLS, een protocol dat wordt gebruikt om een groot deel van het internet te beveiligen, kan de Diffie-Hellman uitwisseling op drie verschillende manieren gebruiken: anoniem, statisch en efemeer. In de praktijk moet alleen efemere Diffie-Hellman worden geïmplementeerd, omdat de andere opties beveiligingsproblemen opleveren.
- Anonymous Diffie-Hellman – Deze versie van de Diffie-Hellman sleuteluitwisseling maakt geen gebruik van authenticatie, waardoor het kwetsbaar is voor man-in-the-middle aanvallen. Het zou niet gebruikt of geïmplementeerd moeten worden.
- Static Diffie-Hellman – Static Diffie-Hellman gebruikt certificaten om de server te authenticeren. De cliënt wordt niet standaard geauthenticeerd en er wordt geen voorwaartse geheimhouding geboden.
- Ephemeral Diffie-Hellman – Dit wordt beschouwd als de meest veilige implementatie omdat het perfecte voorwaartse geheimhouding biedt. Het wordt meestal gecombineerd met een algoritme als DSA of RSA om een of beide partijen in de verbinding te authenticeren. Ephemeral Diffie-Hellman gebruikt verschillende sleutelparen telkens wanneer het protocol wordt uitgevoerd. Dit geeft de verbinding perfecte voorwaartse geheimhouding, want zelfs als een sleutel in de toekomst wordt gecompromitteerd, kan deze niet worden gebruikt om alle berichten uit het verleden te ontcijferen.
ElGamal
ElGamal is een publiek-sleutel algoritme dat is gebouwd bovenop de Diffie-Hellman sleuteluitwisseling. Net als Diffie-Hellman bevat het geen voorzieningen voor authenticatie op zichzelf, en wordt het over het algemeen gecombineerd met andere mechanismen voor dit doel.
ElGamal werd voornamelijk gebruikt in PGP, GNU Privacy Guard en andere systemen omdat zijn belangrijkste rivaal, RSA, gepatenteerd was. Het patent van RSA verliep in 2000, waardoor het na die datum vrij geïmplementeerd kon worden. Sindsdien is ElGamal niet meer zo vaak geïmplementeerd.
STS
Het Station-to-Station (STS) protocol is ook gebaseerd op de Diffie-Hellman sleuteluitwisseling. Het is een ander sleuteloverdrachtsschema, maar het biedt bescherming tegen man-in-the-middle-aanvallen en perfecte voorwaartse geheimhouding.
Het vereist dat beide partijen in de verbinding al een sleutelpaar hebben, dat wordt gebruikt om elke partij te authenticeren. Als de partijen elkaar nog niet kennen, kunnen certificaten worden gebruikt om de identiteit van beide partijen te valideren.
De Diffie-Hellman sleuteluitwisseling & RSA
Zoals we eerder hebben besproken, wordt de Diffie-Hellman sleuteluitwisseling vaak naast RSA of andere algoritmen geïmplementeerd om authenticatie voor de verbinding te bieden. Als je bekend bent met RSA, vraag je je misschien af waarom iemand de moeite zou nemen om ook de Diffie-Hellman sleuteluitwisseling te gebruiken, aangezien RSA het mogelijk maakt dat partijen die elkaar nooit eerder hebben ontmoet, veilig met elkaar kunnen communiceren.
RSA stelt gebruikers in staat berichten te versleutelen met de openbare sleutel van hun correspondent, zodat ze alleen kunnen worden ontsleuteld met de bijbehorende particuliere sleutel. In de praktijk wordt RSA echter niet gebruikt om de gehele communicatie te versleutelen – dat zou veel te inefficiënt zijn.
In plaats daarvan wordt RSA vaak alleen gebruikt als middel om beide partijen te authenticeren. Dit gebeurt met de digitale certificaten van beide partijen, die zijn geverifieerd door een certificaatautoriteit om aan te tonen dat de certificaateigenaar echt is wie hij zegt dat hij is, en dat de publieke sleutel op het certificaat ook echt van hem is.
Voor wederzijdse authenticatie ondertekent elke partij een bericht met hun private sleutel en stuurt dit vervolgens naar hun communicatiepartner. Elke ontvanger kan dan de identiteit van de andere partij verifiëren door de ondertekende berichten te vergelijken met de openbare sleutel op het digitale certificaat van hun communicatiepartner (zie het bovengenoemde artikel over RSA voor meer details over hoe dit werkt, met name het gedeelte over het ondertekenen van berichten).
Nu beide partijen zijn geauthenticeerd, is het technisch mogelijk om RSA te blijven gebruiken om veilig onderling versleutelde berichten te versturen, maar dat zou uiteindelijk te inefficiënt zijn.
Om deze inefficiëntie te omzeilen, gebruiken veel beveiligingsprotocollen een algoritme zoals de Diffie-Hellman sleuteluitwisseling om tot een gemeenschappelijk geheim te komen, dat kan worden gebruikt om een gedeelde symmetrische sleutel te maken. Deze symmetrische sleutel wordt dan gebruikt in een symmetrisch algoritme, zoals AES, om de gegevens te versleutelen die de twee partijen veilig naar elkaar willen verzenden.
Het lijkt misschien een ingewikkeld en gecompliceerd proces, maar het is uiteindelijk veel sneller en vergt minder middelen in vergelijking met het gebruik van een publiek-sleutel algoritme voor de hele uitwisseling. Dit komt omdat symmetrische-sleutel encryptie vele malen efficiënter is dan publieke-sleutel encryptie.
Naast de inefficiënties die we zojuist noemden, zijn er nog enkele andere nadelen van het gebruik van alleen RSA. RSA heeft opvulling nodig om het veilig te maken, dus er zou een extra algoritme naast moeten worden geïmplementeerd om het veilig te maken.
RSA biedt ook geen perfecte voorwaartse geheimhouding, wat een ander nadeel is in vergelijking met de vluchtige Diffie-Hellman sleuteluitwisseling. Al deze redenen samen maken dat RSA in veel situaties het beste kan worden gebruikt in combinatie met de Diffie-Hellman sleuteluitwisseling.
Als alternatief kan de Diffie-Hellman sleuteluitwisseling worden gecombineerd met een algoritme als de Digital Signature Standard (DSS) om authenticatie, sleuteluitwisseling, vertrouwelijkheid en controle van de integriteit van de gegevens mogelijk te maken. In zo’n situatie is RSA niet nodig om de verbinding te beveiligen.
Veiligheidskwesties van de Diffie-Hellman sleuteluitwisseling
De veiligheid van de Diffie-Hellman sleuteluitwisseling hangt af van de wijze waarop deze is geïmplementeerd, alsmede van de getallen die ervoor worden gekozen. Zoals we hierboven al zeiden, is er geen manier om de andere partij te authenticeren, maar in de praktijk worden andere mechanismen gebruikt om er zeker van te zijn dat de andere partij in een verbinding geen bedrieger is.
Parameters voor getallenselectie
Als een echte implementatie van de Diffie-Hellman sleuteluitwisseling zulke kleine getallen zou gebruiken als in ons voorbeeld, dan zou het uitwisselingsproces voor een aanvaller triviaal zijn om te kraken. Maar niet alleen de grootte van de getallen is van belang – de getallen moeten ook voldoende willekeurig zijn. Als een willekeurige getallengenerator een voorspelbare output produceert, kan hij de veiligheid van de Diffie-Hellman sleuteluitwisseling volledig ondermijnen.
Het getal p moet 2048 bits lang zijn om de veiligheid te garanderen. De basis, g, kan een relatief klein getal zijn, zoals 2, maar het moet van een orde van G komen die een grote priemfactor heeft
De Logjam-aanval
De Diffie-Hellman sleuteluitwisseling is ontworpen op basis van het feit dat het discrete logaritme-probleem moeilijk op te lossen is. Het meest effectieve, algemeen bekende mechanisme om de oplossing te vinden is het “number field sieve” algoritme.
Bij het ontwerp van de Diffie-Hellman sleuteluitwisseling werd rekening gehouden met de mogelijkheden van dit algoritme. In 1992 was bekend dat voor een gegeven groep, G, drie van de vier stappen van het algoritme mogelijk van tevoren konden worden berekend. Als deze vooruitgang werd opgeslagen, kon de laatste stap in relatief korte tijd worden berekend.
Dit was niet al te verontrustend totdat men zich realiseerde dat een aanzienlijk deel van het internetverkeer gebruikmaakt van dezelfde groepen die 1024 bits of kleiner zijn. In 2015 voerde een academisch team de berekeningen uit voor de meest voorkomende 512-bits prime die wordt gebruikt door de Diffie-Hellman sleuteluitwisseling in TLS.
Ze waren ook in staat om 80% van de TLS-servers die DHE-EXPORT ondersteunden, te downgraden, zodat ze een 512-bits export-grade Diffie-Hellman sleuteluitwisseling voor de verbinding zouden accepteren. Dit betekent dat elk van deze servers kwetsbaar is voor een aanval van een tegenstander met veel middelen.
De onderzoekers extrapoleerden hun resultaten en schatten dat een natie-staat een 1024-bits prime zou kunnen breken. Door het breken van de meest gebruikte 1024-bit priem, schatte het academische team dat een tegenstander 18% van de miljoen populairste HTTPS-websites zou kunnen controleren.
Ze zeiden verder dat een tweede priem de tegenstander in staat zou stellen de verbindingen van 66% van de VPN-servers en 26% van de SSH-servers te ontcijferen. Later in het rapport suggereerden de academici dat de NSA mogelijk al over deze mogelijkheden beschikt.
“Een nauwkeurige lezing van gepubliceerde NSA-lekken laat zien dat de aanvallen van het agentschap op VPN’s consistent zijn met het bereiken van een dergelijke doorbraak.”
Ondanks deze kwetsbaarheid kan de Diffie-Hellman sleuteluitwisseling nog steeds veilig zijn als het correct wordt geïmplementeerd. Zolang een 2048-bit sleutel wordt gebruikt, zal de Logjam-aanval niet werken. Geactualiseerde browsers zijn ook beveiligd tegen deze aanval.
Is de Diffie-Hellman-sleuteluitwisseling veilig?
De Diffie-Hellman-sleuteluitwisseling lijkt misschien ingewikkeld, maar is een fundamenteel onderdeel van de veilige uitwisseling van gegevens online.
Zolang er een geschikte authenticatiemethode wordt gebruikt en de getallen goed zijn gekozen, is de sleuteluitwisseling niet kwetsbaar voor aanvallen.
De Diffie-Hellman sleuteluitwisseling was een innovatieve methode om twee onbekende partijen veilig te laten communiceren toen deze in de jaren zeventig werd ontwikkeld. Hoewel we nu nieuwere versies implementeren met grotere sleutels ter bescherming tegen moderne technologie, ziet het er naar uit dat het protocol zelf veilig zal blijven tot de komst van quantumcomputing en de geavanceerde aanvallen die daarmee gepaard gaan.
Hoe zal quantumcomputing de Diffie-Hellman sleuteluitwisseling beïnvloeden?
Quantumcomputing is een opkomende tak van computergebruik die doorbraken blijft maken. De precieze werking van kwantumcomputers is gecompliceerd en valt buiten het bestek van dit artikel, maar de technologie stelt cryptografie voor grote problemen.
De eenvoudige verklaring is dat kwantumcomputers naar verwachting in staat zullen zijn bepaalde problemen op te lossen die momenteel voor klassieke computers niet haalbaar zijn. Dit zal een groot aantal deuren openen en nieuwe mogelijkheden bieden. Kwantumcomputers die krachtig genoeg zijn, zullen kwantumalgoritmen kunnen uitvoeren die verschillende wiskundige problemen beter kunnen oplossen.
Dit klinkt misschien geweldig, maar de veiligheid van veel van onze huidige cryptografische mechanismen berust op het feit dat deze problemen moeilijk op te lossen zijn. Als deze wiskundige problemen eenvoudiger te berekenen worden, wordt het ook eenvoudiger om deze cryptografische mechanismen te kraken.
Een van deze kwantumalgoritmen is het algoritme van Grover. Als kwantumcomputers krachtig genoeg worden, zullen aanvallen op symmetrische sleutels als AES hierdoor sneller gaan. Dit kan echter gemakkelijk worden tegengegaan door de sleutelgrootte te verdubbelen.
De grootste zorg is hoe het algoritme van Shor de cryptografie met publieke sleutels zal beïnvloeden. Dit komt omdat de veiligheid van de meeste publieke-sleutel algoritmen berust op de enorme moeilijkheid van het oplossen van een van deze drie berekeningen:
- Het discrete logaritme probleem
- Het integer factorization probleem
- Het elliptische-curve discrete logaritme probleem
De specifieke details van elk zijn niet echt van belang, maar u kunt de links volgen als u aanvullende informatie wilt. Het belangrijkste is dat als er eenmaal voldoende krachtige kwantumcomputers zijn, het veel praktischer zal worden om deze problemen op te lossen met het algoritme van Shor. Naarmate deze problemen gemakkelijker op te lossen zijn, worden de cryptografische systemen die erop vertrouwen minder veilig.
Cryptografie met openbare sleutels speelt een fundamentele rol in de bescherming van onze communicatie, en daarom vormt quantumcomputing een enorme uitdaging voor cryptografen.
In het geval van de Diffie-Hellman sleuteluitwisseling berust de veiligheid ervan op het feit dat het ondoenlijk is om het discrete logaritme probleem op te lossen met de huidige technologie en middelen. De dreiging van het algoritme van Shor komt echter steeds dichterbij met elke vooruitgang in de kwantumcomputing.
Het is moeilijk om een ruwe tijdlijn te geven van wanneer kwantumcomputing een serieuze bedreiging zal vormen voor de Diffie-Hellman sleuteluitwisseling, omdat sommige onderzoekers veel optimistischer zijn dan anderen. Desondanks worden er vervangers voor de Diffie-Hellman sleuteluitwisseling en andere publieke-sleutel algoritmen ontwikkeld om er zeker van te zijn dat we voorbereid zijn op het moment dat het zover is.
Mogelijke vervangers voor de Diffie-Hellman sleuteluitwisseling
Het gevaar van kwantumcomputers is niet onmiddellijk aanwezig, dus de cryptografische gemeenschap moet zich nog buigen over specifieke alternatieven voor de Diffie-Hellman sleuteluitwisseling. Er worden echter talrijke wegen bewandeld. Deze omvatten:
- Lattice-based cryptography
- Multivariate cryptography
- Elliptic-curve isogeny cryptography
We weten nog steeds niet precies hoe de post-quantum wereld er voor cryptografie uit zal zien, maar de beveiligingsgemeenschap werkt actief aan de problemen en houdt de vooruitgang in de wereld van quantum computing bij. Hoewel er in de toekomst grote veranderingen zullen plaatsvinden, is dat niets waar de gemiddelde persoon bang voor hoeft te zijn – je zult het waarschijnlijk niet eens merken als er veranderingen plaatsvinden.