E’ considerato il cifrario perfetto [wikipedia], chiamato cifrario di Vernam [wikipedia] o one time pad. E’ in grado di trasformare qualsiasi testo in chiaro, in un testo cifrato, impossibile da decifrare se non si ha la chiave.
Breve terminologia
Testo in chiaro / decifrato = testo originale, che si può capirne il senso;
Chiave = testo che serve a cifrare / decifrare il testo in chiaro / testo cifrato;
Testo cifrato = testo che non è possibile capirne il significato, se non decifrato prima con la chiave.
Alfabeto cifrante
Per poter usare il one time pad c’è bisogno di un alfabeto cifrante, che riporterò qui, un esempio classico, per poter spiegare meglio gli esempi.
LETTERE NUM SUP. CIFRATURA SUP. DECIFRATURA
A 1 27 -25
B 2 28 -24
C 3 29 -23
D 4 30 -22
E 5 31 -21
F 6 32 -20
G 7 33 -19
H 8 34 -18
I 9 35 -17
J 10 36 -16
K 11 37 -15
L 12 38 -14
M 13 39 -13
N 14 40 -12
O 15 41 -11
P 16 42 -10
Q 17 43 -9
R 18 44 -8
S 19 45 -7
T 20 46 -6
U 21 47 -5
V 22 48 -4
W 23 49 -3
X 24 50 -2
Y 25 51 -1
Z 26 52 0
La terza colonna serve come supplemento alla cifratura, mentre la quarta colonna come supplemento alla decifratura.
Come funziona?
Esistono 2 procedure: quella per cifrare e quella per decifrare, entrambe molto semplici da apprendere. Come abbiamo visto, esiste un alfabeto cifrante, quindi ogni lettera corrisponde ad un numero. Sia durante la cifratura che durante la decifratura si procede una lettera per volta.
Nella cifratura le due lettere (testo in chiaro e chiave) vengono sommate una alla volta. Se la somma dovesse essere maggiore di 26 (Z), si riparte da capo (A) contando da uno (vedi supplemento alla cifratura).
Nella decifratura le due lettere (testo cifrato e chiave) vengono sottratte una alla volta. Se la sottrazione dovesse essere minore di 1 (A), si riparte dalla fine (Z) contando da zero (vedi supplemento alla decifratura).
Bisogna fare particolare attenzione: se si sta cifrando, il testo in chiaro, se si sta decifrando, il testo cifrato, va sempre usata la prima colonna dell’alfabeto cifrante, ovvero quello che assegna i valori alle lettere (non i supplementi!)
Facciamo un esempio.
Supponiamo di voler cifrare la parola “CIAO” con la chiave “XUHC”.
Testo in chiaro: CIAO +
Chive: XUHC =
Testo cifrato: ADIR
Calcolo matematico: C (3) + X (24) = 27 (A) || I (9) + U (21) = D (30) || A (1) + H (8) = I (9) || O (15) + C (3) = R (18)
Ora immaginiamo che il nostro destinatario del messaggio riceve il testo cifrato “ADIR” e sa che la chiave è “XUHC”, per decifrarlo userà il calcolo inverso.
Testo cifrato: ADIR -
Chiave: XUHC =
Testo in chiaro: CIAO
Calcolo matematico: A (1) – X (24) = C (-23) || D (4) – U (21) = I (-17) || I (9) – H (8) = A (1) || R (18) – C (3) = O (15)
Requisiti della chiave
Questo sistema di cifratura si ritiene inattaccabile, solo alle seguenti condizioni:
1. La chiave è lunga quanto il testo da cifrare.
2. Ogni lettera della chiave è generata casualmente.
3. La chiave deve essere usata solo una volta.
4. La chiave deve essere nota solo a chi manda e chi riceve il testo.
Usando queste precauzioni, il testo cifrato sarà resistente agli attacchi a forza bruta (bruteforce) [wikipedia], ai metodi statistici.