RSA — een cryptosysteem met openbare sleutel dat versleuteling en digitale handtekeningen mogelijk maakt op basis van de rekenkundige complexiteit van het factoriseren van grote getallen. Volgens NIST Special Publication 800-56B Rev. 2 (2023) blijft RSA met een sleutellengte van 2048 bits de veiligheidsstandaard voor overheids- en commerciële systemen. Het algoritme wordt veel gebruikt in TLS-protocollen, digitale handtekeningen en gegevensversleuteling in mobiele applicaties.
Belangrijkste punten
RSA — een cryptografisch algoritme met openbare sleutel, ontwikkeld in 1977 door Ronald Rivest, Adi Shamir en Leonard Adleman. De naam is gevormd uit de eerste letters van de achternamen van de auteurs. Het algoritme was het eerste praktisch toepasbare asymmetrische cryptosysteem waarbij de versleutelings- en ontsleutelingssleutels verschillen.
Het RSA-algoritme werd in 1977 gepubliceerd in het tijdschrift Scientific American en was gebaseerd op eerder werk van Whitfield Diffie en Martin Hellman op het gebied van cryptografie met openbare sleutel. Het Massachusetts Institute of Technology verkreeg in 1983 een patent op RSA, dat tot 2000 van kracht was. Volgens een rapport van RSA Laboratories (2023) blijft het algoritme een van de meest verspreide cryptografische standaarden ter wereld — het wordt dagelijks in miljarden apparaten gebruikt.
In tegenstelling tot symmetrische cijfers waar dezelfde sleutel wordt gebruikt voor zowel versleuteling als ontsleuteling, werkt RSA met een wiskundig gerelateerd sleutelpaar. De openbare sleutel kan voor iedereen worden gepubliceerd zonder risico op compromittering van het systeem. De privésleutel is alleen bekend bij de eigenaar en wordt nooit via het netwerk verzonden. Volgens het IBM Security X-Force Threat Intelligence Index (2024)-onderzoek wordt asymmetrische versleuteling gebruikt in 96% van de moderne protocollen voor veilige gegevensoverdracht.
De veiligheid van RSA is gebaseerd op het factorisatieprobleem — het ontbinden van het product van twee grote priemgetallen in factoren. Als priemgetallen p en q met een lengte van elk 1024 bits worden gekozen, dan zal hun product n 2048 bits bevatten. Het berekenen van p en q met alleen kennis van n is met moderne methoden praktisch onmogelijk: volgens een deskundigenbeoordeling van CNRS (2024) zou het kraken van RSA-2048 meer dan 300 miljard jaar rekenen op een klassieke computer vergen.
Laten we de volledige werkingscyclus van RSA bekijken, van sleutelgeneratie tot versleuteling en ontsleuteling van een bericht. Inzicht in deze fasen is noodzakelijk voor een correcte implementatie van het algoritme in mobiele applicaties.
Het proces begint met het kiezen van twee grote priemgetallen p en q. De modulus n = p x q wordt berekend, die de sleutellengte bepaalt. Vervolgens wordt de Euler-functie phi(n) = (p-1)(q-1) berekend. Er wordt een openbare exponent e gekozen die relatief priem is met phi(n). De privéexponent d wordt berekend als de multiplicatieve inverse van e modulo phi(n). Volgens NIST SP 800-56B Rev. 2 moet de minimale lengte van n 2048 bits zijn voor adequate bescherming.
import java.security.KeyPairGenerator;
import java.security.KeyPair;
import java.security.SecureRandom;
public class RSAKeyGenerator {
public static KeyPair generateKeyPair() throws Exception {
KeyPairGenerator generator = KeyPairGenerator.getInstance("RSA");
generator.initialize(2048, new SecureRandom());
return generator.generateKeyPair();
}
}
Om een bericht m te versleutelen, transformeert de afzender het naar een geheel getal kleiner dan n en berekent de cijfertekst c = m^e mod n. De ontvanger gebruikt de privésleutel d om het oorspronkelijke bericht te herstellen: m = c^d mod n. Het is belangrijk op te merken dat RSA niet bedoeld is voor het versleutelen van grote hoeveelheden gegevens vanwege de lage prestaties — de maximale berichtgrootte is gelijk aan de sleutellengte minus servicebytes (ongeveer 190 bytes voor RSA-2048 met OAEP).
import javax.crypto.Cipher;
import java.security.PublicKey;
import java.util.Base64;
public class RSAEncryptor {
public static String encrypt(String data, PublicKey publicKey) throws Exception {
Cipher cipher = Cipher.getInstance("RSA/ECB/OAEPWithSHA-256AndMGF1Padding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encrypted = cipher.doFinal(data.getBytes());
return Base64.getEncoder().encodeToString(encrypted);
}
}
RSA wordt ook gebruikt voor het maken van digitale handtekeningen — een mechanisme om de authenticiteit en integriteit van gegevens te verifiëren. De eigenaar ondertekent de hash van het bericht met zijn privésleutel, en iedereen kan de handtekening verifiëren met de openbare sleutel. Volgens het Sectigo Certificate Transparency (2025)-rapport gebruikt meer dan 85% van de TLS-certificaten op internet RSA voor digitale handtekeningen, wat het algoritme de basis van vertrouwen voor webcommunicatie maakt.
import java.security.Signature
fun signData(data: ByteArray, privateKey: java.security.PrivateKey): ByteArray {
val signature = Signature.getInstance("SHA256withRSA")
signature.initSign(privateKey)
signature.update(data)
return signature.sign()
}
fun verifySignature(
data: ByteArray, signedData: ByteArray, publicKey: java.security.PublicKey
): Boolean {
val signature = Signature.getInstance("SHA256withRSA")
signature.initVerify(publicKey)
signature.update(data)
return signature.verify(signedData)
}
De sleutellengte heeft directe invloed op de cryptografische sterkte van RSA. Met de groei van de rekenkracht wordt de minimaal toegestane sleutelgrootte regelmatig herzien door internationale normalisatieorganisaties. Laten we de huidige aanbevelingen van NIST en andere toezichthouders bekijken.
| Sleutellengte | Symmetrisch equivalent | Status |
|---|---|---|
| 1024 bits | 80 bits | Verboden sinds 2023 |
| 2048 bits | 112 bits | Minimale standaard |
| 3072 bits | 128 bits | Aanbevolen voor nieuwe systemen |
| 4096 bits | 256 bits | Voor vertrouwelijke gegevens |
Het vergroten van de sleutellengte van RSA heeft aanzienlijke invloed op de uitvoeringstijd van bewerkingen. Het genereren van een sleutel van 4096 bits duurt ongeveer 10 keer langer dan 2048 bits. Versleutelings- en ontsleutelingsbewerkingen met een lange sleutel vereisen meer rekenkracht, wat kritisch is voor mobiele apparaten met beperkt energieverbruik.
Met de ontwikkeling van kwantumcomputers kan RSA worden gekraakt met behulp van het algoritme van Shor in polynomiale tijd. Dit algoritme, voorgesteld door Peter Shor in 1994, maakt het mogelijk grote getallen te factoriseren in O((log n)^3) bewerkingen. Volgens de IBM Quantum Roadmap (2025) wordt praktische kraken van RSA-2048 niet eerder dan 2035 verwacht, maar NIST beveelt al geleidelijke overgang aan naar post-kwantumalgoritmen CRYSTALS-Kyber en CRYSTALS-Dilithium.
RSA wordt actief gebruikt in mobiele applicaties voor het waarborgen van veilige gegevensoverdracht, het verifiëren van serverauthenticiteit en het beschermen van digitale transacties. Integratie vindt plaats via de standaard cryptografische API's van beide belangrijke platforms.
Het Android-platform biedt Android Keystore — een systeemopslag voor cryptografische sleutels, beschermd op hardwareniveau door Trusted Execution Environment. RSA-sleutels die in KeyStore zijn gegenereerd, kunnen niet uit het apparaat worden gehaald, zelfs niet als de applicatie is gecompromitteerd. Dit biedt bescherming tegen een brede klasse van aanvallen, waaronder malware met root-toegang.
import android.security.keystore.KeyGenParameterSpec
import android.security.keystore.KeyProperties
import java.security.KeyPairGenerator
fun generateKeyInAndroidKeystore() {
val generator = KeyPairGenerator.getInstance(
KeyProperties.KEY_ALGORITHM_RSA,
"AndroidKeyStore"
)
val spec = KeyGenParameterSpec.Builder(
"rsa_key_pair",
KeyProperties.PURPOSE_ENCRYPT or KeyProperties.PURPOSE_DECRYPT
)
.setKeySize(2048)
.setBlockModes(KeyProperties.BLOCK_MODE_ECB)
.setEncryptionPaddings(KeyProperties.ENCRYPTION_PADDING_RSA_OAEP)
.build()
generator.initialize(spec)
val keyPair = generator.generateKeyPair()
}
In iOS wordt voor het werken met RSA het Security Framework gebruikt met toegang tot Secure Enclave op apparaten met een A7-chip en nieuwer. Secure Enclave is een speciale coprocessor, geïsoleerd van de hoofdprocessor, die cryptografische bewerkingen uitvoert en sleutels opslaat in een hardware-enclave. RSA-sleutels kunnen zowel binnen Secure Enclave als in software Keychain met verschillende niveaus van toegang worden gegenereerd.
In echte mobiele applicaties wordt RSA zelden gebruikt voor directe versleuteling van grote gegevens. De standaardpraktijk is een hybride schema: de applicatie genereert een AES-sessiesleutel, versleutelt deze met de openbare RSA-sleutel van de server en verzendt deze naar de server. Al het volgende verkeer wordt versleuteld met AES, wat 100–1000 keer sneller is dan directe gegevensoverdracht via RSA.
Zoals elk cryptografisch algoritme heeft RSA sterke en zwakke punten die in overweging moeten worden genomen bij het ontwerpen van beveiligde systemen. Een objectieve beoordeling helpt bij het kiezen van het juiste hulpmiddel voor een specifieke taak.
Het belangrijkste voordeel van RSA is de oplossing van het fundamentele probleem van sleuteldistributie — de openbare sleutel kan vrij worden gepubliceerd zonder risico op compromittering van het hele systeem. De universaliteit van het algoritme blijkt uit de ondersteuning van zowel versleuteling als digitale handtekening met hetzelfde sleutelpaar. Bovendien heeft RSA een uitgebreid ondersteuningsecosysteem: bibliotheken zijn beschikbaar voor alle talen en platforms.
Het grootste nadeel van RSA zijn de lage prestaties in vergelijking met symmetrische algoritmen. Ontsleuteling van RSA-2048 op een moderne mobiele processor duurt ongeveer 5–15 milliseconden, terwijl AES-256 gigabytes aan gegevens in dezelfde tijd verwerkt. Ook is RSA kwetsbaar voor kwantumaanvallen via het algoritme van Shor, wat de toepassing ervan in systemen met langdurige gegevensbescherming beperkt.
Voor mobiele projecten raden NIST-experts aan: gebruik RSA alleen voor sleutelversleuteling en digitale handtekeningen, kies een sleutellengte van ten minste 3072 bits voor nieuwe projecten, combineer RSA met AES in een hybride schema en volg de ontwikkeling van post-kwantumstandaarden voor geplande migratie op de lange termijn.
Veelgestelde vragen
RSA — een asymmetrisch algoritme met een sleutelpaar, gebruikt voor het versleutelen van kleine hoeveelheden gegevens en digitale handtekeningen. AES — een symmetrisch algoritme met een enkele gedeelde sleutel, dat 100–1000 keer sneller werkt dan RSA. In moderne systemen worden ze gecombineerd: RSA beschermt de overdracht van de AES-sessiesleutel, terwijl AES het hoofdverkeer versleutelt.
De minimale veilige grootte sinds 2023 volgens NIST SP 800-131A Rev. 2 is RSA-2048. Sleutels van 1024 bits zijn officieel verboden voor Amerikaanse overheidssystemen. Voor nieuwe projecten wordt 3072 bits aanbevolen, wat een veiligheidsmarge en equivalente sterkte van 128-bit symmetrische versleuteling biedt.
Ja, RSA wordt veel gebruikt in mobiele applicaties. Android biedt Android KeyStore voor hardwarematige generatie en veilige opslag van RSA-sleutels. iOS — Security Framework met ondersteuning voor Secure Enclave. Voor het versleutelen van grote gegevens wordt een hybride schema RSA + AES aanbevolen, waarbij RSA alleen de sessiesleutel versleutelt.
Op klassieke computers is het kraken van RSA-2048 praktisch onmogelijk — volgens huidige schattingen zou het meer dan 300 miljard jaar onafgebroken rekenen vergen. Een kwantumcomputer met voldoende qubits kan echter RSA-2048 in enkele minuten kraken met behulp van het algoritme van Shor. Volgens schattingen van IBM zal een dergelijke computer niet eerder dan 2035 verschijnen.
Onder de asymmetrische algoritmen is ECC (Elliptic Curve Cryptography) populair, dat gelijkwaardige veiligheid biedt met een kleinere sleutellengte — 256-bit ECC is equivalent aan RSA-3072. Voor het post-kwantumtijdperk heeft NIST in 2024 CRYSTALS-Kyber gekozen voor versleuteling en CRYSTALS-Dilithium voor digitale handtekeningen.
Samenvatting
We ontwikkelen een mobiele applicatie turnkey
IT Sectr creëert sinds 2017 iOS- en Android-applicaties voor startups en bedrijven. We adviseren u en stellen de beste oplossing voor.
Lees ook