RSA (Rivest-Shamir-Adleman) è un algoritmo usato dai computer moderni per criptare e decriptare i messaggi. È un algoritmo crittografico asimmetrico. Asimmetrico significa che ci sono due chiavi diverse. Questa è anche chiamata crittografia a chiave pubblica, perché una delle chiavi può essere data a chiunque. L'altra chiave deve essere tenuta privata. L'algoritmo si basa sul fatto che trovare i fattori di un grande numero composto è difficile: quando i fattori sono numeri primi, il problema è chiamato fattorizzazione dei primi. È anche un generatore di coppie di chiavi (chiave pubblica e privata).
Principio di funzionamento
RSA sfrutta proprietà dell'aritmetica modulare e della difficoltà pratica della fattorizzazione di numeri molto grandi. In termini semplici: si scelgono due numeri primi grandi e, a partire da essi, si costruisce una coppia di chiavi (pubblica e privata). La chiave pubblica serve per cifrare o verificare firme, la chiave privata per decifrare o generare firme.
Generazione delle chiavi (procedura base)
- Scegliere due numeri primi grandi, p e q (devono restare segreti).
- Calcolare n = p × q. Il modulo n fa parte sia della chiave pubblica sia di quella privata.
- Calcolare φ(n) = (p − 1) × (q − 1) (funzione totiente di Eulero).
- Scegliere un esponente pubblico e tale che 1 < e < φ(n) e gcd(e, φ(n)) = 1 (spesso si usa e = 65537 per efficienza e sicurezza).
- Calcolare l'esponente privato d, cioè l'inverso moltiplicativo di e modulo φ(n): d ≡ e^(−1) (mod φ(n)).
- La chiave pubblica è (n, e). La chiave privata è (n, d) — in implementazioni pratiche si conservano anche p e q per accelerare le operazioni.
Crittografia e decifratura
Per utilizzare RSA i messaggi devono essere rappresentati come numeri m con 0 ≤ m < n. Le formule fondamentali sono:
- Crittografia: c ≡ m^e (mod n)
- Decifratura: m ≡ c^d (mod n)
Per le firme digitali si usano le stesse operazioni ma invertite:
- Firma: s ≡ m^d (mod n)
- Verifica: m ≡ s^e (mod n)
Esempio didattico con numeri piccoli (NON sicuro per uso reale): p = 3, q = 11 → n = 33, φ(n) = 20. Se si sceglie e = 3 allora d = 7 (perché 3×7 ≡ 1 mod 20). Per un messaggio m = 4: c = 4^3 mod 33 = 31; decifrando c^7 mod 33 si ottiene nuovamente 4.
Sicurezza: su cosa si basa e quali sono le minacce
- Assunzione fondamentale: la sicurezza pratica di RSA si basa sulla difficoltà di fattorizzare n in p e q quando n è molto grande (tipicamente 2048 bit o più).
- Attacchi noti: fattorizzazione diretta (algoritmi come General Number Field Sieve), attacchi dovuti a scelte errate di e, attacchi legati a padding inadeguato (es. senza padding si hanno vulnerabilità), attacchi laterali (side-channel) che sfruttano informazioni di tempo o consumo energetico, attacchi contro implementazioni che usano CRT senza protezioni).
- Quantum-risk: algoritmi quantistici come l'algoritmo di Shor spezzeranno RSA combinando p e q in tempo polinomiale su un computer quantistico sufficientemente grande. Per questo motivo si stanno sviluppando e adottando alternative post-quantistiche.
Pratiche moderne e raccomandazioni
- Non usare RSA da solo per cifrare grandi quantità di dati: è molto più comune l'uso ibrido — RSA per cifrare una chiave simmetrica (es. AES) e AES per i dati.
- Usare sempre schemi di padding sicuri (es. OAEP per la cifratura, PSS per le firme) per prevenire attacchi legati alla struttura del messaggio.
- Scegliere dimensioni delle chiavi adeguate: oggi 2048 bit è il minimo raccomandato per molte applicazioni; per sicurezza a lungo termine si preferiscono 3072 bit o 4096 bit in contesti sensibili.
- Usare generatori di numeri casuali crittograficamente sicuri per la generazione di p e q; proteggere con cura la chiave privata (hardware security module, smart card, file cifrati protetti da passphrase robuste).
- Affidarsi a librerie e standard consolidati (es. OpenSSL, RFC relativi a PKCS#1, PKCS#11) invece di implementare la crittografia da zero.
Applicazioni tipiche
- Cifratura di chiavi (scambio di chiavi): RSA viene spesso usato per cifrare una chiave simmetrica che poi viene usata per cifrare i dati veri.
- Autenticazione e firme digitali: firme RSA (con padding adeguato) verificano l'integrità e l'autenticità di documenti e messaggi.
- Certificati X.509 e TLS/SSL: RSA è storicamente molto usato nei certificati e nei protocolli TLS, anche se oggi è affiancato o talvolta sostituito da algoritmi a curva ellittica (ECDSA, ECDH) o da soluzioni post-quantistiche.
Limiti e considerazioni finali
RSA è uno degli algoritmi di crittografia a chiave pubblica più famosi e diffusi, ma richiede attenzione nell'implementazione: scelte errate su dimensioni delle chiavi, padding o gestione delle chiavi possono rendere il sistema insicuro. Per applicazioni nuove o a lungo termine è opportuno valutare la migrazione verso algoritmi resistenti ai futuri computer quantistici o l'uso di alternative più efficienti in termini di prestazioni (es. crittografia a curva ellittica).
Per approfondire dal punto di vista matematico e tecnico, consultare risorse e specifiche aggiornate e utilizzare implementazioni standardizzate e ben mantenute.