Cifrario di Vernam

Da Wikipedia, l'enciclopedia libera.
(Reindirizzamento da One-time pad)
Vai alla navigazione Vai alla ricerca
Esempio di cifrario di Vernam

Il cifrario di Vernam è un sistema crittografico basato sul cifrario di Vigenère, al quale aggiunge il requisito che la chiave di cifratura sia lunga quanto il testo e non riutilizzabile (per questo viene spesso chiamato OTP, acronimo per l'inglese One Time Pad (OTP), letteralmente "taccuino monouso").

Descrizione[modifica | modifica wikitesto]

Il cifrario di Vernam è l'unico sistema crittografico la cui sicurezza sia comprovata da una dimostrazione matematica e per questo si è guadagnato il titolo di "cifrario perfetto". La prima dimostrazione della sua inviolabilità fu pubblicata nel 1949 da Claude Shannon nell'articolo La teoria della comunicazione nei sistemi crittografici.

Si può facilmente capire quanto sia scomodo distribuire in modo sicuro chiavi di tali dimensioni. Ciò nonostante il cifrario di Vernam è stato utilizzato per le comunicazioni con le spie, che venivano equipaggiate di taccuini (pad in inglese) contenenti una lunga chiave per ogni pagina, da poter strappare e gettare una volta utilizzata (one time, ovvero "una volta").

La sua forma più classica è quella in cui la chiave ha la stessa forma del testo (a ogni lettera viene associato il numero corrispondente A=0 B=1 C=2) e che sfrutta l’aritmetica modulare per operare sulle lettere (quella per cui dopo la lettera Z c'è di nuovo la lettera A, quindi A+C=0+2=2=C, B+C=1+2=3=D, Z+C=25+2=27→1=B, Z+Z=25+25=50→24=Y).

Testo in chiaro: C I A O
Chiave:          A J R F
------------------------
Testo cifrato:   C S R U

È tuttavia molto diffusa, specialmente nell'ambiente informatico, la forma che fa utilizzo dell'operazione logica XOR (disgiunzione esclusiva), che del resto non è altro che l'addizione circolare dei singoli bit.

È importante ribadire che questo tipo di chiave deve essere lunga quanto il messaggio che cifra e può essere utilizzata una sola volta, pena la perdita della validità delle ipotesi iniziali e la riduzione da sistema "inattaccabile" a sistema "facilmente attaccabile" dal metodo Kasiski, una specializzazione del metodo crittanalitico di analisi delle frequenze.

L'apice della tecnica OTP[modifica | modifica wikitesto]

Probabilmente l'apice del modello di cifratura a chiave infinita è stato raggiunto durante la guerra fredda. Il sistema si basava su un cifrario di parole rappresentato da numeri a 4 cifre, accorpate poi in gruppi di cinque cifre e sommate ad un numero casuale. Se l'ultimo gruppo di accorpamento a cinque cifre non è completo (cioè ha meno di 5 cifre), la sequenza doveva essere completata a destra con degli zeri (es. 123 ⇒12300).

Esempio 1. Cifrario 1024 = cane, 1056 = gatto, 2345 = lavoro, (spazio bianco) = 3000, (punto) = 4000, ecc.

Il cifrario era a disposizione sia del ricevente che del mittente, così come la sequenza dei numeri casuali utilizzati (che venivano tabulati su pagine numerate e il primo gruppo di cifre del codice cifrato trasmesso rappresentava proprio i numeri di pagine e dunque la sequenza dei numeri casuali).

In tutto il processo è fondamentale, come detto, utilizzare una ed una sola volta una data sequenza di numeri casuali per cifrare i messaggi.

Esempio del meccanismo di accorpamento da 4 a 5 cifre:

  1. partiamo dalla frase "canegattolavoro"
  2. trasformiamo la frase attraverso il cifrario: 10241056234530004000
  3. accorpiamo le cifre in gruppi di 5: 10241 05623 45300 04000

La sequenza dei numeri casuali utilizzata andrà sommata ai gruppi di 5 cifre precedentemente preparati partendo dal cifrario.

Esempio: Ipotizziamo di avere la sequenza di numeri casuali: 45693, 89765, 77746, 93486.

Riprendendo la sequenza dell'esempio precedente facciamo la somma dei numeri senza riporto:

Derivato da cifrario            10241 05623 45300 04000
Numeri casuali                  45693 89765 77746 93486
Risultato (somma senza riporto) 55834 84388 12046 97486

A questo punto il codice è cifrato, ma i sovietici fecero un passo ulteriore con il solo scopo di facilitarne la trasmissione via telefax, ovvero associarono una lettera ai numeri da 0 a 9. Dunque la forma finale del messaggio era una sequenza di gruppi di 5 lettere.

È facile dimostrare che questo è un cifrario perfetto, quindi è matematicamente indecifrabile. In moltissimi anni di ricerca (all'incirca 20 – progetto Venona) gli americani riuscirono a decifrare solo una minima parte dei messaggi registrati (sino all'apertura degli archivi del Cremlino) e solo perché i mittenti utilizzarono per più di una volta le sequenze di numeri casuali, o perché sequenze delle stesse furono sequestrate a spie arrestate.

I sovietici erano talmente sicuri di questo sistema che trasmisero i messaggi "in chiaro", ovvero senza sovracifrature. È proprio attraverso queste trasmissioni che i segreti della bomba atomica filtrarono dall'Ovest all'Est. La decifrazione del messaggio è semplicissima e si fonda sul processo inverso a quello sin qui presentato, ovvero si devono sottrarre i numeri cifrati alla sequenza casuale di numeri utilizzati nella cifratura e, nel caso la sottrazione dia un valore negativo, bisogna sommare il valore 10. Infine, bisogna riaggregare le cifre in gruppi di 4 per poi utilizzare il cifrario per identificare la parola.

Esempio: Utilizziamo la cifratura della frase inizialmente proposta e la relativa sequenza di numeri casuali. Trattiamo singolarmente, come esempio, un paio di cifre:

Numero di cifratura                           5   5   8   3   4
Numero casuale                                4   5   6   9   3
Primo Risultato Sottrazione                   1   0   2  -6   1
Eventuale somma di 10 per valori negativi               +10
Risultato finale                              1   0   2   4   1
Numero di cifratura                           1   2   0   4   6
Numero casuale                                7   7   7   4   6
Primo Risultato Sottrazione 	             -6  -5  -7   0   0
Eventuale somma di 10 per valori negativi   +10 +10 +10
Risultato finale                              4   5   3   0   0

Infine otteniamo di nuovo "10241056234530004000" che, suddiviso in gruppi di 4 cifre, diventa 1024 1056 2345 3000 4000. Dal cifrario si riottiene la frase completa. Per il meccanismo di riempimento di zeri a destra, di cui abbiamo parlato in precedenza (123 ⇒ 12300), nel ri-accorpamento a 4 cifre potrebbe capitare di avere una serie di zeri come ultima cifra. Si intende che questa va semplicemente ignorata.

Altri progetti[modifica | modifica wikitesto]

Collegamenti esterni[modifica | modifica wikitesto]

  Portale Crittografia: accedi alle voci di Wikipedia che trattano di crittografia