RSA is een asymmetrisch encryptiealgoritme dat veel bij gegevensoverdracht wordt gebruikt, bijvoorbeeld voor de beveiliging van transacties. Het algoritme is in 1977 ontworpen door Ron Rivest, Adi Shamir en Len Adleman, vandaar de afkorting RSA. De veiligheid van RSA is op het ontbinden in priemfactoren gebaseerd, waarbij het om heel grote getallen gaat. De getallen zijn zo groot dat het daardoor tot nu toe nog bijna onmogelijk de twee oorspronkelijke priemgetallen en te achterhalen als alleen hun product bekend is en en groot genoeg zijn. Vergelijk het met het terugvinden van een afbeelding waarop een hashfunctie is uitgevoerd. Het neemt te veel tijd in beslag.
Clifford Cocks, een Britse wiskundige, die voor het Government Communications Headquarters werkte, heeft in 1973 in een intern document een gelijkwaardig algoritme beschreven, dat pas in 1997 bekend is geworden, omdat het daar voor geheim was. Het Massachusetts Institute of Technology heeft in 1983 in de Verenigde Staten een octrooi op het algoritme aangevraagd, maar dat liep op 21 september 2000 af. Omdat het algoritme werd gepubliceerd voordat er in een ander land patent op werd aangevraagd, kon er in andere landen geen patent meer op worden aangevraagd.
Werking In het volgende staat ggd voor de grootste gemene deler van de positieve gehele getallen en . Zowel als kunnen per definitie door ggd worden gedeeld.
Sleutels Veronderstel dat Alice ervoor wil zorgen dat Bob haar een geheim bericht kan zenden over een onveilig medium, per telefoon, internet of post. Alice doet het volgende om een publieke sleutel en een geheime sleutel te maken: Ze kiest willekeurig twee verschillende grote priemgetallen en die bovendien onderling ondeelbaar zijn en berekent het product . Ze berekent de indicator van . Omdat een product is van twee priemgetallen, is dat gemakkelijk. De indicator van een priemgetal is en is mits multiplicatief: = . Dus is .In hun oorspronkelijke formulering gebruikten RSA de indicator . Later werd in plaats daarvan gebruikt. Omdat en priem zijn, zijn en even en is ten minste 2. Ze kiest een geheel getal als de publieke sleutel. ligt tussen 1 en , dus en is onderling ondeelbaar met is: . De publieke sleutel hoeft niet geheim te worden gehouden. Ze berekent de sleutel als modulaire inverse van de encryptiesleutel , dat wil zeggen dat , dus voor zekere gehele . Deze sleutel moet wel geheim blijven, voor iedereen en ook voor Bob. Alice kan stap 4 met het uitgebreide algoritme van Euclides uitvoeren. Het getallenpaar vormt de publieke sleutel, het getallenpaar de geheime sleutel. Daarin is alleen de sleutel dus geheim, want is bekend. Alice stuurt mogelijk via een onveilig medium het product en de openbare sleutel naar Bob en ze houdt de sleutel geheim.
Voorbeeld Alice kiest , , . Dus . Alice kiest de publieke sleutel en stuurt deze samen met het product 319 naar Bob. Om de kleinst mogelijke geheime sleutel te krijgen berekent Alice: en neemt . Alice berekent met het uitgebreide algoritme van Euclides de geheime sleutel als de inverse van modulo : , dus is .
Versleutelen Veronderstel dat Bob een bericht naar Alice wil zenden. Hij kent en , de publieke sleutel, want die heeft Alice hem gezonden. Hij zet de klare tekst om in een getal met , gebruikmakend van een eerder afgesproken, omkeerbaar en niet-geheim protocol. Bijvoorbeeld, elk teken in een bericht kan worden omgezet in zijn ASCII-code, en de codes samengevoegd tot een enkel getal. Als het nodig is (bijvoorbeeld omdat ) kan worden opgesplitst in tokens en elke token kan afzonderlijk versleuteld worden. Dan berekent hij de cijfertekst (de versleutelde tekst), met behulp van de vergelijking:
Dit kan snel worden gedaan door machtsverheffing door kwadrateren. Bob verzendt dan naar Alice.
Voorbeeld Als Bob de letter 'Y', met ASCII-code 89 (< 319), naar Alice wil sturen, versleutelt hij deze en berekent de cijfertekst: .
Bob stuurt de cijfertekst voor de letter 'Y', het getal 298, naar Alice.
Ontsleutelen Alice ontvangt de cijfertekst van Bob, en ze kent haar geheime sleutel . Ze kan , de boodschap in numerieke vorm, te weten komen door tot de macht te verheffen en dan de volgende ontsleutelingsrelatie toe te passen:
Voorbeeld Om de cijfertekst met de geheime sleutel te ontsleutelen, berekent Alice:Gebruik modpow(298,47,319) op: bigint - large integer package, of in Python 3: pow(298, 47, 319). ,
wat inderdaad weer de ASCII-code van de letter 'Y' is.
Als laatste stap krijgt Alice het bericht door op de numerieke vorm ervan het afgesproken, niet-geheime, protocol in omgekeerde richting toe te passen.
Kanttekeningen Omdat , lijkt voor de ontsleuteling de congruentie voor de hand te liggen, maar merk op dat de congruentie niet modulo is, maar modulo
Als de complexiteit die het modulo rekenen met zich meebrengt even wordt vergeten, lijkt de congruentie eenvoudig. Immers, omdat en uit de publieke sleutel bekend is, volgt voor de geheime sleutel dat . De corresponderende congruentie voor daarentegen: , vraagt de indicator om uit te verkrijgen. De indicator kan alleen berekend worden uit de waarden van en afzonderlijk. Zoals al in de inleiding is opgemerkt, zijn en moeilijk uit terug te vinden en daarom geeft de congruentie een moeilijk te kraken waarde voor .
Bewijs congruentie Het bewijs gebruikt de kleine stelling van Fermat. Die stelt dat voor priem, geheel en geldt dat:
Gegeven is:
Dus
voor zekere gehele . Neemt men aan dat , dan volgtOmdat geheel is, geldt het bewijs ongewijzigd als genomen wordt in plaats van
Als en omdat priem is, geldt , en in totaal
Op dezelfde manier:
Dus is voor zekere gehele :
en is dit ook een veelvoud van . Omdat geen veelvoud van is moet dit wel zijn, voor zekere gehele . Dus geldt
en omdat en , is de ontsleutelingsrelatie bewezen.
Ondertekenen RSA kan ook worden gebruikt om een bericht digitaal te ondertekenen. Veronderstel dat Alice een ondertekend bericht wil zenden naar Bob. Ze berekent dan een hashwaarde uit het bericht, versleutelt die met haar geheime sleutel, en voegt dat als een handtekening bij het bericht. Deze handtekening kan alleen met haar publieke sleutel worden ontsleuteld. Wanneer Bob het ondertekende bericht ontvangt, ontsleutelt hij de handtekening met Alices publieke sleutel, en vergelijkt de berekende hashwaarde met de eigenlijke hashwaarde van het bericht. Als die gelijk zijn, weet hij dat de auteur van het bericht de geheime sleutel van Alice bezit en dat het bericht na verzending niet meer is veranderd.
Veiligheid Veronderstel dat Charlotte, een afluisteraar, de publieke sleutel en , en de cijfertekst onderschept. Ze kan niet rechtstreeks aan de geheime sleutel komen, omdat Alice die geheimhoudt. De meest voor de hand liggende manier voor Charlotte om te vinden uit , is om in de factoren en te ontbinden, zodat ze kan berekenen en kan vinden uit . Er is nog geen methode gevonden om getallen in polynomiale tijd in factoren te ontbinden met een gewone computer, de benodigde tijd wordt veel sneller groter dan bij lineair groter wordende getallen, maar het is niet bewezen dat er geen bestaat.
Het is ook niet bewezen dat de enige manier om uit te berekenen, is om in factoren te ontbinden, maar er is nog geen gemakkelijkere manier ontdekt, tenminste geen publiek bekende. Daarom wordt algemeen verondersteld dat Charlotte het bericht niet kan terugvinden als groot genoeg is.
Als uit 256 of minder bits bestaat, kunnen de factoren in een paar uur met een personal computer worden gevonden, gebruik makende van software die op het internet vrij toegankelijk is. Als 512 bits, kan sinds 1999 het ontbinden in factoren door enkele honderden computers in een aanvaardbare tijd worden uitgevoerd. Het is tegenwoordig aan te raden ten minste 1024 bits lang te kiezen. De 2013 NIST standaard FIPS 186-4 beveelt drie lengtes aan voor veilige moduli: 1024, 2048 of 3072 bits, die bestaan uit de respectievelijke aantallen decimale cijfers: 309, 617 en 972.
Peter Shor heeft in 1994 aangetoond dat wanneer er een kwantumcomputer zou bestaan, die in principe de een getal in polynomiale tijd in priemfactoren kan ontbinden. Mochten kwantumcomputers daarom werkelijkheid worden, dan maakt het algoritme van Shor RSA en andere soortgelijke algoritmes onbruikbaar. Als een efficiënte methode voor het ontbinden in factoren met een gewone computer zou worden gevonden, of als een kwantumcomputer zou worden gemaakt, dan kunnen nog langere sleutels een tijdelijke oplossing bieden, maar zo'n veiligheidslek in RSA zou wel retroactief zijn: de publieke sleutel en de cijfertekst kunnen worden bijgehouden totdat het mogelijk wordt om het bericht te ontcijferen. Dat is een reden om op de lange termijn niet alleen RSA gebruiken.
Praktische bedenkingen Sleutels Om de grote priemgetallen en te vinden, worden meestal eerst willekeurige getallen van de juiste grootte gekozen. Die getallen worden dan getest met snelle methoden, die de meeste niet-priemgetallen uitsluiten. Als dan een getal wordt gevonden dat waarschijnlijk een priemgetal is, kan op een zekere, maar langzamere, manier worden nagegaan of het getal inderdaad priem is.
De priemgetallen en mogen niet te dicht bij elkaar liggen, want anders zou de fermatfactorisatie voor succesvol kunnen zijn. Bovendien kan, als of alleen kleine priemfactoren hebben, snel in factoren worden ontbonden, zodat deze waarden voor en ook moeten worden gemeden.
Er mag geen methode om priemfactoren te zoeken worden gebruikt die een eventuele aanvaller enige informatie geeft over de priemgetallen. Een goede toevalsgenerator moet worden gebruikt. Coppersmith heeft in 1997 aangetoond dat als iemand de helft van de cijfers van of kan raden, hij gemakkelijk de andere helft kan berekenen.
Het is belangrijk dat de geheime exponent groot genoeg is. Wiener heeft in 1990 aangetoond dat als tussen en ligt, wat veel voorkomt, en , op een efficiënte manier uit en kan worden berekend.
Snelheid RSA is veel trager dan Data Encryption Standard en andere symmetrische encryptiealgoritmes. Bob vercijfert in de praktijk gewoonlijk zijn bericht met een symmetrisch algoritme en de symmetrische sleutel, kort in vergelijking met het bericht, met RSA. Het symmetrisch versleutelde bericht en de met RSA versleutelde sleutel worden dan beiden naar Alice verstuurd.
Deze methode zorgt voor bijkomende veiligheidsmoeilijkheden. De methode voor symmetrische encryptie moet veilig zijn, niet gemakkelijk te kraken zonder de sleutel, en de symmetrische sleutel moet met een goede toevalsgenerator worden gemaakt, want anders zou Charlotte om RSA heen kunnen door de symmetrische sleutel te raden.
Sleutelverdeling Zoals bij alle encryptiemethoden, is het belangrijk hoe de publieke sleutels worden verspreid. We moeten ons bewust zijn van de mogelijkheid van een man-in-the-middle-aanval. Veronderstel dat Charlotte de communicatie tussen Alice en Bob kan onderscheppen. Ze ontvangt dan een publieke sleutel van Alice, maakt zelf een nieuwe publieke en geheime sleutel en stuurt haar eigen publieke sleutel naar Bob, die denkt dat hij de publieke sleutel van Alice ontvangt. Dan kan ze verdere berichten van Bob, vercijferd met haar publieke sleutel, ontvangen, ontcijferen met haar geheime sleutel, en eventueel veranderd weer met de eerder ontvangen publieke sleutel vercijferd naar Alice sturen. Alice denkt dan dat het bericht rechtstreeks van Bob komt. Alice en Bob kunnen in principe niet merken dat Charlotte ertussen zit. Verdedigingen tegen zo'n aanval zijn meestal gebaseerd op digitale certificaten of andere onderdelen van een public key infrastructure. Uiteraard is de beste oplossing dat Alice en Bob de sleutels, of een controlegetal, vergelijken tijdens een echte ontmoeting.
Tijdsgebaseerde aanvallen