RSA — egy nyilvános kulcsú kriptorendszer, amely titkosítást és digitális aláírást biztosít nagy számok faktorizálásának számítási komplexitásán alapulva. A NIST Special Publication 800-56B Rev. 2 (2023) szerint a 2048 bites kulcshosszúságú RSA továbbra is a biztonsági szabvány az állami és kereskedelmi rendszerek számára. Az algoritmust széles körben használják TLS protokollokban, digitális aláírásokban és adattitkosításban mobilalkalmazásokban.
Főbb pontok
RSA — egy nyilvános kulcsú kriptográfiai algoritmus, amelyet 1977-ben Ronald Rivest, Adi Shamir és Leonard Adleman fejlesztett ki. A név a szerzők vezetékneveinek kezdőbetűiből áll. Az algoritmus volt az első gyakorlatilag alkalmazható aszimmetrikus kriptorendszer, ahol a titkosítási és visszafejtési kulcsok különböznek.
Az RSA algoritmust 1977-ben publikálták a Scientific American folyóiratban, és Whitfield Diffie és Martin Hellman korábbi, nyilvános kulcsú kriptográfiával kapcsolatos munkáin alapult. A Massachusetts Institute of Technology 1983-ban szerzett szabadalmat az RSA-ra, amely 2000-ig volt érvényben. Az RSA Laboratories (2023) jelentése szerint az algoritmus továbbra is a világ legelterjedtebb kriptográfiai szabványai közé tartozik — naponta milliárdnyi eszközben használják.
Ellentétben a szimmetrikus rejtjelekkel, ahol ugyanazt a kulcsot használják titkosításra és visszafejtésre, az RSA matematikailag összefüggő kulcspárral működik. A nyilvános kulcs mindenki számára publikálható a rendszer kompromittálásának kockázata nélkül. A privát kulcsot csak a tulajdonos ismeri, és soha nem továbbítják a hálózaton keresztül. Az IBM Security X-Force Threat Intelligence Index (2024) tanulmánya szerint az aszimmetrikus titkosítást a modern biztonságos adatátviteli protokollok 96%-ában használják.
Az RSA biztonsága a faktorizációs problémán alapul — két nagy prímszám szorzatának tényezőkre bontásán. Ha mindegyik 1024 bites p és q prímszámot választunk, akkor az n szorzatuk 2048 bites lesz. A p és q kiszámítása csak n ismeretében modern módszerekkel gyakorlatilag lehetetlen: a CNRS (2024) szakértői értékelése szerint az RSA-2048 feltöréséhez több mint 300 milliárd év számításra lenne szükség egy klasszikus számítógépen.
Vizsgáljuk meg az RSA teljes munkaciklusát a kulcsgenerálástól az üzenet titkosításáig és visszafejtéséig. Ezen szakaszok megértése szükséges az algoritmus helyes implementálásához mobilalkalmazásokban.
A folyamat két nagy prímszám, p és q kiválasztásával kezdődik. Kiszámítjuk az n = p x q modulust, amely meghatározza a kulcs hosszát. Ezután kiszámítjuk az Euler-függvényt phi(n) = (p-1)(q-1). Kiválasztunk egy e nyilvános kitevőt, amely relatív prím phi(n)-hez. A d privát kitevőt e phi(n) modulo szerinti multiplikatív inverzeként számítjuk ki. A NIST SP 800-56B Rev. 2 szerint az n minimális hosszának 2048 bitnek kell lennie a megfelelő védelem biztosításához.
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();
}
}
Az m üzenet titkosításához a feladó egész számmá alakítja, amely kisebb n-nél, és kiszámítja a c = m^e mod n rejtjelezett szöveget. A címzett a d privát kulccsal állítja vissza az eredeti üzenetet: m = c^d mod n. Fontos megjegyezni, hogy az RSA nem nagy adatmennyiségek titkosítására készült az alacsony teljesítmény miatt — a maximális üzenetméret egyenlő a kulcs hosszával mínusz a szolgáltatási bájtokkal (körülbelül 190 bájt az RSA-2048 esetén OAEP-pel).
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);
}
}
Az RSA digitális aláírások létrehozására is használatos — az adatok hitelességének és integritásának ellenőrzésére szolgáló mechanizmus. A tulajdonos az üzenet hash-ét a privát kulcsával írja alá, és bárki ellenőrizheti az aláírást a nyilvános kulccsal. A Sectigo Certificate Transparency (2025) jelentése szerint az internetes TLS tanúsítványok több mint 85%-a használ RSA-t digitális aláíráshoz, ami az algoritmust a webes kommunikáció bizalmának alapjává teszi.
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)
}
A kulcs hossza közvetlenül befolyásolja az RSA kriptográfiai ellenálló képességét. A számítási teljesítmény növekedésével a minimálisan megengedett kulcsméretet rendszeresen felülvizsgálják a nemzetközi szabványosítási szervezetek. Tekintsük át a NIST és más szabályozók jelenlegi ajánlásait.
| Kulcs hossza | Szimmetrikus megfelelő | Státusz |
|---|---|---|
| 1024 bit | 80 bit | 2023 óta tiltott |
| 2048 bit | 112 bit | Minimális szabvány |
| 3072 bit | 128 bit | Új rendszerekhez ajánlott |
| 4096 bit | 256 bit | Bizalmas adatokhoz |
Az RSA kulcs hosszának növelése jelentősen befolyásolja a műveletek végrehajtási idejét. Egy 4096 bites kulcs generálása körülbelül 10-szer több időt vesz igénybe, mint a 2048 bites. A hosszú kulccsal végzett titkosítási és visszafejtési műveletek több számítási erőforrást igényelnek, ami kritikus a korlátozott energiafogyasztású mobil eszközök számára.
A kvantumszámítógépek fejlődésével az RSA feltörhető a Shor-algoritmus segítségével polinomiális időben. Ezt az algoritmust Peter Shor javasolta 1994-ben, és lehetővé teszi nagy számok faktorizálását O((log n)^3) művelet alatt. Az IBM Quantum Roadmap (2025) szerint az RSA-2048 gyakorlati feltörése várhatóan nem korábban, mint 2035, azonban a NIST már most a CRYSTALS-Kyber és CRYSTALS-Dilithium posztkvantum algoritmusokra való fokozatos áttérést ajánlja.
Az RSA-t aktívan használják mobilalkalmazásokban a biztonságos adatátvitel biztosítására, a szerverek hitelességének ellenőrzésére és a digitális tranzakciók védelmére. Az integráció mindkét fő platform szabványos kriptográfiai API-jain keresztül történik.
Az Android platform Android Keystore — egy rendszer szintű kriptográfiai kulcs tárolót biztosít, amely hardver szinten védett a Trusted Execution Environment által. A KeyStore-ban generált RSA kulcsok nem vonhatók ki az eszközből még az alkalmazás kompromittálása esetén sem. Ez védelmet nyújt a támadások széles osztálya ellen, beleértve a root hozzáféréssel rendelkező kártevőket is.
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()
}
iOS-ben az RSA-val való munkához a Security Framework-öt használják, amely hozzáférést biztosít a Secure Enclave-hoz az A7 chipes és újabb eszközökön. A Secure Enclave egy dedikált koprocesszor, amely elkülönül a fő processzortól, kriptográfiai műveleteket hajt végre, és a kulcsokat hardver enklávéban tárolja. Az RSA kulcsok generálhatók mind a Secure Enclave-ben, mind a szoftveres Keychain-ben különböző hozzáférési szintekkel.
Valós mobilalkalmazásokban az RSA-t ritkán használják nagy adatok közvetlen titkosítására. A szabványos gyakorlat a hibrid séma: az alkalmazás létrehoz egy AES munkamenet-kulcsot, titkosítja azt a szerver nyilvános RSA kulcsával, és elküldi a szervernek. Minden további forgalom AES-sel van titkosítva, ami 100–1000-szer gyorsabb, mint az adatok RSA-n keresztüli közvetlen továbbítása.
Mint minden kriptográfiai algoritmusnak, az RSA-nak is vannak erős és gyenge pontjai, amelyeket figyelembe kell venni a biztonságos rendszerek tervezésekor. Az objektív értékelés segít kiválasztani a megfelelő eszközt egy adott feladathoz.
Az RSA fő előnye a kulcs elosztás alapvető problémájának megoldása — a nyilvános kulcs szabadon publikálható a teljes rendszer kompromittálásának kockázata nélkül. Az algoritmus univerzalitása abban nyilvánul meg, hogy ugyanaz a kulcspár támogatja mind a titkosítást, mind a digitális aláírást. Emellett az RSA kiterjedt támogatási ökoszisztémával rendelkezik: a könyvtárak minden nyelvhez és platformhoz elérhetők.
Az RSA fő hátránya az alacsony teljesítmény a szimmetrikus algoritmusokhoz képest. Az RSA-2048 visszafejtése egy modern mobil processzoron körülbelül 5–15 ezredmásodpercig tart, míg az AES-256 ugyanennyi idő alatt gigabájtnyi adatot dolgoz fel. Továbbá az RSA sebezhető a Shor-algoritmuson keresztüli kvantumtámadásokkal szemben, ami korlátozza alkalmazását a hosszú távú adatvédelmi rendszerekben.
Mobil projektekhez a NIST szakértői a következőket ajánlják: használja az RSA-t csak kulcsok titkosítására és digitális aláírásokra, válasszon legalább 3072 bites kulcshosszt új projektekhez, kombinálja az RSA-t AES-sel hibrid sémában, és kövesse nyomon a posztkvantum szabványok fejlődését a tervezett migrációhoz hosszú távon.
Gyakran ismételt kérdések
RSA — aszimmetrikus algoritmus kulcspárral, kis adatmennyiségek titkosítására és digitális aláírásokra használják. AES — szimmetrikus algoritmus egyetlen megosztott kulccsal, 100–1000-szer gyorsabb, mint az RSA. A modern rendszerekben kombinálják őket: az RSA védi az AES munkamenet-kulcs továbbítását, az AES pedig a fő forgalmat titkosítja.
A minimális biztonságos méret 2023 óta a NIST SP 800-131A Rev. 2 szerint az RSA-2048. Az 1024 bites kulcsok hivatalosan tiltottak az amerikai kormányzati rendszerek számára. Új projektekhez 3072 bit ajánlott, ami biztonsági tartalékot és a 128 bites szimmetrikus titkosítással egyenértékű ellenállást biztosít.
Igen, az RSA-t széles körben használják mobilalkalmazásokban. Az Android Android KeyStore-t biztosít az RSA kulcsok hardveres generálásához és biztonságos tárolásához. iOS — Security Framework Secure Enclave támogatással. Nagy adatok titkosításához az RSA + AES hibrid séma ajánlott, ahol az RSA csak a munkamenet-kulcsot titkosítja.
Klasszikus számítógépeken az RSA-2048 feltörése gyakorlatilag lehetetlen — a jelenlegi becslések szerint több mint 300 milliárd év folyamatos számításra lenne szükség. Azonban egy kellő számú qubittel rendelkező kvantumszámítógép néhány perc alatt feltörheti az RSA-2048-at a Shor-algoritmus segítségével. Az IBM becslései szerint egy ilyen számítógép 2035 előtt nem jelenik meg.
Az aszimmetrikus algoritmusok közül népszerű az ECC (Elliptic Curve Cryptography), amely egyenértékű biztonságot nyújt kisebb kulcshosszal — a 256 bites ECC megfelel az RSA-3072-nek. A posztkvantum korszakra a NIST 2024-ben a CRYSTALS-Kybert választotta titkosításhoz és a CRYSTALS-Dilithiumot digitális aláírásokhoz.
Összefoglalás
Kulcsrakész mobilalkalmazást fejlesztünk
Az IT Sectr 2017 óta készít iOS és Android alkalmazásokat induló vállalkozásoknak és vállalkozásoknak. Tanácsot adunk, és a legjobb megoldást javasoljuk.
Olvassa el is