RSA (cryptografie): verschil tussen versies

Verwijderde inhoud Toegevoegde inhoud
Madyno (overleg | bijdragen)
Geen bewerkingssamenvatting
Madyno (overleg | bijdragen)
Geen bewerkingssamenvatting
Regel 85:
 
=== Ondertekenen ===
 
RSA kan ook worden gebruikt om een bericht te [[digitale handtekening|ondertekenen]]. Veronderstel dat Alice een ondertekend bericht wil zenden naar Bob. Ze berekent dan een [[hashfunctie|hash]]waarde 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 ==
Veronderstel dat Charlotte, een afluisteraar, de publieke sleutel ''<math>N''</math> en ''<math>e''</math>, en de cijfertekst ''<math>c''</math> onderschept. Ze kan niet rechtstreeks aan ''de geheime sleutel <math>d''</math> gerakenkomen, omdat Alice dat geheimdie houdtgeheimhoudt. De meest voor de hand liggende manier voor Charlotte om ''<math>n''</math> te vinden uit ''<math>c''</math>, is om ''<math>N''</math> in de factoren ''<math>p''</math> en ''<math>q''</math> te ontbinden, zodat ze <math>(''p''-1)*(''q''-1)</math> kan berekenen en ''<math>d''</math> kan vinden uit ''<math>e''</math>. Er is nog geen polynomische-tijd 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 ''<math>n''</math> uit ''<math>c''</math> te berekenen, is om ''<math>N''</math> 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 ''<math>N''</math> groot genoeg is.
Veronderstel dat Charlotte, een afluisteraar, de publieke sleutel ''N'' en ''e'', en de cijfertekst ''c'' onderschept. Ze kan niet rechtstreeks aan ''d'' geraken, omdat Alice dat geheim houdt. De meest voor de hand liggende manier voor Charlotte om ''n'' te vinden uit ''c'', is om ''N'' in de factoren ''p'' en ''q'' te ontbinden, zodat ze (''p''-1)*(''q''-1) kan berekenen en ''d'' kan vinden uit ''e''. Er is nog geen polynomische-tijd methode gevonden om getallen 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]].
 
Als ''<math>N''</math> uit 256 of minder [[Bit (informatica)|bits]] of korter isbestaat, 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 ''<math>N''</math> 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 ''<math>N''</math> ten minste 1024 bits lang te kiezen.
Het is ook niet bewezen dat de enige manier om ''n'' uit ''c'' te berekenen, is om ''N'' 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 ''N'' groot genoeg is.
 
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 [[algoritme]]s 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.
Als ''N'' 256 [[Bit (informatica)|bits]] of korter is, 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 ''N'' 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 ''N'' 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 [[algoritme]]s 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 ==
=== Sleutels ===
Om de grote priemgetallen ''<math>p''</math> en ''<math>q''</math> 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 <math>p''</math> en ''<math>q''</math> mogen niet te dicht bij elkaar gelegen zijngliggen, want anders zou de [[Fermatfactorisatiefermatfactorisatie]] voor ''<math>N''</math> succesvol kunnen zijn. Bovendien kan, als ''<math>p''-1</math> of ''<math>q''-1</math> enkelalleen kleine priemfactoren hebben, ''<math>N''</math> snel in factoren worden ontbonden, zodat deze waarden voor ''<math>p''</math> en ''<math>q''</math> ook moeten worden vermedengemeden.
Om de grote priemgetallen ''p'' en ''q'' 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.
 
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 ''<math>p''</math> of ''<math>q''</math> kan raden, hij gemakkelijk de andere helft kan berekenen.
''p'' en ''q'' mogen niet te dicht bij elkaar gelegen zijn, want anders zou de [[Fermatfactorisatie]] voor ''N'' succesvol kunnen zijn. Bovendien kan, als ''p''-1 of ''q''-1 enkel kleine priemfactoren hebben, ''N'' snel in factoren worden ontbonden, zodat deze waarden voor ''p'' en ''q'' ook moeten worden vermeden.
 
Het is belangrijk dat de geheime sleutel ''<math>d''</math> groot genoeg is. Wiener heeft in [[1990]] aangetoond dat als ''<math>p''</math> tussen ''<math>q''</math> en 2*''q''<math>2q</math> ligt (wat veel voorkomt) en ''<math>d'' < ''N''<sup>^{1/4}/3</supmath>/3, ''<math>d''</math> op een efficiënte manier kan worden berekend uit ''<math>N''</math> en ''<math>e''</math>.
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 ''p'' of ''q'' kan raden, hij gemakkelijk de andere helft kan berekenen.
 
Het is belangrijk dat de geheime sleutel ''d'' groot genoeg is. Wiener heeft in [[1990]] aangetoond dat als ''p'' tussen ''q'' en 2*''q'' ligt (wat veel voorkomt) en ''d'' < ''N''<sup>1/4</sup>/3, ''d'' op een efficiënte manier kan worden berekend uit ''N'' en ''e''.
 
=== Snelheid ===
 
RSA is veel trager dan [[Data Encryption Standard|DES]] en andere [[symmetrische cryptografie|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 ===
 
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 [[digitaal certificaat|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 ===
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 ''<math>d''</math> snel vinden. Om deze aanval af te slaan, moet de decryptie in een constante tijd gebeuren, bekend onder de naam '''RSA blinding'''.
 
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 ''d'' 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 ===
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 [[Secure Sockets Layer|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.
 
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 [[Secure Sockets Layer|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 ==
{{references}}