RSA (cryptografie)

RSA is een asymmetrisch encryptiealgoritme, dat veel gebruikt wordt bij gegevensoverdracht, bijvoorbeeld voor de beveiliging van transacties. Het algoritme werd in 1977 ontworpen door Ron Rivest, Adi Shamir en Len Adleman, vandaar de afkorting RSA.

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 boven water is gekomen, omdat het als topgeheim geclassificeerd was.

De veiligheid van RSA steunt op het probleem van de ontbinding in factoren bij heel grote getallen: op dit moment is het bijna onmogelijk de twee oorspronkelijke priemgetallen  en  te achterhalen als alleen hun product  bekend is en  en  groot genoeg zijn. Vergelijk het met een hashfunctie. Het zou te veel tijd in beslag nemen.

Het Massachusetts Institute of Technology heeft in 1983 in de Verenigde Staten het algoritme gepatenteerd, 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

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 grote priemgetallen  en  en berekent de modulus .
 Ze berekent de indicator  van . Omdat  een product is van twee priemgetallen  en  geldt dan .
 Ze kiest een geheel getal  dat tussen 1 en  ligt:  en dat onderling ondeelbaar met  is: . De exponent  is openbaar.
 Ze berekent de exponent  als modulaire inverse van , dat wil zeggen dat , dus  voor zekere gehele .
 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 exponent  dus geheim, want  is bekend. Alice stuurt de modulus  en de openbare exponent  naar Bob via het mogelijk onveilige medium en ze houdt de exponent  geheim.

 Voorbeeld
 , , ,  en 
 Alice stuurt Bob haar publieke exponent 3 en modulus 319.
 Om de kleinst mogelijke geheime sleutel te verkrijgen berekent Alice: ggd(p-1, q-1) = ggd(10, 28) = 2 en neemt  = 280 / 2 = 140.
 Bereken de geheime exponent  als de inverse van  modulo :
 ,
 Bereken  en  met het uitgebreide algoritme van Euclides.  is de geheime exponent.  wordt niet meer gebruikt.

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 , 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 kan  worden opgesplitst en elk stuk afzonderlijk versleuteld. 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, naar Alice wil sturen, versleutelt hij deze en berekent de cijferletter: 
.

Bob stuurt de cijfertekst voor de letter 'Y', het getal 298, naar Alice.

Ontsleutelen 
Alice ontvangt  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 tekst met de geheime sleutel te ontsleutelen, berekent Alice: 
,

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 waarden van  en  afzonderlijk om  uit  te verkrijgen. 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 volgt:

Als  en omdat  priem is, geldt , en in totaal

Analoog:

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 
Kocher beschreef in 1995 een ingenieuze nieuwe aanval op RSA: als Charlotte de hardware van Alice kent en de tijd nodig voor het ontcijferen van verschillende bekende cijferteksten kan meten, kan ze de geheime sleutel  snel vinden. Om deze aanval af te slaan, moet de ontsleuteling in een constante tijd gebeuren.

Aangepast gekozen cijfertekst aanvallen 
Daniel Bleichenbacher beschreef in 1996 een poging om met RSA versleutelde berichten met de PKCS #1 v1 redundantiefunctie, een redundantiefunctie voegt structuur toe aan een RSA-bericht, zodat het mogelijk is om te weten of een ontsleuteld bericht goed is, te ontsleutelen. Omwille van zwakke plekken in het PKCS #1 schema kon Bleichenbacher een aanval tegen de RSA-implementatie van het Transport Layer Security protocol opzetten, en mogelijk de sleutels te weten komen. Daarom raden cryptografen nu aan om alleen redundantietesten te gebruiken, waarvan is bewezen dat ze veilig zijn. RSA Laboratories heeft nieuwe versies van PKCS #1 vrijgegeven, die niet gevoelig zijn voor deze aanvallen.

Algoritme
Cryptografie