Anteprima della struttura

Crittografia: quattro metodi, da Cesare ad Alice e Bob

Sostituzione, trasposizione, XOR e RSA: esempi di codifica e decodifica, con un laboratorio da provare.

Sezione: Teoria dei numeri Aggiornato:
Articoli /crittografia-quattro-metodi-alice-bob
Crittografia: quattro metodi, da Cesare ad Alice e Bob

8 min

La crittografia trasforma un messaggio leggibile in un testo che richiede una chiave per essere interpretato. I primi tre metodi qui sotto si possono esplorare con carta e penna o in un foglio di calcolo; il quarto introduce due chiavi diverse. Prova ogni passaggio nel laboratorio interattivo. La copertina rappresenta il passaggio dalle trasformazioni delle lettere alle chiavi pubblica e privata; è un’illustrazione concettuale, non uno schema tecnico.

1. Sostituzione: spostare le lettere

Scegliamo la chiave k=2 e usiamo le lettere A–Z. Ogni lettera viene sostituita da quella due posizioni più avanti, tornando ad A dopo Z: S→U, A→C, L→N. Così SALVATORE diventa UCNXCVQTG. Per decifrare spostiamo ogni lettera di due posizioni indietro: U→S, C→A, fino a ritrovare SALVATORE. È il principio del cifrario di Cesare, ma una frequenza delle lettere rimane riconoscibile: non protegge dati reali.

2. Trasposizione: cambiare l’ordine, non le lettere

Con chiave MOSAI e testo SALVATORE scriviamo le lettere da sinistra a destra sotto le cinque colonne:

M O S A I
S A L V A
T O R E

Le colonne originali sono ST | AO | LR | VE | A. Leggendole nell’ordine alfabetico delle lettere della chiave, A,I,M,O,S, otteniamo VE | A | ST | AO | LR, cioè VEASTAOLR. Bob conosce la stessa chiave: ricava la lunghezza di ogni colonna, le riempie nell’ordine alfabetico e legge di nuovo per righe, ottenendo SALVATORE. Qui si eliminano spazi, accenti e punteggiatura prima di cifrare; non si potranno ricostruire automaticamente.

3. XOR: una stessa chiave numerica per cifrare e decifrare

Prendiamo il byte ASCII della prima lettera, S=83, e una chiave di un byte 113. La combinazione bit a bit produce 83 XOR 113 = 34, che in esadecimale è 22. Applicando di nuovo la stessa chiave, 34 XOR 113 = 83: ricompare S. Per SALVATORE l’intera sequenza esadecimale è 22303D2730253E2334. Il laboratorio applica XOR ai byte UTF-8, quindi gestisce anche messaggi non ASCII. Attenzione: ripetere un singolo byte di chiave è insicuro; questa è solo una dimostrazione della proprietà (m XOR k) XOR k = m.

4. Chiave asimmetrica: Alice scrive a Bob

Nel nostro esempio RSA Bob sceglie due primi p=61 e q=53. Calcola n=pq=3233 e φ(n)=(p−1)(q−1)=3120. Sceglie e=17, coprimo con 3120, e trova d=2753, perché 17×2753=46801=15×3120+1. Pubblica (n,e)=(3233,17) e tiene segreto d=2753.

Alice vuole inviare CIAO. I byte UTF-8 sono 67,73,65,79. Per ciascun byte m usa la chiave pubblica e calcola c=m^17 mod 3233. Ottiene:

C: 67^17 mod 3233 = 641
I: 73^17 mod 3233 = 1486
A: 65^17 mod 3233 = 2790
O: 79^17 mod 3233 = 1307

Invia 641 1486 2790 1307. Bob applica la chiave privata a ciascun blocco: m=c^2753 mod 3233. Ritrova nell’ordine 67,73,65,79; la decodifica UTF-8 restituisce CIAO. Il motivo matematico è che e×d≡1 (mod φ(n)). Alice non ha mai avuto bisogno della chiave privata di Bob.

Dentro il calcolo di una lettera

Per non costruire l’enorme potenza 65^17, Alice eleva al quadrato riducendo ogni volta modulo 3233: 65²≡992, 65⁴≡1232, 65⁸≡1547 e 65¹⁶≡789. Poiché 17=16+1, 65¹⁷≡789×65≡2790 (mod 3233). Bob usa lo stesso metodo con l’esponente 2753=2048+512+128+64+1 e riottiene 65. Questo è il passaggio concreto di codifica e decodifica per la lettera A.

Che cosa dimostra, e che cosa no

L’esempio mostra la differenza fra chiave condivisa e coppia pubblica/privata, non una protezione utilizzabile. Questi primi sono fattorizzabili a mano, ogni byte è cifrato separatamente e manca il padding. Per applicazioni reali lo standard RFC 8017 descrive RSAES-OAEP: non bisogna copiare questo RSA elementare in un sistema di sicurezza. Inoltre conoscere una chiave pubblica non dimostra automaticamente che appartenga davvero a Bob: serve verificarne l’identità. Apri il laboratorio e prova messaggi diversi →