Introduzione alla crittografia - storia e classificazione
Dal kryptós greco ai principi di Shannon: come funziona un crittosistema, perché Cesare si rompe in un secondo e perché il One-Time Pad è l'unico cifrario perfetto. Fondazione per DES, AES, RSA e tutta la sicurezza computazionale.
1. Cos'è la crittografia: modello del crittosistema
Un sistema crittografico è un sistema in cui un mittente trasforma un testo in chiaro T in un crittogramma X mediante una funzione di cifratura C e una chiave K, per inviarlo su un canale potenzialmente intercettabile. Il destinatario applica D(K,X) per ricostruire T. La chiave è il segreto, non l'algoritmo.
Sin dall'antichità l'essere umano si è confrontato con il problema di comunicare in modo sicuro su canali non affidabili. Il termine crittografia deriva dal greco kryptós (nascosto) e graphía (scrittura) — letteralmente scrittura nascosta. Indica l'insieme delle tecniche per proteggere le informazioni durante trasmissione o conservazione.
Pensa al registro elettronico: quando la tua password viaggia verso il server, non deve essere leggibile se qualcuno intercetta il WiFi della scuola. Il client applica C(K,T) con TLS, il server decifra con la chiave negoziata. Se togli la cifratura (http), Wireshark in laboratorio mostra tutto in chiaro.
Modello generale di un crittosistema
T - Plaintext
Messaggio originale comprensibile. Può essere testo, immagine, file binario.
K - Chiave
Sequenza di bit che parametrizzza C e D. 2^n combinazioni se lunga n bit.
X - Crittogramma
Risultato di C(K,T). Senza K deve essere indistinguibile da rumore casuale.
All'interrogazione ripeti la formula: X = C(K, T) e T = D(K, X). Poi aggiungi subito Kerckhoffs: "L'algoritmo può essere pubblico, la sicurezza dipende solo dalla chiave". È la frase che ti fa prendere il punto pieno.
2. La chiave crittografica e il costo della forza bruta
La chiave è l'informazione segreta che rende unica la trasformazione crittografica. Nei sistemi informatici moderni è tipicamente una sequenza di bit. La sua lunghezza influisce direttamente sulla sicurezza: una chiave da n bit genera 2n combinazioni possibili da esplorare in attacco a forza bruta.
| Lunghezza chiave | Combinazioni | Tempo medio (10^9 try/s) | Stato 2025 |
|---|---|---|---|
| 5 bit (Cesare) - 26 alfabeti | 26 | Istantaneo (<1ms) | ❌ Insicuro |
| 56 bit (DES) | 7,2 × 10¹⁶ | ~ 1 anno (hardware moderno) | ⚠️ Obsoleto |
| 128 bit (AES-128) | 3,4 × 10³⁸ | Miliardi di anni | ✅ Sicuro |
| 256 bit (AES-256) | 1,2 × 10⁷⁷ | Più dell'età dell'universo | ✅ Post-quantum safe |
Lab rapido: scrivi in Python un brute force su Cesare. 26 chiavi → 3 righe di for. Poi prova su DES 56 bit: lo stesso programma impiegherebbe 2284 anni su un singolo PC. Questo gap ti fa capire perché AES-128 è il minimo odierno per TLS 1.3.
3. Classificazione a tre assi dei sistemi crittografici
I sistemi crittografici si classificano secondo tre criteri indipendenti che è importante tenere distinti. Un cifrario può essere ad esempio: sostituzione + block + simmetrico (AES) oppure trasposizione + stream + simmetrico (Rail Fence).
Sostituzione vs Trasposizione
Sostituzione: ogni simbolo viene rimpiazzato da un altro (A→D). Struttura preservata, simboli cambiano.
Trasposizione: simboli invariati ma riorganizzati (permutazione).
Block vs Stream
Block cipher: diviso in blocchi fissi (es. 128 bit), ogni blocco cifrato con stessa chiave.
Stream cipher: flusso continuo bit per bit XOR con keystream.
Simmetrica vs Asimmetrica
Simmetrica: stessa chiave segreta per cifrare/decifrare. Veloce ma distribuzione difficile.
Asimmetrica: coppia pubblica/privata. Risolve distribuzione, più lenta.
4. Tipi di attacco crittoanalitico
Un crittoanalista è un attaccante che cerca di recuperare il testo in chiaro o la chiave intercettando le comunicazioni. A seconda delle informazioni disponibili, distinguiamo cinque livelli:
| Tipo di attacco | Cosa conosce il crittoanalista | Difficoltà / Esempio storico |
|---|---|---|
| Ciphertext only | Solo il crittogramma X | Massima — caso reale di intercettazione passiva |
| Known plaintext | Coppie (T,X) con stessa chiave | Alta — usato per violare Enigma (frasi standard tedesche) |
| Chosen plaintext | Può scegliere T e osservare X | Media — individua debolezze AES in modalità ECB |
| Chosen ciphertext | Può scegliere X e ottenere T | Bassa se ha accesso al dispositivo (HSM) |
| Open key model | Info parziali sulla struttura K | Bassa — riduce spazio ricerca (password umane) |
Enigma fu decifrata a Bletchley Park da Alan Turing con known plaintext: i messaggi tedeschi iniziavano sempre con KEINE BESONDEREN EREIGNISSE (nessun evento speciale) ogni mattina. Quella frase forniva coppie T/X che riducevano enormemente le configurazioni giornaliere dei rotori. In lab usa CrypTool 2 per replicare l'attacco su Vigenère.
5. Cifrari classici a sostituzione: Cesare
Il cifrario di Cesare è una sostituzione monoalfabetica con scorrimento fisso K (0-25). C(K,T)= (T+K) mod 26. Chiave usata da Giulio Cesare: K=3. È il primo esempio storico di crittografia simmetrica.
Ogni lettera del testo in chiaro viene sostituita con quella che si trova K posizioni più avanti nell'alfabeto con riavvolgimento circolare. La decifratura è lo scorrimento inverso.
Non dire "Cesare è sicuro se cambio la K spesso". Con 26 chiavi totali, la sicurezza è zero anche con rotazione oraria. La vulnerabilità strutturale è anche analisi delle frequenze: in italiano 'E' compare ~11.8%, in inglese 'E' ~12.7%. Cerca la lettera più frequente nel crittogramma → è la E cifrata → ricavi K istantaneamente.
Brute Force 26 chiavi
Provi tutte le 26. Con script Python < 0.001s. Dimostrazione perfetta di spazio chiavi insufficiente.
Analisi frequenze
Cuenta occorrenze lettere. Mappa la più frequente → E italiana. Bypassa anche se K ignota e messaggio lungo.
6. Cifrari classici a trasposizione: Rail Fence (staccionata)
Esempio classico di crittografia per trasposizione: i simboli non vengono modificati ma riordinati. Il testo viene scritto in diagonale su un numero fisso di righe (la chiave) e poi ricomposto leggendo riga per riga.
Scrivi VEDIAMOCIALLEOTTO sulla lavagna con 4 righe a zig-zag. Fai leggere agli studenti riga per riga → ottieni VOEEMCLODAILTOIAT. Poi chiedi: quante combinazioni di chiavi? Solo 2-8 righe → forza bruta banale. Se intercetti e conosci che è Rail Fence, provi 7 possibilità e hai finito.
7. Cifrari polialfabetici: Vigenère e One-Time Pad
Per contrastare l'analisi delle frequenze, nel XV secolo Leon Battista Alberti introdusse i cifrari polialfabetici, che usano più alfabeti di sostituzione diversi. Il più celebre è il cifrario di Vigenère: la chiave è una parola che determina, lettera per lettera, lo scorrimento da applicare.
Per Vigenère ricorda la frase: "Chiave lunga = sicurezza lunga". Se ti chiedono perché è meglio di Cesare, rispondi: "Perché la stessa lettera in chiaro produce lettere diverse cifrate, quindi rompe l'analisi delle frequenze". Poi citi subito il limite: se la chiave è corta e ripetuta, Kasiski la rompe cercando trigrammi ripetuti.
One-Time Pad — l'unico cifrario perfetto
Il One-Time Pad (OTP) è un caso speciale di cifrario a flusso in cui il keystream ha la stessa lunghezza del messaggio, è completamente casuale e non viene mai riutilizzato. Claude Shannon dimostrò nel 1949 che è l'unico sistema incondizionatamente sicuro.
Sicurezza incondizionata
Proven secure matematicamente. Usato hotline USA-URSS Guerra Fredda. Nessun attacco possibile nemmeno con computer infinito.
Distribuzione impossibile
Chiave lunga quanto messaggio, mai riutilizzabile, veramente casuale. Problema del key exchange irrisolto su larga scala — ecco perché usiamo AES+RSA.
8. I principi di Shannon: diffusione, confusione e tipi di sicurezza
Nel 1949 Claude Shannon pubblicò "Communication Theory of Secrecy Systems", fondando la crittografia moderna. Individuò due proprietà essenziali:
Ogni bit di T influenza molti bit di X
Una singola modifica nel plaintext deve propagarsi su tutto il crittogramma. Nasconde relazione statistica T-X. Realizzata con permutazioni (P-box).
Relazione K-X complessa e non lineare
Ogni bit della chiave influenza molti bit di X in modo non lineare. Impossibile dedurre K da coppie T/X. Realizzata con sostituzioni S-box.
Questi due principi sono alla base di tutti gli algoritmi moderni: AES combina S-box (confusione) e ShiftRows/MixColumns (diffusione) in 10-14 round.
| Criterio | Sicurezza INCONDIZIONATA | Sicurezza COMPUTAZIONALE |
|---|---|---|
| Definizione | Non violabile nemmeno con risorse infinite | Costo violazione > valore informazione |
| Esempio | Solo One-Time Pad | AES, RSA, ECC, ChaCha20 |
| Realismo | Teorico, non scalabile | Modello reale di Internet (TLS 1.3) |
| Attacco | Impossibile matematicamente | Richiede 2^128 operazioni → infattibile |
Non confondere cifrario simmetrico (stessa chiave) con simmetrico nel senso di semplice. AES è simmetrico ma molto più complesso di RSA. La distinzione simmetrica/asimmetrica riguarda SOLO il numero di chiavi, non la difficoltà.
9. Verifica / Esercizio guidato
🔬 Attività — decifra come un crittoanalista
Hai intercettato tre messaggi sul WiFi del lab. Applica quanto studiato e documenta il ragionamento.
- Cesare: C=
KHOOR ZRUOG- sai che K=3 storico. Decifra e spiega perché lo spazio chiavi è banale. Come lo romperesti con analisi frequenze se K ignota? - Rail Fence: C=
VOEEMCLODAILTOIAT- sai che è Rail Fence 4 righe per messaggio "VEDIAMOCIALLEOTTO". Ricostruisci la griglia zig-zag e verifica il cifrato. - Vigenère: T=
ATTACCA, K=LEMON. Cifra passo-passo (A=0). Poi spiega perché la stessa A in ATTACCA produce lettere diverse in uscita e quale proprietà di Shannon introduce. - Shannon: Un sistema usa solo sostituzione monoalfabetica senza permutazione. Quale principio manca (diffusione/confusione)? Perché AES ne usa entrambi per 10 round?
1) Cesare KHOOR → HELLO WORLD: Decifratura (C-K) mod26. H(7)-3=E(4), K(10)-3=H(7)... Spazio 26 chiavi → brute force <1ms. Analisi frequenze: in inglese 'O' è 2° più frequente; in "KHOOR ZRUOG", O è più frequente (3 volte) → O cifrata → risali a K=3 perché E(4)+3=H(7) ma O(14) è R(17)? Conta reale: cerca lettera più frequente → R? Calcoli shift fino a formare parola sensata.
2) Rail Fence: Griglia 4 righe zig-zag: R1 indice 0,6,12; R2 1,5,7,11,13; R3 2,4,8,10,14,15; R4 3,9. Ricomposizione righe: VOE + EMCLO + DAILTO + IAT = VOEEMCLODAILTOIAT verifica OK. Spazio chiavi = numero righe 2..len/2 → 7 prove per len 16 → insicuro.
3) Vigenère: ATTACCA (0,19,19,0,2,2,0) + LEMONLE (11,4,12,14,13,11,4) = 11,23,5,14,15,13,4 → L X F O P N E? Ricalcolo: A+L=L, T+E=X, T+M=F, A+O=O, C+N=P, C+O=Q, A+L=M? Output LXFOPQM. Polialfabetico → confusione, rompe frequenze. Ogni A (0) + chiavi diverse → L,O,Q... → confusione di Shannon.
4) Shannon: Manca diffusione (nessuna permutazione dei bit). Solo sostituzione = confusione. AES usa 10 round di SubBytes (confusione via S-box) + ShiftRows/MixColumns (diffusione) perché un principio solo lascia correlazioni statistiche sfruttabili (vedi attacco lineare/differenziale).
10. Riepilogo e concetti chiave
📚 Prossimo passo — Crittografia simmetrica DES 3DES AES
Ora che sai cos'è un crittosistema e perché Cesare e Vigenère non bastano, vedremo come AES applica diffusione e confusione in 10-14 round per ottenere sicurezza computazionale reale. Porta con te la tabella forza bruta e le formule C=(P+K) mod26.