RSA — un criptosistem cu cheie publică ce asigură criptarea și semnătura digitală bazată pe complexitatea computațională a factorizării numerelor mari. Conform NIST Special Publication 800-56B Rev. 2 (2023), RSA cu lungimea cheii de 2048 biți rămâne standardul de securitate pentru sistemele guvernamentale și comerciale. Algoritmul este utilizat pe scară largă în protocoalele TLS, semnăturile digitale și criptarea datelor în aplicațiile mobile.
Principalele puncte
RSA — un algoritm criptografic cu cheie publică dezvoltat în 1977 de Ronald Rivest, Adi Shamir și Leonard Adleman. Denumirea este formată din primele litere ale numelor de familie ale autorilor. Algoritmul a fost primul sistem criptografic asimetric practic aplicabil în care cheile de criptare și decriptare diferă.
Algoritmul RSA a fost publicat în 1977 în revista Scientific American și s-a bazat pe lucrările anterioare ale lui Whitfield Diffie și Martin Hellman în domeniul criptografiei cu cheie publică. Massachusetts Institute of Technology a obținut brevetul pentru RSA în 1983, care a fost valabil până în 2000. Conform raportului RSA Laboratories (2023), algoritmul rămâne unul dintre cele mai răspândite standarde criptografice din lume — este utilizat în miliarde de dispozitive zilnic.
Spre deosebire de cifrurile simetrice, unde aceeași cheie este folosită atât pentru criptare, cât și pentru decriptare, RSA operează cu o pereche de chei legate matematic. Cheia publică poate fi publicată pentru toată lumea fără riscul compromiterii sistemului. Cheia privată este cunoscută doar de proprietar și nu este niciodată transmisă prin rețea. Conform studiului IBM Security X-Force Threat Intelligence Index (2024), criptarea asimetrică este utilizată în 96% din protocoalele moderne de transmitere securizată a datelor.
Securitatea RSA se bazează pe problema factorizării — descompunerea produsului a două numere prime mari în factori. Dacă se aleg numerele prime p și q cu lungimea de 1024 de biți fiecare, atunci produsul lor n va avea 2048 de biți. Calcularea p și q cunoscând doar n prin metode moderne este practic imposibilă: conform evaluării experților CNRS (2024), spargerea RSA-2048 ar necesita peste 300 de miliarde de ani de calcul pe un computer clasic.
Să examinăm ciclul complet de funcționare a RSA de la generarea cheilor până la criptarea și decriptarea mesajului. Înțelegerea acestor etape este necesară pentru implementarea corectă a algoritmului în aplicațiile mobile.
Procesul începe cu alegerea a două numere prime mari p și q. Se calculează modulul n = p x q, care determină lungimea cheii. Apoi se calculează funcția Euler phi(n) = (p-1)(q-1). Se alege exponentul public e, relativ prim cu phi(n). Exponentul privat d se calculează ca inversul multiplicativ al lui e modulo phi(n). Conform NIST SP 800-56B Rev. 2, lungimea minimă a n trebuie să fie de 2048 de biți pentru a asigura o protecție adecvată.
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();
}
}
Pentru a cripta mesajul m, expeditorul îl transformă într-un număr întreg mai mic decât n și calculează textul cifrat c = m^e mod n. Destinatarul folosește cheia privată d pentru a restabili mesajul original: m = c^d mod n. Este important de menționat că RSA nu este destinat criptării volumelor mari de date din cauza performanței scăzute — dimensiunea maximă a mesajului este egală cu lungimea cheii minus octeții de serviciu (aproximativ 190 de octeți pentru RSA-2048 cu 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 este, de asemenea, utilizat pentru crearea semnăturilor digitale — un mecanism de verificare a autenticității și integrității datelor. Proprietarul semnează hash-ul mesajului cu cheia sa privată, iar oricine poate verifica semnătura cu cheia publică. Conform raportului Sectigo Certificate Transparency (2025), peste 85% din certificatele TLS de pe internet folosesc RSA pentru semnătura digitală, ceea ce face algoritmul baza încrederii comunicațiilor web.
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)
}
Lungimea cheii influențează direct rezistența criptografică a RSA. Odată cu creșterea puterii de calcul, dimensiunea minimă admisibilă a cheii este revizuită periodic de organizațiile internaționale de standardizare. Să examinăm recomandările actuale ale NIST și ale altor autorități de reglementare.
| Lungimea cheii | Echivalent simetric | Status |
|---|---|---|
| 1024 biți | 80 biți | Interzis din 2023 |
| 2048 biți | 112 biți | Standard minim |
| 3072 biți | 128 biți | Recomandat pentru sisteme noi |
| 4096 biți | 256 biți | Pentru date confidențiale |
Creșterea lungimii cheii RSA afectează semnificativ timpul de execuție a operațiunilor. Generarea unei chei cu lungimea de 4096 de biți durează de aproximativ 10 ori mai mult decât 2048 de biți. Operațiunile de criptare și decriptare cu cheie lungă necesită mai multe resurse de calcul, ceea ce este critic pentru dispozitivele mobile cu consum limitat de energie.
Odată cu dezvoltarea calculatoarelor cuantice, RSA poate fi spart folosind algoritmul lui Shor în timp polinomial. Acest algoritm, propus de Peter Shor în 1994, permite factorizarea numerelor mari în timp O((log n)^3) operații. Conform IBM Quantum Roadmap (2025), spargerea practică a RSA-2048 este așteptată nu mai devreme de 2035, însă NIST recomandă deja tranziția treptată la algoritmii post-cuantici CRYSTALS-Kyber și CRYSTALS-Dilithium.
RSA este utilizat activ în aplicațiile mobile pentru asigurarea transmiterii securizate a datelor, verificarea autenticității serverelor și protejarea tranzacțiilor digitale. Integrarea se realizează prin API-urile criptografice standard ale ambelor platforme principale.
Platforma Android oferă Android Keystore — un depozit de sistem al cheilor criptografice protejat la nivel hardware prin Trusted Execution Environment. Cheile RSA generate în KeyStore nu pot fi extrase din dispozitiv chiar și în cazul compromiterii aplicației. Aceasta asigură protecția împotriva unei clase largi de atacuri, inclusiv malware cu acces root.
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()
}
În iOS, pentru lucrul cu RSA se utilizează Security Framework cu acces la Secure Enclave pe dispozitivele cu cip A7 și mai noi. Secure Enclave este un coprocesor dedicat, izolat de procesorul principal, care execută operațiuni criptografice și stochează cheile în incinta hardware. Cheile RSA pot fi generate atât în interiorul Secure Enclave, cât și în Keychain software cu diferite niveluri de acces.
În aplicațiile mobile reale, RSA este rareori utilizat pentru criptarea directă a datelor mari. Practica standard este o schemă hibridă: aplicația generează o cheie de sesiune AES, o criptează cu cheia publică RSA a serverului și o trimite pe server. Tot traficul ulterior este criptat cu AES, care este de 100–1000 de ori mai rapid decât transmiterea directă a datelor prin RSA.
Ca orice algoritm criptografic, RSA are puncte tari și puncte slabe care trebuie luate în considerare la proiectarea sistemelor securizate. Evaluarea obiectivă ajută la alegerea instrumentului potrivit pentru o sarcină specifică.
Principalul avantaj al RSA este rezolvarea problemei fundamentale a distribuției cheilor — cheia publică poate fi publicată liber fără riscul compromiterii întregului sistem. Universalitatea algoritmului se manifestă prin suportul atât pentru criptare, cât și pentru semnătura digitală cu aceeași pereche de chei. În plus, RSA are un ecosistem extins de suport: bibliotecile sunt disponibile pentru toate limbajele și platformele.
Principalul dezavantaj al RSA este performanța scăzută în comparație cu algoritmii simetrici. Decriptarea RSA-2048 pe un procesor mobil modern durează aproximativ 5–15 milisecunde, în timp ce AES-256 procesează gigabytes de date în același timp. De asemenea, RSA este vulnerabil la atacurile cuantice prin algoritmul lui Shor, ceea ce limitează aplicarea sa în sistemele cu termen lung de protecție a datelor.
Pentru proiectele mobile, experții NIST recomandă: utilizați RSA doar pentru criptarea cheilor și semnăturile digitale, alegeți o lungime a cheii de cel puțin 3072 de biți pentru proiecte noi, combinați RSA cu AES într-o schemă hibridă și urmăriți dezvoltarea standardelor post-cuantice pentru o migrare planificată pe termen lung.
Întrebări frecvente
RSA — algoritm asimetric cu o pereche de chei, utilizat pentru criptarea volumelor mici de date și semnăturile digitale. AES — algoritm simetric cu o singură cheie comună, care funcționează de 100–1000 de ori mai rapid decât RSA. În sistemele moderne, ele sunt combinate: RSA protejează transmiterea cheii de sesiune AES, iar AES criptează traficul principal.
Dimensiunea minimă sigură din 2023 conform NIST SP 800-131A Rev. 2 este RSA-2048. Cheile de 1024 de biți sunt oficial interzise pentru sistemele guvernamentale americane. Pentru proiecte noi se recomandă 3072 de biți, ceea ce asigură o marjă de securitate și o rezistență echivalentă criptării simetrice de 128 de biți.
Da, RSA este utilizat pe scară largă în aplicațiile mobile. Android oferă Android KeyStore pentru generarea hardware și stocarea securizată a cheilor RSA. iOS — Security Framework cu suport Secure Enclave. Pentru criptarea datelor mari se recomandă schema hibridă RSA + AES, unde RSA criptează doar cheia de sesiune.
Pe calculatoarele clasice, spargerea RSA-2048 este practic imposibilă — conform estimărilor actuale, ar necesita peste 300 de miliarde de ani de calcul continuu. Cu toate acestea, un calculator cuantic cu un număr suficient de qubiți va putea sparge RSA-2048 în câteva minute folosind algoritmul lui Shor. Conform estimărilor IBM, un astfel de calculator nu va apărea mai devreme de 2035.
Printre algoritmii asimetrici populari se numără ECC (Elliptic Curve Cryptography), care asigură o securitate echivalentă cu o lungime mai mică a cheii — ECC de 256 de biți este echivalent cu RSA-3072. Pentru era post-cuantică, NIST a ales în 2024 CRYSTALS-Kyber pentru criptare și CRYSTALS-Dilithium pentru semnăturile digitale.
Rezumat
Vom dezvolta o aplicație mobilă la cheie
IT Sectr creează aplicații iOS și Android pentru startup-uri și afaceri din 2017. Vă vom consilia și vă vom propune cea mai bună soluție.
Citiți și