pprime×qprime=n = pq2048 bitseasy forward, hard reversefactoring n breaks RSA

RSA-codering

11 min gelezenCryptografie

RSA was het eerste praktische algoritme met een publieke sleutel, waarmee twee mensen een geheim konden uitwisselen zonder elkaar ooit persoonlijk te ontmoeten. Achtenveertig jaar later beveiligt het nog steeds een substantieel deel van de TLS-handshakes, ondertekent het elk PGP-bericht en ondersteunt het vele programma's voor het ondertekenen van codes. Wordt langzaam vervangen door elliptische rondingen, maar is nog niet verdwenen.

De volledige artikeltekst vindt u hieronder in het Engels.

RSA is een cryptosysteem met publieke sleutel dat in 1977 werd geïntroduceerd door Ron Rivest, Adi Shamir en Leonard Adleman aan het MIT. Het patent liep in 2000 af, waarna het zich naar vrijwel elke cryptografische bibliotheek verspreidde. RSA maakt twee complementaire bewerkingen mogelijk: versleutelen met een publieke sleutel, zodat alleen de privésleutel kan worden ontsleuteld, en ondertekenen met een privésleutel, zodat iedereen met de openbare sleutel kan verifiëren.

De beveiliging van

RSA berust in het kort op de moeilijkheid om grote getallen in factoren te verwerken. Sleutelgeneratie:

  1. Kies twee grote willekeurige priemgetallen p en q (doorgaans elk 2048 bits).
  2. Bereken n = p × q. Dit is de modulus, publiek.
  3. Bereken de totient van Euler: φ(n) = (p-1)(q-1).
  4. Kies een kleine oneven e coprime tot φ(n). Gewoonlijk 65537 (=2^16+1).
  5. Bereken d = e^(-1) mod φ(n). Dit is de privésleutel.

De publieke sleutel is het paar (n, e); de privésleutel is d.

Om een ​​bericht m te coderen: cijfertekst c = m^e mod n. Om te decoderen: m = c^d mod n. Iedereen met de publieke sleutel kan coderen; alleen iemand met de privésleutel kan ontsleutelen. Om te tekenen, het omgekeerde: s = m^d mod n, verifieer met m = s^e mod n.

Waarom dit werkt

De truc: het berekenen van d vereist het kennen van φ(n), wat factoring vereist n in p × q. Het ontbinden van een 2048-bit semiprime vergt meer rekenkracht dan de mensheid. Het verifiëren van n = p × q als u p en q al kent, is triviaal. De asymmetrie – gemakkelijke vermenigvuldiging, harde factoring – is de hele basis van RSA.

Keysizes

  • RSA-1024 – in principe doorbroken door goed uitgeruste tegenstanders; NIST heeft het sinds 2014 verboden voor nieuwe implementaties.
  • RSA-2048 – huidige basislijn. Wordt als veilig beschouwd voor de middellange termijn tegen klassieke tegenstanders.
  • RSA-3072 – aanbevolen voor nieuwe implementaties volgens de transitietijdlijn van NIST voor 2030.
  • RSA-4096 – gebruikelijk voor code-ondertekening waarbij de sleutel een horizon van 10-20 jaar heeft. Langzamer maar conservatief veilig.

RSA in de praktijk

RSA codeert vrijwel nooit grote berichten rechtstreeks. Het is langzaam: voor het coderen van een kilobyte zijn duizenden modulaire machtsverheffingen nodig. In plaats daarvan wordt RSA gebruikt in hybride encryptie: genereer een willekeurige AES-sleutel, codeer de gegevens met AES, codeer alleen de AES-sleutel met RSA. De decoderingszijde decodeert RSA de sleutel en vervolgens decodeert AES de gegevens. Elke TLS RSA-handshake werkt op deze manier; elke met PGP gecodeerde e-mail werkt op deze manier.

Padding is belangrijk

Plain ("leerboek") RSA — m rechtstreeks versleutelen zonder opvulling — is catastrofaal onveilig. Veel aanvallen maken gebruik van maakbaarheid, de afwezigheid van willekeur en randgevallen zoals de kleine m. Echte RSA gebruikt opvullingsschema's:

  • PKCS#1 v1.5 opvulling - originele opvulling; kwetsbaar voor de aanval van Bleichenbacher als implementaties lekken of opvulling geldig is. Nog steeds op grote schaal ingezet.
  • OAEP (Optimale Asymmetrische Encryptie Padding) — moderne opvulling; bestand tegen aanvallen met gekozen cijfertekst. Gebruik dit voor nieuwe RSA-codering.
  • PSS (Probabilistic Signature Scheme) — moderne handtekeningopvulling; superieur aan PKCS#1 v1.5 voor ondertekening.

Het opvullingsschema maakt deel uit van het geïmplementeerde protocol en is niet optioneel. Fouten bij de implementatie van opvulling zijn de meest voorkomende bron van RSA-kwetsbaarheden in echte systemen. De langzame pensionering van

RSA

RSA wordt vervangen om twee redenen:

  • Sleutelgrootte. RSA-3072-sleutels zijn groter dan de equivalente elliptische curve toetsen met 10×. De TLS-handshake- en opslagkosten lopen op bij elkaar op.
  • Kwantumweerstand. Een voldoende grote kwantumcomputer zou RSA via Shor's algoritme in polynomiale tijd in rekening brengen. ECC is ook kwetsbaar, maar kwantumbestendige alternatieven zijn gemakkelijker te implementeren.

TLS 1.3 heeft de uitwisseling van RSA-sleutels beëindigd ten gunste van ECDHE. De moderne ondertekening door certificeringsinstanties verhuist naar ECDSA. RSA blijft bestaan ​​voor de geïnstalleerde compatibiliteit (PGP, JWT, smartcards, codeondertekening) en zal jarenlang blijven bestaan.

De post-kwantumvraag

Zelfs als het nog tientallen jaren duurt voordat kwantumcomputers die RSA kunnen breken, worden versleutelde gegevens met langetermijnwaarde verzameld in de veronderstelling dat ze later kunnen worden ontsleuteld. Overheidskabels, medische dossiers, intellectueel eigendom – ‘oogst nu, ontsleutel later’ is het huidige dreigingsmodel. De post-kwantumstandaarden van NIST (CRYSTALS-Kyber voor sleutelinkapseling, CRYSTALS-Dilithium voor handtekeningen) worden naast RSA in hybride configuraties ingezet. Pure-RSA-implementaties voor vertrouwelijke gegevens op de lange termijn worden steeds vaker als ontoereikend beschouwd.

Veelgestelde vragen

Is RSA nog steeds veilig in 2026?
Tegen klassieke tegenstanders blijven RSA-2048 en groter veilig. Het cijfer heeft geen bekende praktische breuk. Tegen toekomstige kwantumtegenstanders is RSA in polynomiale tijd breekbaar zodra de kwantumhardware groot genoeg is – waarschijnlijk over 5 tot 20 jaar. Vertrouwelijke gegevens voor de lange termijn zouden al naar hybride post-kwantumsystemen moeten worden verplaatst.
Waarom is RSA zo traag vergeleken met AES?
RSA is een (asymmetrisch) algoritme met een publieke sleutel, gebaseerd op enorme modulaire machtsverheffing; AES is een symmetrisch algoritme dat werkt op 128-bits blokken met hardwareversnelling. AES is ongeveer 1000× sneller per byte. Dat is de reden waarom bijna alle echte systemen RSA alleen gebruiken om een ​​sessiesleutel uit te wisselen en vervolgens bulkgegevens te versleutelen met AES.
Wat is het verschil tussen RSA-codering en RSA-handtekeningen?
Ze gebruiken dezelfde wiskunde in tegengestelde richtingen. Encryptie: versleutelen met de publieke sleutel, decoderen met de privésleutel. Handtekening: "versleutelen" met de privésleutel (ondertekening genoemd), "ontsleutelen" met de openbare sleutel (verificatie genoemd). De cryptografische primitieven verschillen in details (opvulling) en u mag nooit voor beide dezelfde sleutel gebruiken; aparte ondertekenings- en encryptiesleutels zijn standaard.
Waarom wordt 65537 gebruikt als de publieke RSA-exponent?
Het is een Fermat-priemgetal (2^16 + 1), klein genoeg om de codering/verificatie snel te maken (slechts 17 vermenigvuldigingen), met een schaarse binaire representatie die efficiënte berekeningen mogelijk maakt. Grotere of kleinere waarden werken, maar zijn langzamer of brengen subtiele kwetsbaarheidsrisico's met zich mee. 65537 is volgens afspraak universeel geworden.
Kan ik veilig mijn eigen RSA-sleutel genereren?
Gebruik een goed geteste bibliotheek (OpenSSL, libsodium, GnuPG) en een CSPRNG. Voer nooit uw eigen primaliteitstest uit en implementeer RSA niet helemaal opnieuw; de faalwijzen zijn subtiel en catastrofaal. Het genereren van een sleutel via <code>ssh-keygen -t rsa -b 3072</code> of gelijkwaardig is prima; zelf de wiskunde schrijven is dat niet.
RSA-encryptie uitgelegd: het algoritme dat cryptografie met publieke sleutels praktisch maakte