LEZIONE 03 · CIFRARI CLASSICI
Cesare: un laboratorio di crittoanalisi
Un algoritmo può essere corretto, reversibile e completamente inadatto a proteggere informazioni. Il cifrario di Cesare è il modo più semplice per vedere tutte e tre le cose.
- Chi?
- Due persone concordano uno spostamento; un osservatore prova a recuperarlo.
- Che cosa?
- Una sostituzione monoalfabetica: ogni lettera viene sempre trasformata nella stessa lettera.
- Quando?
- Qui per imparare algebra modulare e attacchi; non per proteggere dati reali.
- Dove?
- Sull’alfabeto convenzionale A–Z, che in questo laboratorio ha 26 lettere.
- Perché?
- Lo spazio delle chiavi è piccolo e le regolarità della lingua restano riconoscibili.
La matematica senza salti
- Alfabeto e indice
- L’alfabeto è l’insieme ordinato dei simboli ammessi. Assegniamo ad A il numero 0, a B il numero 1, fino a Z = 25. Questo numero è l’indice della lettera, non il suo codice di memorizzazione.
- Modulo
- Fare un calcolo modulo 26 significa usare il resto nell’insieme 0–25: dopo 25 si torna a 0. Per esempio 28 modulo 26 vale 2. Nel codice gestiamo anche i numeri negativi.
- Spazio delle chiavi
- L’insieme dei valori possibili della chiave. Per Cesare ci sono 26 spostamenti distinti, incluso 0 che lascia il testo invariato. Le trasformazioni non banali sono 25.
- Forza bruta e frequenza
- La forza bruta prova sistematicamente tutte le chiavi. La frequenza di un simbolo è il numero delle sue occorrenze, oppure quel numero diviso per il totale dei simboli analizzati.
Cifrare e tornare indietro
Indichiamo con p l’indice della lettera in chiaro, con k la chiave e con c l’indice cifrato. Allora c = (p + k) mod 26. La decifratura sottrae: p = (c − k) mod 26. Con k = 3: C (2) diventa F (5), I (8) diventa L (11), A diventa D, O diventa R. Quindi CIAO → FLDR. Z + 3 torna a C.
Prova, poi mostra tutte le chiavi
Il simulatore conserva maiuscole, minuscole, spazi, accenti e punteggiatura; trasforma solo A–Z e a–z. Così la decifratura può recuperare il testo originale senza eliminare caratteri.
Frequenze delle lettere del risultato
Il codice, riga per riga
function cesare(testo, chiave) {
const k = ((chiave % 26) + 26) % 26;
return testo.replace(/[A-Za-z]/g, lettera => {
const base = lettera <= 'Z' ? 65 : 97;
const indice = lettera.charCodeAt(0) - base;
return String.fromCharCode(base + (indice + k) % 26);
});
}
cesare('CIAO', 3); // FLDR
cesare('FLDR', -3); // CIAO% in JavaScript calcola il resto; la doppia correzione rende k compreso tra 0 e 25 anche per chiavi negative. replace applica la funzione a ogni lettera riconosciuta dall’espressione /[A-Za-z]/g. base vale 65 per A o 97 per a. charCodeAt legge un’unità di codifica UTF-16; per queste lettere i valori coincidono con ASCII. String.fromCharCode ricostruisce il carattere. La funzione di decifratura usa la chiave opposta.
ASCII non ha 256 caratteri
ASCII è uno standard a 7 bit, con 128 valori. Le codifiche storiche a 8 bit sono estensioni diverse tra loro. Unicode assegna codici ai caratteri; UTF-8 e UTF-16 sono modi diversi di rappresentarli. Per questo il laboratorio limita esplicitamente il cifrario alle lettere latine non accentate e conserva il resto.
Perché una permutazione più grande non basta
Una permutazione è un riordinamento senza ripetizioni. Nella sostituzione monoalfabetica generale puoi associare A a Q, B a M e così via, senza usare uno spostamento unico. Su 26 lettere hai 26! chiavi: il punto esclamativo indica il fattoriale, cioè 26 × 25 × … × 1, circa 4 × 1026. Nell’alfabeto italiano tradizionale le lettere sono 21, e avresti 21! possibilità.
Ma una chiave ampia non elimina le strutture del linguaggio. Ogni A del chiaro diventa lo stesso simbolo; le doppie, la lunghezza delle parole e le frequenze rimangono indizi. L’analisi delle frequenze confronta questi indizi con quelli della lingua ipotizzata. Nel messaggio ABBA il primo e l’ultimo simbolo coincidono, così come quelli centrali: qualunque sostituzione monoalfabetica mantiene questo schema.
Non esiste una classifica delle frequenze infallibile: dipende da lingua, argomento e lunghezza del campione. Su una frase corta la lettera più comune non è necessariamente la stessa di un grande corpus, cioè una raccolta di testi usata per misurare statistiche.
Perché 29 e 3 danno la stessa cifratura?
Perché 29 = 26 + 3: un giro completo dell’alfabeto torna al punto di partenza. Anche 55 e −23 sono equivalenti a 3 modulo 26. Aumentare il numero scritto nella casella non aumenta lo spazio effettivo delle chiavi.
Origine: video 03–04. Prosegui con sostituzione polialfabetica e one-time pad. Il codice del simulatore è locale e non invia il testo a servizi esterni.