RSA (cryptografie)

Uit Wikipedia, de vrije encyclopedie
Naar navigatie springen Naar zoeken springen
SecurID's uitgerust met RSA.

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.

Werking[bewerken]

Sleutels[bewerken]

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.

Versleutelen[bewerken]

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.

Ontsleutelen[bewerken]

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 ontsleutelingsrelatie[bewerken]

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.

Voorbeeld[bewerken]

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.

Ondertekenen[bewerken]

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.

Veiligheid[bewerken]

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 bedenkingen[bewerken]

Sleutels[bewerken]

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 gliggen, 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 .

Snelheid[bewerken]

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.

Sleutelverdeling[bewerken]

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 aanvallen[bewerken]

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. Om deze aanval af te slaan, moet de decryptie in een constante tijd gebeuren, bekend onder de naam RSA blinding.

Aangepast gekozen cijfertekst aanvallen[bewerken]

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.

Voetnoten[bewerken]

  1. Gebruik modpow(298,187,319) op de site: "bigint - large integer package"

Zie ook[bewerken]

Externe links[bewerken]