RSA-encryptie is de ruggengraat van veilige internetcommunicatie. Het is een soort cryptografie met publieke sleutels die e-mails, digitale transacties en gevoelige gegevens die over netwerken stromen, beschermt. Het algoritme is vernoemd naar de makers: Ronald L. Rivest, Adi Shamir en Leonard M. Adleman. Ze ontwikkelden het systeem terwijl ze lesgaven aan het Massachusetts Institute of Technology.
De veiligheid van RSA berust op een eenvoudige wiskundige hindernis die gemakkelijk te creëren is, maar vrijwel onmogelijk te keren. Een gebruiker begint met het kiezen van twee grote priemgetallen, p en q. Deze getallen zijn zo groot dat het vermenigvuldigen ervan om n te verkrijgen triviaal is, maar het terug in factoren van n in p en q optellen ervan is rekenkundig onbetaalbaar.
Zie het zo: het vermenigvuldigen van twee enorme getallen duurt een fractie van een seconde. Probeer je erachter te komen welke twee getallen zijn vermenigvuldigd om dat resultaat te krijgen? Met de huidige technologie kan dat miljarden jaren duren.
Vanaf 2015 vereisen de veiligheidsnormen van de Amerikaanse overheid dat de modulus n minimaal 2.048 bits is. In decimale termen betekent dit dat p en q elk ongeveer 308 cijfers bevatten, wat een getal van 617 cijfers oplevert voor n. De grootste getallen die we met succes in aanmerking hebben genomen, zijn slechts de helft zo groot. De moeilijkheidsgraad van het factoriseren verdubbelt grofweg voor elke extra drie cijfers in de modulus. Deze exponentiële groei in complexiteit zorgt ervoor dat 617-cijferige sleutels tientallen jaren lang beschermd blijven tegen brute-force-aanvallen.
De werking van sleutelgeneratie
Zodra p en q zijn geselecteerd, genereert het systeem een publieke en een private sleutel. De gebruiker kiest een geheel getal e kleiner dan n. Dit getal moet relatief priem zijn ten opzichte van het product van (p – 1) en (q – 1). In gewoon Engels: e heeft geen andere gemeenschappelijke factoren met dat product dan 1.
Deze specifieke keuze garandeert het bestaan van een ander nummer d. Wanneer je e vermenigvuldigt met d en deelt door het kleinste gemene veelvoud van (p – 1) en (q – 1), is de rest 1.
Het vinden van d is eenvoudig als u p en q kent. Het Euclidische algoritme berekent het in enkele ogenblikken. Maar als je p en q niet kent, is het vinden van d uit e net zo moeilijk als het ontbinden van n. Die moeilijkheid vormt de hele basis van de cryptobeveiliging van RSA.
De veiligheid van RSA is geen magie; het is wiskunde. Concreet gaat het om de asymmetrie tussen gemakkelijke vermenigvuldiging en onmogelijke factorisatie.
Publieke sleutels versus privésleutels
De labels d en e beschrijven functies, geen strikte rollen. De sleutels zijn uitwisselbaar. Dankzij deze flexibiliteit kan RSA twee verschillende doelen dienen: geheimhouding en authenticatie.
Om een geheimhoudingskanaal te creëren, publiceert gebruiker A e en n in een openbare directory. Gebruiker A houdt d geheim. Wanneer iemand een privébericht naar A wil sturen, converteert hij het bericht naar getallen kleiner dan n en codeert het met e en n. Alleen A kan het ontsleutelen omdat alleen A d bezit. De veronderstelling (en sterk bewijs) houdt in dat niemand anders het bericht kan ontsleutelen zonder rekening te houden met n.
Authenticatie werkt anders. Gebruiker A publiceert d en n en houdt e geheim. Gebruiker B wil verifiëren dat hij of zij met A praat. B stuurt een uitdagingsbericht naar A. Als A de gecodeerde versie retourneert met e, kan B deze ontsleutelen met de openbare d. Als het gedecodeerde bericht overeenkomt met de uitdaging, weet B dat de afzender e bezit. Omdat alleen A e heeft, is de identiteit geverifieerd.
Digitale handtekeningen en hashing
Digitaal ondertekenen voegt een laag complexiteit toe. Het vereist een cryptoveilige hashfunctie. Dit is een publieke functie die elk bericht in een kleinere samenvatting comprimeert. Elk stukje van de samenvatting hangt af van elk stukje van het oorspronkelijke bericht. Verander één bit in het oorspronkelijke bericht en ongeveer de helft van de bits in de samenvatting zal omdraaien.
Een cryptoveilige hash maakt het computationeel onhaalbaar om een bericht te vinden dat een specifiek vooraf toegewezen overzicht produceert. Het maakt het ook moeilijk om een ander bericht te vinden met dezelfde samenvatting als een bekend bericht.
Om een bericht te ondertekenen, codeert A de samenvatting met hun geheime e en voegt deze aan het bericht toe. Het bericht zelf hoeft niet geheim te zijn. Iedereen kan de publieke sleutel d van A gebruiken om de handtekening te ontsleutelen en de samenvatting te herstellen. Vervolgens berekenen ze zelfstandig de samenvatting van het ontvangen bericht. Als de twee samenvattingen overeenkomen, is de handtekening geldig. Alleen A had de samenvatting kunnen versleutelen, omdat alleen A e kent.
De hybride realiteit
Aan deze beveiliging zijn kosten verbonden. Asymmetrische encryptie vergt aanzienlijk meer rekenwerk dan symmetrische encryptie (single-key). Deze hoge verwerkingsvraag vermindert de doorvoer drastisch. Al ongeveer twintig jaar bereiken algoritmen met één sleutel een doorvoercapaciteit die 1.000 tot 10.000 keer hoger is dan algoritmen met twee sleutels, voor vergelijkbare beveiligingsniveaus.
Omdat RSA langzaam is, wordt het zelden gebruikt om grote hoeveelheden gegevens rechtstreeks te versleutelen. In plaats daarvan drijft het hybride systemen aan. RSA verzorgt het zware werk op het gebied van authenticatie en digitale handtekeningen. Het wisselt ook veilig een willekeurig gegenereerde sessiesleutel uit. Zodra die sleutel wordt gedeeld, schakelt het systeem over op een algoritme met één sleutel voor de snelle overdracht van de daadwerkelijke gegevens. Wanneer de sessie eindigt, wordt de sleutel weggegooid.
Deze combinatie geeft ons het beste van twee werelden. We krijgen de veilige sleuteluitwisseling van cryptografie met publieke sleutels met de snelheid van symmetrische encryptie voor het grootste deel van onze gegevens.
De wiskunde houdt stand. De sleutels blijven veilig. Maar naarmate de rekenkracht toeneemt, verschuift de definitie van ‘groot’. Wat vandaag onbreekbaar is, kan morgen oplosbaar zijn. We blijven grotere priemgetallen bouwen. We blijven hopen dat de kloof tussen gemakkelijke vermenigvuldiging en harde ontbinding groot genoeg blijft om onze digitale levens te beschermen.





























