RSA — kryptosystém s veřejným klíčem zajišťující šifrování a digitální podpis na základě výpočetní složitosti faktorizace velkých čísel. Podle NIST Special Publication 800-56B Rev. 2 (2023) zůstává RSA s délkou klíče 2048 bitů bezpečnostním standardem pro vládní a komerční systémy. Algoritmus je široce používán v protokolech TLS, digitálních podpisech a šifrování dat v mobilních aplikacích.
Hlavní body
RSA — kryptografický algoritmus s veřejným klíčem vyvinutý v roce 1977 Ronaldem Rivestem, Adi Shamirem a Leonardem Adlemanem. Název je tvořen prvními písmeny příjmení autorů. Algoritmus se stal prvním prakticky použitelným asymetrickým kryptosystémem, kde se šifrovací a dešifrovací klíče liší.
Algoritmus RSA byl zveřejněn v roce 1977 v časopise Scientific American a vycházel z dřívějších prací Whitfielda Diffieho a Martina Hellmana v oblasti kryptografie s veřejným klíčem. Massachusetts Institute of Technology získal patent na RSA v roce 1983, který platil do roku 2000. Podle zprávy RSA Laboratories (2023) zůstává algoritmus jedním z nejrozšířenějších kryptografických standardů na světě — denně se používá v miliardách zařízení.
Na rozdíl od symetrických šifer, kde se stejný klíč používá jak pro šifrování, tak pro dešifrování, RSA pracuje s matematicky propojeným párem klíčů. Veřejný klíč může být zveřejněn pro všechny bez rizika kompromitace systému. Soukromý klíč zná pouze vlastník a nikdy není přenášen po síti. Podle studie IBM Security X-Force Threat Intelligence Index (2024) se asymetrické šifrování používá v 96% moderních protokolů bezpečného přenosu dat.
Bezpečnost RSA je založena na problému faktorizace — rozkladu součinu dvou velkých prvočísel na činitele. Pokud zvolíme prvočísla p a q o délce 1024 bitů každé, pak jejich součin n bude obsahovat 2048 bitů. Vypočítat p a q při znalosti pouze n moderními metodami je prakticky nemožné: podle odborného hodnocení CNRS (2024) by prolomení RSA-2048 vyžadovalo více než 300 miliard let výpočtů na klasickém počítači.
Podívejme se na úplný cyklus práce RSA od generování klíčů po šifrování a dešifrování zprávy. Porozumění těmto fázím je nezbytné pro správnou implementaci algoritmu v mobilních aplikacích.
Proces začíná výběrem dvou velkých prvočísel p a q. Vypočítá se modul n = p x q, který určuje délku klíče. Poté se vypočítá Eulerova funkce phi(n) = (p-1)(q-1). Zvolí se veřejný exponent e, který je relativně prvočíselný s phi(n). Soukromý exponent d se vypočítá jako multiplikativní inverze e modulo phi(n). Podle NIST SP 800-56B Rev. 2 musí být minimální délka n 2048 bitů pro zajištění adekvátní ochrany.
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();
}
}
Pro zašifrování zprávy m ji odesílatel převede na celé číslo menší než n a vypočítá šifrový text c = m^e mod n. Příjemce použije soukromý klíč d k obnovení původní zprávy: m = c^d mod n. Je důležité poznamenat, že RSA není určen k šifrování velkých objemů dat kvůli nízkému výkonu — maximální velikost zprávy se rovná délce klíče mínus servisní bajty (přibližně 190 bajtů pro RSA-2048 s 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 se také používá k vytváření digitálních podpisů — mechanismu ověření autenticity a integrity dat. Vlastník podepíše hash zprávy svým soukromým klíčem a kdokoli může ověřit podpis veřejným klíčem. Podle zprávy Sectigo Certificate Transparency (2025) používá více než 85% TLS certifikátů na internetu RSA pro digitální podpis, což činí algoritmus základem důvěry webové komunikace.
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)
}
Délka klíče přímo ovlivňuje kryptografickou odolnost RSA. S růstem výpočetního výkonu je minimální povolená velikost klíče pravidelně přezkoumávána mezinárodními normalizačními organizacemi. Podívejme se na současná doporučení NIST a dalších regulátorů.
| Délka klíče | Symetrický ekvivalent | Status |
|---|---|---|
| 1024 bitů | 80 bitů | Zakázáno od 2023 |
| 2048 bitů | 112 bitů | Minimální standard |
| 3072 bitů | 128 bitů | Doporučeno pro nové systémy |
| 4096 bitů | 256 bitů | Pro důvěrná data |
Zvýšení délky klíče RSA významně ovlivňuje dobu provádění operací. Generování klíče o délce 4096 bitů trvá přibližně 10krát déle než 2048 bitů. Operace šifrování a dešifrování s dlouhým klíčem vyžadují více výpočetních prostředků, což je kritické pro mobilní zařízení s omezenou spotřebou energie.
S rozvojem kvantových počítačů může být RSA prolomen pomocí Shorova algoritmu v polynomiálním čase. Tento algoritmus, navržený Peterem Shorem v roce 1994, umožňuje faktorizaci velkých čísel v čase O((log n)^3) operací. Podle IBM Quantum Roadmap (2025) se praktické prolomení RSA-2048 očekává nejdříve v roce 2035, nicméně NIST již doporučuje postupný přechod na postkvantové algoritmy CRYSTALS-Kyber a CRYSTALS-Dilithium.
RSA se aktivně používá v mobilních aplikacích k zajištění bezpečného přenosu dat, ověření autenticity serverů a ochraně digitálních transakcí. Integrace probíhá prostřednictvím standardních kryptografických API obou hlavních platforem.
Platforma Android poskytuje Android Keystore — systémové úložiště kryptografických klíčů chráněné na hardwarové úrovni Trusted Execution Environment. Klíče RSA vygenerované v KeyStore nelze extrahovat ze zařízení ani v případě kompromitace aplikace. To poskytuje ochranu proti široké třídě útoků, včetně malwaru s root přístupem.
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()
}
V iOS se pro práci s RSA používá Security Framework s přístupem k Secure Enclave na zařízeních s čipem A7 a novějším. Secure Enclave je dedikovaný koprocesor izolovaný od hlavního procesoru, který provádí kryptografické operace a ukládá klíče v hardwarové enklávě. Klíče RSA mohou být generovány jak uvnitř Secure Enclave, tak v softwarovém Keychain s různými úrovněmi přístupu.
V reálných mobilních aplikacích se RSA zřídka používá k přímému šifrování velkých dat. Standardní praxí je hybridní schéma: aplikace vygeneruje session klíč AES, zašifruje jej veřejným RSA klíčem serveru a odešle na server. Veškerý následný provoz je šifrován AES, což je 100–1000krát rychlejší než přímý přenos dat přes RSA.
Jako každý kryptografický algoritmus má RSA silné a slabé stránky, které je třeba zohlednit při navrhování zabezpečených systémů. Objektivní hodnocení pomáhá vybrat správný nástroj pro konkrétní úkol.
Hlavní výhodou RSA je řešení zásadního problému distribuce klíčů — veřejný klíč lze volně zveřejnit bez rizika kompromitace celého systému. Univerzálnost algoritmu se projevuje v podpoře jak šifrování, tak digitálního podpisu stejným párem klíčů. Kromě toho má RSA rozsáhlý ekosystém podpory: knihovny jsou k dispozici pro všechny jazyky a platformy.
Hlavní nevýhodou RSA je nízký výkon ve srovnání se symetrickými algoritmy. Dešifrování RSA-2048 na moderním mobilním procesoru trvá přibližně 5–15 milisekund, zatímco AES-256 zpracovává gigabajty dat za stejnou dobu. RSA je také zranitelný vůči kvantovým útokům prostřednictvím Shorova algoritmu, což omezuje jeho použití v systémech s dlouhodobou ochranou dat.
Pro mobilní projekty odborníci NIST doporučují: používejte RSA pouze pro šifrování klíčů a digitální podpisy, volte délku klíče alespoň 3072 bitů pro nové projekty, kombinujte RSA s AES v hybridním schématu a sledujte vývoj postkvantových standardů pro plánovanou migraci v dlouhodobém horizontu.
Často kladené otázky
RSA — asymetrický algoritmus s párem klíčů, používaný pro šifrování malých objemů dat a digitální podpisy. AES — symetrický algoritmus s jedním sdíleným klíčem, pracující 100–1000krát rychleji než RSA. V moderních systémech se kombinují: RSA chrání přenos session klíče AES, zatímco AES šifruje hlavní provoz.
Minimální bezpečnou velikostí od roku 2023 podle NIST SP 800-131A Rev. 2 je RSA-2048. Klíče 1024 bitů jsou oficiálně zakázány pro vládní systémy USA. Pro nové projekty se doporučuje 3072 bitů, což poskytuje bezpečnostní rezervu a ekvivalentní odolnost 128bitovému symetrickému šifrování.
Ano, RSA je široce používán v mobilních aplikacích. Android poskytuje Android KeyStore pro hardwarové generování a bezpečné ukládání RSA klíčů. iOS — Security Framework s podporou Secure Enclave. Pro šifrování velkých dat se doporučuje hybridní schéma RSA + AES, kde RSA šifruje pouze session klíč.
Na klasických počítačích je prolomení RSA-2048 prakticky nemožné — podle současných odhadů by vyžadovalo více než 300 miliard let nepřetržitého výpočtu. Kvantový počítač s dostatečným počtem qubitů však bude schopen prolomit RSA-2048 během několika minut pomocí Shorova algoritmu. Podle odhadů IBM se takový počítač neobjeví dříve než v roce 2035.
Mezi asymetrickými algoritmy je populární ECC (Elliptic Curve Cryptography), poskytující ekvivalentní bezpečnost s menší délkou klíče — 256bitový ECC je ekvivalentní RSA-3072. Pro postkvantovou éru zvolil NIST v roce 2024 CRYSTALS-Kyber pro šifrování a CRYSTALS-Dilithium pro digitální podpisy.
Shrnutí
Vyvineme mobilní aplikaci na klíč
IT Sectr vytváří aplikace pro iOS a Android pro startupy a podniky od roku 2017. Poradíme vám a navrhneme nejlepší řešení.
Přečtěte si také