RSA (cryptografie)

cryptografie

RSA is een asymmetrisch encryptiealgoritme, dat veel gebruikt wordt voor elektronische handel (beveiliging van transacties en dergelijke). Het formele 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 (GCHQ) werkte, heeft in 1973 een gelijkwaardig algoritme beschreven in een intern document, 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; het zou te veel tijd in beslag nemen. Nieuwe ontwikkelingen op dit gebied zouden RSA onbruikbaar kunnen maken.

MIT heeft in 1983 in de V.S. het algoritme gepatenteerd. Het patent liep op 21 september 2000 af. Omdat het algoritme gepubliceerd werd vóór de patentaanvraag, kon het niet worden gepatenteerd in andere landen.

WerkingBewerken

SleutelsBewerken

Veronderstel dat Alice ervoor wil zorgen dat Bob haar een geheim bericht kan zenden over een onveilig medium (telefoon, internet, post, ...). Alice doet het volgende om een publieke sleutel en een geheime sleutel te maken:

  1. Ze kiest willekeurig twee grote priemgetallen   en   en berekent  .
  2. Ze kiest een geheel getal   tussen 1 en het totiënt getal (Eulerindicator)   van  , relatief priem t.o.v.  , d.w.z.   en   en   hebben geen gemeenschappelijke deler anders dan 1:  .
  3. Ze berekent   zodat  , dus   voor zekere gehele  .

Het getallenpaar  , bestaande uit de getallen   en  , vormt de publieke sleutel. Het getallenpaar   is de geheime sleutel. Daarin is alleen   dus geheim, want   is bekend. Alice stuurt   en   naar Bob via een mogelijkerwijs onveilig medium en ze houdt   geheim.

VersleutelenBewerken

Veronderstel dat Bob een bericht   naar Alice wil zenden. Hij kent   en   (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 kan   worden opgesplitst en elk stuk afzonderlijk vercijferd. Dan berekent hij de cijfertekst (versleutelde tekst)   met behulp van de vergelijking:

 

Dit kan snel gedaan worden door machtsverheffing door kwadrateren. Bob verzendt dan   naar Alice.

OntsleutelenBewerken

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:

 

Omdat  , lijkt voor de ontsleuteling de relatie   voor de hand te liggen, maar merk op dat de ontsleutelingsrelatie niet modulo   is, maar modulo  .

Het formele bewijs van de ontsleutelingsrelatie wordt in de volgende sectie gegeven.

Als de complexiteit die het modulo rekenen met zich meebrengt even vergeten wordt, lijkt de ontsleutelingsrelatie triviaal. Immers, omdat   en   uit de publieke sleutel bekend is, volgt eenvoudigweg voor de geheime sleutel  . De corresponderende modulovergelijking voor   daarentegen:  , vraagt de waarden van   en   afzonderlijk om   uit   te verkrijgen. Zoals al in de inleiding is opgemerkt, zijn   en   zeer moeilijk uit   terug te rekenen en daarom geeft de modulovergelijking een moeilijk te kraken waarde voor  .

Als laatste stap verkrijgt Alice de boodschap   in tekstvorm door op de numerieke vorm   van de boodschap het afgesproken, niet-geheime, protocol in omgekeerde richting toe te passen.

Bewijs ontsleutelingsrelatieBewerken

Het bewijs gebruikt Fermats kleine stelling. 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.

VoorbeeldBewerken

Als voorbeeld kiest Alice de priemgetallen   en  . Dan is  . Voor de publieke sleutel neemt ze  . Het getal 3 is relatief priem ten opzichte van  . Alice stuurt Bob haar publieke sleutel 3 en 319. Zij berekent haar geheime sleutel   zo, dat

 

Voor   volgt  .

Als Bob de letter 'Y', met ASCII-code 89, naar Alice wil sturen, versleutelt hij deze, en berekent de code:

 

Bob stuurt de codetekst voor de letter 'Y', het getal 298, naar Alice. Om de tekst te decoderen met de geheime sleutel, berekent Alice:[1]

 ,

wat inderdaad weer de ASCII-code van de letter 'Y' is.

OndertekenenBewerken

RSA kan ook worden gebruikt om een bericht te ondertekenen. Veronderstel dat Alice een ondertekend bericht wil zenden naar Bob. Ze berekent dan een hashwaarde uit het bericht, vercijfert die met haar geheime sleutel, en voegt dat als een "handtekening" bij het bericht. Deze handtekening kan alleen worden ontcijferd met haar publieke sleutel. Wanneer Bob het ondertekende bericht ontvangt, ontcijfert hij de handtekening met Alices publieke sleutel, en vergelijkt de aldus bekomen 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 (dus normaal gezien Alice is), en dat het bericht na verzending niet meer veranderd is.

VeiligheidBewerken

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; zie priemfactor.

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 publiekelijk 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 gevonden worden met een personal computer, gebruik makende van software die vrij toegankelijk is op het internet. Als   512 bits of korter is, kan, sinds 1999, de ontbinding uitgevoerd worden door enkele honderden computers (in een aanvaardbare tijd). Het is tegenwoordig aan te raden   ten minste 1024 bits lang te kiezen.

In 1994 heeft Peter Shor aangetoond dat een kwantumcomputer in principe de factorisatie in polynomiale tijd zal kunnen uitvoeren. Als (of wanneer) kwantumcomputers werkelijkheid worden, zal het algoritme van Shor RSA en andere soortgelijke algoritmes onbruikbaar maken. Als een efficiënte methode voor ontbinding 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. Daarom is het niet veilig om lange-termijn geheimen uit te wisselen met RSA.

Praktische bedenkingenBewerken

SleutelsBewerken

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 "waarschijnlijk priemgetal" is gevonden, 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 sleutel   groot genoeg is. Wiener heeft in 1990 aangetoond dat als   tussen   en   ligt (wat veel voorkomt) en  ,   op een efficiënte manier kan worden berekend uit   en  .

SnelheidBewerken

RSA is veel trager dan DES en andere symmetrische encryptiealgoritmes. In de praktijk vercijfert Bob gewoonlijk zijn bericht met een symmetrisch algoritme en de symmetrische sleutel (kort in vergelijking met het bericht) met RSA. Het symmetrisch vercijferd bericht en de met RSA vercijferde sleutel worden dan beiden verstuurd naar Alice.

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 gemaakt worden met een goede toevalsgenerator, want anders zou Charlotte om RSA heen kunnen door de symmetrische sleutel te raden.

SleutelverdelingBewerken

Zoals bij alle encryptiemethoden, is het belangrijk hoe de publieke sleutels verspreid worden. 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 geëncrypteerd met de eerder ontvangen publieke sleutel naar Alice sturen (Alice denkt dat het bericht rechtstreeks van Bob komt). In principe kunnen Alice en Bob 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 checksum) vergelijken tijdens een "echte" ontmoeting (als dat mogelijk is).

Tijdsgebaseerde aanvallenBewerken

Kocher beschreef een ingenieuze nieuwe aanval op RSA in 1995: 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[2]. Om deze aanval af te slaan, moeten de wiskundige operaties in een constante tijd gebeuren.

Vergelijkbare aanvallen zijn mogelijk door precies het stroomverbruik van implementaties te meten, deze aanvallen staan bekend als Power Analysis aanvallen.

Aangepast gekozen cijfertekst aanvallenBewerken

In 1996 beschreef Daniel Bleichenbacher de eerste praktische aangepast gekozen cijfertekst aanval tegen met RSA vercijferde 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 gedecrypteerd bericht goed is). Omwille van zwakke plekken in het PKCS #1 schema kon Bleichenbacher een aanval tegen de RSA-implementatie van het SSL protocol opzetten, en mogelijk de sessie-sleutels te weten komen. Daarom raden cryptografen nu aan om bewijsbaar veilige redundantietesten zoals OAEP te gebruiken, en RSA Laboratories heeft nieuwe versies van PKCS #1 vrijgegeven, die niet gevoelig zijn voor deze aanvallen.

VoetnotenBewerken

  1. Gebruik modpow(298,187,319) op de site: "bigint - large integer package"
  2. Paul C. Kocher, Advances in Cryptology — CRYPTO ’96. Springer Berlin Heidelberg, Berlin, Heidelberg (1996), “Timing Attacks on Implementations of Diffie-Hellman, RSA, DSS, and Other Systems”, 104–113. ISBN 9783540615125.

Zie ookBewerken

Externe linksBewerken