Crittografia asimmetrica - RSA e sistemi ibridi
Dal paradosso della distribuzione delle chiavi alla rivoluzione di Diffie-Hellman, fino a RSA e ai sistemi ibridi che proteggono HTTPS, TLS e SSH ogni giorno.
1. Il problema della distribuzione delle chiavi
La crittografia simmetrica è efficiente ma richiede che mittente e destinatario condividano preventivamente la stessa chiave segreta su un canale sicuro — problema noto come key distribution problem.
La crittografia simmetrica è efficiente e sicura — ma ha un difetto strutturale fondamentale: mittente e destinatario devono condividere la stessa chiave segreta prima di poter comunicare. Come si scambiano questa chiave in modo sicuro su un canale non sicuro?
In laboratorio: Alice deve parlare con 30 compagni usando AES. Servono 30 chiavi diverse, una per coppia, e ogni nuova persona richiede 30 nuovi scambi segreti. Se invece usi la cassetta postale pubblica (chiave pubblica), ognuno ha un lucchetto diverso e basta pubblicare i lucchetti — analogia della mailbox di Rivest.
Alla verifica dicono: "La crittografia simmetrica non e sicura perche la chiave viaggia in chiaro". Correggi: e sicura se la chiave resta segreta; il problema e logistico, non crittografico — si chiama distribuzione, non robustezza.
"Se l'aveste chiesto a tutti i crittografi del mondo nel 1975, vi avrebbero risposto che era impossibile cifrare un messaggio senza aver prima condiviso una chiave segreta."
2. La rivoluzione - crittografia asimmetrica
Nel 1976 Whitfield Diffie e Martin Hellman pubblicarono "New Directions in Cryptography", dimostrando teoricamente la possibilita di scambiare informazioni in modo sicuro senza mai condividere un segreto. L'anno successivo, nel 1977, Rivest, Shamir e Adleman ne fornirono la prima implementazione pratica: RSA.
Distribuita liberamente
Come pubblicare il numero di telefono sull'elenco. Chiunque puo cifrare messaggi per te e verificare la tua firma digitale. Non contiene informazioni per ricavare la privata.
Mai trasmessa
Come la chiave fisica di casa. Solo tu puoi decifrare messaggi cifrati con la tua pubblica e firmare digitalmente. Va custodita in HSM / keystore.
Un messaggio cifrato con la chiave pubblica puo essere decifrato solo con la corrispondente chiave privata — e viceversa. Nonostante le due chiavi siano matematicamente collegate, deve essere computazionalmente impossibile ricavare la privata dalla pubblica.
Requisiti di un crittosistema asimmetrico (Diffie-Hellman)
Generazione coppia
Computazionalmente facile generare una coppia pubblica/privata.
Cifratura pubblica
Cifrare con chiave pubblica deve essere facile ed efficiente.
Derivazione privata
Ricavare la privata dalla pubblica e computazionalmente impossibile — one-way function.
Decifratura privata
Con la trapdoor (chiave privata) la decifratura torna facile.
Attacco solo con pubblica
Risalire al plaintext conoscendo solo algoritmo e pubblica e impossibile.
3. I tre scenari d'uso: confidenzialita, firma, combinato
Kpub destinatario
Ada cifra con Kpub di Brian -> solo Brian con Kpriv puo leggere. Usato in HTTPS request.
Kpriv mittente
Brian cifra con la sua Kpriv -> chiunque verifica con Kpub di Brian. Garantisce autenticita e integrita, non segretezza. Base firma digitale.
Doppia cifratura
X=C(Kpriv-Ada,T) poi Y=C(Kpub-Brian,X). Ricezione inversa: decifra e verifica.
Brian pubblica Kpub su registro di classe (bacheca). Ada scrive biglietto "compito domani", lo cifra con Kpub di Brian (tool OpenSSL in lab), lo passa su banco non sicuro (Criminal = prof che intercetta). Brian decifra con Kpriv. Anche se prof fotocopia biglietto cifrato e conosce Kpub, non legge.
Confondere ordine chiavi: per confidenzialita si usa la PUBBLICA del DESTINATARIO, non la propria. Per firma si usa la PRIVATA del MITTENTE. Dire "cifro con la mia privata per segretezza" e errato — stai firmando, non proteggendo la segretezza, perche la tua pubblica e nota a tutti.
4. L'algoritmo RSA - generazione, cifratura, esempio
RSA basa la sua sicurezza sulla difficolta di fattorizzare n = p x q dove p e q sono primi grandi. Moltiplicare e O(1), fattorizzare un 2048 bit e computazionalmente infattibile con calcolatori classici.
Moltiplicare p x q = n
Anche con primi di 308 cifre (1024 bit) e immediato.
Fattorizzare n -> p x q = ?
Con n a 2048 bit, tempo superiore a eta dell'universo con GNFS classico.
Generazione delle chiavi RSA - passo per passo con p=11, q=17
| Passo | Operazione | Calcolo esempio | Nota |
|---|---|---|---|
| 1 | Scelta primi | p = 11, q = 17 | In produzione centinaia di cifre, generati con Miller-Rabin |
| 2 | Modulo n | n = p x q = 11 x 17 = 187 | n e pubblico, parte di entrambe le chiavi |
| 3 | Funzione di Eulero φ(n) | φ(n) = (p-1)(q-1) = 10 x 16 = 160 | Conta numeri coprimi con n, rimane segreto |
| 4 | Esponente pubblico e | e = 7, MCD(7,160)=1 ok | 1 < e < φ(n) e coprimo con φ(n). Spesso si usa 65537 |
| 5 | Esponente privato d | d = 23 perche 23x7=161 = 1x160+1 → (d x e) mod φ(n)=1 | d = e^-1 mod φ(n) inverso moltiplicativo, calcolato con Euclide esteso, segreto |
(n, e) = (187, 7)
Distribuita liberamente
(n, d) = (187, 23)
Mai rivelata - protetta con cura
Esempio numerico completo - Bob cifra "ciao" per Alice
| Carattere | ASCII (M) | Cifrato C = M^7 mod 187 | Decifrato M = C^23 mod 187 |
|---|---|---|---|
| c | 99 | 176 | 99 → c ✓ |
| i | 105 | 96 | 105 → i ✓ |
| a | 97 | 92 | 97 → a ✓ |
| o | 111 | 155 | 111 → o ✓ |
Prendi la prima riga: 99^7 mod 187. In Python pow(99,7,187) = 176. Decifra pow(176,23,187) = 99. Le proprieta di Eulero garantiscono M^(e*d) ≡ M mod n quando e*d ≡ 1 mod φ(n). In produzione M < n, quindi si cifra a blocchi con padding OAEP (RFC 8017), non carattere per carattere — altrimenti attack con frequenza.
5. Sicurezza, limiti e minaccia quantistica
RSA 2048/4096
Per ricavare d serve fattorizzare n. Con chiavi 2048 o 4096 bit standard attuale, GNFS richiederebbe miliardi di anni. Sicuro con tecnologia classica.
Lentezza e dimensione
RSA e ~1000x piu lento di AES. 1 MB con RSA-2048 = secondi, con AES-256 = microsecondi. Non si cifra direttamente file grandi, solo chiavi piccole.
L'algoritmo di Shor (1994) dimostra che un computer quantistico sufficientemente potente con qubit stabili puo fattorizzare in tempo polinomiale, rompendo RSA. Per questo NIST ha avviato standardizzazione post-quantistica: CRYSTALS-Kyber (KEM per scambio chiavi) e CRYSTALS-Dilithium (firme). RSA rimane sicuro oggi, ma la migrazione e gia iniziata in TLS 1.3 ibrido.
All'esame ti chiedono "Perche RSA usa e=65537?" Risposta: e primo di Fermat (2^16+1), ha solo due bit a 1 → esponenziazione veloce in hardware, ed e abbastanza grande da evitare attacchi a basso esponente quando si usa padding corretto.
6. Crittosistemi ibridi - schema TLS reale
Sistema ibrido: usa crittografia asimmetrica (RSA/ECDH) solo per scambiare in modo sicuro una chiave di sessione AES effimera, poi cifra tutto il traffico dati con AES simmetrico veloce. E il cuore di TLS, HTTPS, SSH, S/MIME.
| Caratteristica | Solo AES (simmetrico) | Solo RSA (asimmetrico) | Sistema Ibrido |
|---|---|---|---|
| Distribuzione chiave | ❌ Problema irrisolto | ✅ Nessun problema | ✅ RSA/ECDH per la chiave di sessione |
| Velocità cifratura dati | ✅ Molto veloce | ❌ Molto lenta (~1000x) | ✅ AES per i dati |
| Dimensione gestibile | ✅ GB in ms | ❌ Max ~190 byte con RSA-2048 OAEP | ✅ File grandi via AES |
| Forward secrecy | ❌ No se chiave statica | ❌ No se RSA statico | ✅ Si con ECDHE + chiave effimera |
| Usato in | Disco, archivi cifrati | Firma digitale, KEM piccolo | TLS 1.2/1.3, HTTPS, SSH, S/MIME, PGP |
Apri DevTools → Security: quando visiti il sito, il browser fa handshake TLS ibrido: (1) scambia Kpub del server via certificato X.509, (2) negozia K di sessione AES-GCM 256 con ECDHE, (3) tutto il traffico HTTP e cifrato con AES-GCM veloce. RSA/ECDH dura pochi ms all'inizio, AES cifra MB di pagina/doc in microsecondi.
7. Verifica / Esercizio
🔬 Attività pratica + domande
Apri il lab OpenSSL collegato e completa.
- Genera coppia RSA con p=13, q=19. Calcola n, φ(n), scegli e=5 (verifica MCD), trova d con Euclide esteso.
- Con n=187,e=7,d=23 cifra M=52. Quanto vale C = M^e mod n? Poi decifra per verifica.
- Spiega perche in TLS si usa ECDHE per generare K e non RSA statico: cosa succede se rubano la privata del server dopo 6 mesi?
- Scenario combinato: Ada vuole mandare contratto segreto e firmato a Brian. Descrivi ordine esatto di chiavi (chi firma con cosa, chi cifra con cosa).
1. n=13*19=247, φ=12*18=216, e=5 MCD(5,216)=1 ok. d = 5^-1 mod 216 = 173 perche 5*173=865=4*216+1. Chiavi (247,5) pub, (247,173) priv.
2. pow(52,7,187)=? Calcolato con pow = 79. Verifica pow(79,23,187)=52. Round-trip ok.
3. Con RSA statico, se rubano Kpriv server decifrano tutto il traffico passato registrato. Con ECDHE effimero ogni sessione ha K unica scartata → forward secrecy, passato rimane sicuro.
4. Firma: X=C(Kpriv-Ada, Contratto). Poi confidenzialita: Y=C(Kpub-Brian, X). Brian fa D(Kpriv-Brian,Y)=X poi D(Kpub-Ada,X)=Contratto verificato e segreto.
8. Riepilogo e concetti chiave
📚 Prossimo passo - Autenticazione, hash, firma digitale, certificati
Ora che sai scambiare chiavi in modo ibrido, vedremo come garantire integrita con hash SHA, firma digitale, certificati X.509, PKI e protocolli SAML/OAuth/SPID/FIDO2 per l'autenticazione reale.