AVVISO IMPORTANTE: Dato l'elevato numero di richieste, Eternal Curiosity non può accettare nuovi clienti, sia che si tratti di consulenze scritte che di ottimizzazione SEO diretta. Valutiamo solo casi eccezionali e ad alto budget. Per informazioni, vi invitiamo a scriverci a info@eternalcuriosity.it

Questo articolo apparteneva al vecchio blog (blog.danilopetrozzi.it), per cui le informazioni potrebbero non essere più aggiornate ed attendibili.

One Time Pad: messaggi criptati inattaccabili, a prova di NSA

Viviamo in un mondo in un cui non esiste nulla di perfetto: ci sono tanti modi di fare qualsiasi cosa, mille possibilità per raggiungere un obbiettivo, ognuna con vantaggi, svantaggi e così via. In ambito SEO non c’è la tecnica perfetta, in programmazione non c’è il linguaggio perfetto, in web design non c’è il template perfetto.

In crittografia questa affermazione non è vera.

Infatti, esiste un metodo crittografico che è assolutamente perfetto e inattaccabile, la cui sicurezza è provabile anche per via matematica. Le informazioni protette con questo metodo non possono essere violate dalla CIA, FBI o NSA. Anche avendo a disposizione la potenza di milioni di computer interconessi tra loro, questo algoritmo è ancora inattaccabile dato che non può essere colpito da attachi bruteforce e similari.

Inoltre, se queste caratteristiche non vi avevano già stupito, ce n’è un’altra: a differenza di tutti gli altri metodi crittografici esistenti, questo è talmente semplice che può essere utilizzato con carta e penna, non serve altro!

Volete un’altra prova della validità del metodo: il metodo OTP viene utilizzato dalle spie di tutto il mondo quando si trovano in territorio nemico,

Dai su, vi voglio proprio impressionare: vi dico che questo metodo così perfetto e così semplice (non serve un pc, ma solo carta e penna) venne utilizzato per la scambio di informazioni che in assoluto richiese il maggiore grado di sicurezza della storia.

Sto parlando della linea diretta Washington – Mosca che durante la Guerra Fredda poteva dare inizio agli attacchi nucleari e quindi alla terza guerra mondiale! Dalla pagina di Wikipedia, leggiamo infatti che:

“The encryption of the teletype transmissions was realized by a device […] which used the unbreakable one-time pad cryptosystem

E io sto proprio per spiegarti cos’è questo “unbreakable one-time pad cryptosystem” ossia sistema crittografico inattaccabile basato sugli one-time pad.

Ora ho la vostra attenzione? Immergiamoci! 😀

Cenni introduttivi

La sicurezza del metodo OTP è assoluta ed è comprovabile anche tramite la verifica matematica. Se il metodo OTP viene utilizzato alla lettera (seguendo tutte le istruzioni), è impossibile ricavare il testo in chiaro partendo da quello criptato, se non si è a conoscenza della chiave.

Altri algoritmi crittografici moderni come l’AES, Twofish, RSA, e così via, possono essere attaccati: avendo a disposizione una quantità X di “potenza” e un tempo Y, TUTTI questi algoritmi possono essere rotti ed è quindi possibile decriptare un messaggio senza chiave.

Algoritmi come l’AES256, ovviamente, con la tecnologia moderna, richiederebbero milioni di anni per essere decriptati ma per fare un esempio, il professor Christof Paar ha inventato una macchina che riesce a decriptare un testo criptato in DES. Con un pc moderno è possibile decriptare un DES in circa 600 anni, mentre la sua macchina ci mette mediamente 2-3 giorni! (ora il DES non viene quasi più usato, ma è stato per decenni l’unico algoritmo presente nel settore)

Quanto costa questa macchina? Milioni di euro? Così solo l’FBI o l’NSA possono comprarsela? No, costa meno di 9.000 euro (ecco la presentazione!)

Nota: il professor Paar ha registrato le sue lezioni di crittografia che tiene all’università di Bochum e le ha pubblicate su Youtube. Per la disperazione dei suoi studenti (tedeschi) e per la nostra gioia, ha tenuto tutte le lezioni in inglese

Con l’avanzare della tecnologia e con il miglioramento delle performance di CPU/GPU, “rompere” gli algoritmi diventa sempre più facile. Con l’avvento dei computer basati su qubit invece che bit, questo sarà ancora più facile dato che la potenza crescerà in modo esponenziale (e quindi il tempo per crackare qualsiasi testo criptato diminuirà di conseguenza)

Tutti gli algoritmi moderni (che siano di tipo simmetrico o asimmetrico) sono soggetti a attacchi bruteforce o altri attacchi simili (in cui viene sfruttata la potenza computazionale delle macchine al fine di iterare processi impossibili da svolgere manualmente). Tutti gli algoritmi sono soggetti a questo tipo di attacchi tranne uno che risulta esserne immune, ed è per questo assolutamente perfetto: il cifrario monouso.

Il cifrario monouso

Il termine cifrario monouso l’ho dovuto scopiazzare da Wikipedia perché purtroppo non c’è una traduzione italiana di One Time Pad (il metodo che sto per descrivervi) e quindi ho dovuto “improvvisare”. Tralaltro, su Wikipedia IT non c’è alcuna voce legata all’OTP o al cifrario monouso, c’è solo un riferimento al cifrario di Vernam o suoi derivati (ad esempio il Cifrario di Vigenère che però è un’altra cosa, dato che di fatto non è un algoritmo perfetto e inattaccabile come l’OTP).

Alla base dei moderni metodi crittografici ci sono numerose operazioni che permettono di trasformare il testo in chiaro in testo criptato. Queste operazioni sono ad esempio:

  • S-box e P-box (permutazioni)
  • Modulo
  • Mix colonne / righe
  • Shifting
  • Key whitening
  • Sub-key derivation
  • Key stretching
  • Hashing
  • Network di Feistel
  • e così via

Queste sono tutte “operazioni” che possono essere mixate e iterate sul testo in chiaro per ottenere quello criptato. Il concetto alla base degli algoritmi è quello di confondere e diffondere (diffusion e confusion sono i due concetti base degli algoritmi moderni). Il testo criptato, ovviamente, deve essere difficile da decriptare anche conoscendo quali operazioni sono state effettuate: le operazioni usate per criptare, devono essere difficili da svolgere al contrario (parliamo in questo caso di funzioni trap door, ossia delle funzione matematiche che sono facili in un senso, ma difficili nel senso opposto).

Il metodo del cifrario monouso, invece, non usa il meccanismo del diffusion&confusion: non c’è bisogno di mixare più volte il testo iniziale con varie operazioni per cercare di renderlo sicuro. Con il metodo del cifrario monouso, eseguiamo una sola operazione che è semplicissima da svolgere: l’addizione modulare.

L’artitmetica modulare

Non sai cos’è l’artitmetica modulare? Ok, spè, calma, non correre all’impazzata urlando e strappandoti i capelli invocando il Padre Nostro. Te la spiego con un esempio infallibile:

Ipotizziamo che siano le 22:00 e che io ti dica: ciao *tuo-nome*, ci vediamo sotto casa tua tra 4 ore. Alle 2:00 di notte, ovviamente, io e te ci incontreremo sotto casa tua. Hai appena fatto un’addizione modulare!

Se chiedessi a un bambino quanto fa 22 + 4 lui ti direbbe 26, no? Ma sarebbe stupido incontrarsi all’ora 26:00, dato che non esiste! Tu, invece, sai che “22:00 più 4 ore, fa 2:00”, perché? Perchè hai svolto un operazione in “modulo 24” che si scrive così: 22 + 4 = 2 mod24 (il “2” non è altro che il resto dell’operazione)

In parole povere, essere in modulo 24 significa che quando “arrivi a 24” il contatore riparte da zero. Proprio come le lancette dell’orologio: se fai dei conteggi con le ore, quando arrivi a fondo scala (le ore 24:00) riparti da zero e così via.

Vediamo se hai capito: se io ti dico che da oggi l’orologio è formato da 17 ore (e quindi siamo in modulo 17), ora sono le 12 e ti dico che ci incontriamo tra 10 ore. In quale ora ci vedremo?

Soluzione: ci incontriamo alle 5! L’operazione che abbiamo fatto è questa:  12 + 10 = 5 mod 17

Ora che hai capito il meccanismo, possiamo anche abbandonare l’orologio. Prova a risolvere questi tre esempi da solo/a:

8 + 4 = ? mod 10

16 + 6 = ? mod 10

2 + 29 = ? mod 10

Soluzione: il primo è 2, il secondo è 2 e il terzo è 1

L’addizione modulare è l’unica operazioni che userai con il metodo OTP. La grandezza dei numeri e la difficoltà dei calcoli è la stessa degli ultimi 3 esercizi che ti ho fatto fare, ne più ne meno! Ecco perché il metodo si può fare con carta e penna, non serve nemmeno una calcolatrice 🙂

Criptazione e decriptazione con lo One Time Pad

Il concetto di base del metodo è semplice:

1) Prendiamo il testo che vogliamo criptare e lo trasformiamo in numeri

2) Scegliamo una chiave totalmente casuale

3) Effettuiamo un’addizione modulare tra i due

4) Comunichiamo il messaggio al destinatario

Il destinatario, per decriptare il messaggio, dovrà solo svolgere l’operazione modulare al contrario, usando la stessa chiave.

La chiave, come avrai capito, deve essere lunga come il testo che vuoi criptare. Se vuoi criptare il testo “CIAO MARIO” avrai bisogno di una chiave casuale di 10 caratteri. Per criptare “NO” hai bisogno di una chiave di 2 caratteri e così via.

Analizziamo, ora, le varie fasi:


Trasformazione del messaggio originale in numeri

Per criptare un messaggio, la prima operazione da fare è trasformarlo in numeri. Come? Niente di più facile! Se associ mentalmente ogni lettera dell’alfabeto a un numero, ecco che puoi sostituire qualsiasi parola.

Lo schema più semplice è questo:

A = 01

B = 02

C = 03

D = 04

Y = 25

Z = 26

SPAZIO = 27

Dato questo semplice schema, posso trasformare il mio testo con semplicità. Ad esempio:

ABC = 01 02 03

ZZZ = 26 26 26

CIAO = 03 09 01 15

CIAO ANNA = 03 09 01 15 27 01 14 14 01  (27 è lo spazio tra le parole)


Generazione della chiave monouso (appunto, il One Time Pad)

Ora che abbiamo il nostro testo convertito in numeri, dobbiamo utilizzare una chiave univoca con la quale cripteremo il messaggio. La chiave deve essere:

1) Lunga quanto il testo da criptare

2) Generata casualmente

3) Distrutta una volta che è stata utilizzata

Queste 3 condizioni sono essenziali. Il metodo OTP è sicuro al 100% SOLO se tutte e 3 le condizioni sono vere. (torneremo più avanti su questo concetto)

Ipotizziamo che il testo da criptare sia “CIAO”, che convertito in numeri è 03 09 01 15 , e che la chiave che ho scelto casualmente sia 12 02 17 09 , il prossimo passo è effettuare un’addizione modulare ( mod 10 ) tra i due.

Ricordate, dato che siamo in mod10, quando arriviamo a 10 il contatore si azzera e dobbiamo continuare a aggiungere/sottrarre, in base all’operazione che stiamo facendo. Quando vogliamo criptare un messaggio, facciamo una ADDIZIONE MODULARE, quando invece decripteremo, faremo una SOTTRAZIONE MODULARE. Proviamo a criptare!

Crittazione

Attenzione: i numeri vanno considerati singolarmente. Quando trasformiamo i messaggi li scriviamo a coppie (es. 03 09 01 15) ma dobbiamo considerarli sempre come numeri singoli ( ossia 0 3 0 9 0 1 1 5)

Scriviamo i codici su due righe e effettuiamo l’operazione:

0 3 0 9 0 1 1 5

1 2 0 2 1 7 0 9


1 5 0 1 1 8 1 4

Il messaggio criptato è quindi 15 01 18 14. Possiamo trasformare questo messaggio nuovamente in lettere (con lo schema A=1 B=2 che abbiamo usato all’inizio) e quindi otteniamo OARN.

Ricapitolando: grazie alla chiave segreta (e casuale) 12 02 17 09 abbiamo criptato il messaggio “CIAO” in “OARN”. Adesso possiamo comunicare il messaggio OARN al destinatario che può decriptarlo, dato che è a conoscenza della chiave segreta.

Decrittazione

Mettiamoci nei panni del destinatario. Io ho ricevuto il messaggio OARN e voglio decriptarlo. Per prima cosa lo trasformo in numeri con la tabella di conversione e ottengo 15 01 18 14.

Dato che conosco la chiave segreta, posso procedere alla decriptazione. Metto in colonna i due dati e eseguo una sottrazione modulare.

Attenzione: dato che la fase di criptazione è fatta senza riporto, quando sottraiamo dobbiamo stare attenti una cosa aggiuntiva:

Se il primo numero è maggiore del secondo allora la sottrazione si comporta come sempre ( esempio: 8 – 2 = 6 ).

Se invece il primo numero è minore del secondo, allora il primo va interpretato con il riporto, ossia maggiorato di 10. Se dobbiamo eseguire 3 – 9 , dobbiamo considerare 3 come “fosse” 13 e quindi 3 – 9 DIVENTA 13 – 9 = 4  

1 5 0 1 1 8 1 4

1 2 0 2 1 7 0 9


0 3 0 9 0 1 1 5

Decrittando il messaggio con la chiave, ottengo 03 09 01 15 che, trasformato con la consueta tabella, diventa CIAO

Finito! 🙂


Come hai visto, conoscendo la chiave segreta, si tratta solo si eseguire una addizione o sottrazione modulare (nel secondo caso stando attenti al riporto, come ho spiegato nel riquadro blu). Questo metodo è assolutamente unbreakable, ossia è inattaccabile. Vediamo perché:

Perché l’OTP è inattaccabile

Il metodo con l’OTP è assolutamente inattaccabile per un motivo molto semplice: se io conosco il testo criptato non c’è modo per ottenere il testo in chiaro originale, dato che la chiave, essendo casuale, può aver generato qualsiasi testo (un testo criptato di 5 lettere può essere trasformato in qualsiasi parola di 5 lettere esistente, dato che può essere decrittato con tutte le chiavi possibili. solo il destinatario della comunicazione, però, conosce la chiave esatta, e quindi solo lui può trovare la giusta parola di 5 lettere)

Proviamo con un esempio. Io ti do questo messaggio criptato con OTP e ti chiedo di attaccarlo:  BAXXL

Con i normali algoritmi crittografici, potresti semplicemente usare un attacco bruteforce e provare tutte le password finché non trovi quella giusta, ma in questo non funzionerebbe dato nel caso dell’OTP, tutte le password funzionano, e quindi tutte le password restituiscono un messaggio. Quindi il messaggio “BAXXL” potrebbe essere qualsiasi parola di 5 caratteri.

Dimostrazione:

BAXXL

0 2 0 1 2 4 2 4 1 2

9 6 8 0 0 4 2 5 0 8


1 6 2 1 2 0 0 9 1 4

Risultato: PUTIN

BAXXL

0 2 0 1 2 4 2 4 1 2

9 7 0 9 2 3 1 1 1 1


1 5 0 2 0 1 1 3 0 1

Risultato: OBAMA

BAXXL

0 2 0 1 2 4 2 4 1 2

9 4 0 6 1 0 0 8 1 3


1 8 0 5 1 4 2 6 0 9

Risultato: RENZI

Con questi tre box vi ho dimostrato che lo stesso codice criptato (BAXXL ossia 02 01 24 24 12) può essere decriptato come PUTIN, OBAMA o RENZI, in base alla chiave utilizzata. Immaginate una spia a cui viene trovato un messaggio: UCCIDI “BAXXL”. Potrebbe essere uccidi Obama, uccidi Putin, uccidi Renzi, uccidi Marco, e così via. Solo la spia conosce la chiave giusta e quindi solo lei può trovare il “vero” significato di BAXXL.

Tutte le chiavi esistenti sono plausibili, per questo è impossibile utilizzare un attacco bruteforce.

L’utilizzo dell’OTP è sicuro solo e unicamente se la chiave utilizzata è casuale e viene distrutta al momento dell’uso. Spieghiamo entrambi i concetti:

Unicità: la chiave usata deve essere stata generata in modo assolutamente casuale. Se io, per esempio, usassi sempre la stessa chiave “1 1 1 1 1 1 1 1 1 1 1”, capite bene che il risultato della crittazione sarebbe NON sicuro. Se io usassi una chiave di questo tipo, l’attaccante potrebbe effettuare una analisi di frequenza (dato che la lettera A verrebbe criptata sempre con lo stesso carattere, la B sempre con la stessa, ecc, è facile controllare la frequenza dei caratteri in una frase, anche se è criptata). Questo tipo di sostituzione si chiama cifrario di Cesare ed è totalmente insicuro, ecco perché è necessario che la chiave sia generata in modo casuale.

Fatto curioso: i tedeschi durante la seconda guerra mondiale utilizzarono un macchinario che sfruttava gli OTP (Enigma) per comunicare tra di loro. Il problema è che la generazione delle chiavi non era 100% casuale, dato che venivano generate tramite dei complessi rotori interni alla macchina. Il noto Alan Turing riuscì a decriptare il meccanismo e per questo gli Alleati furono in grado di decifrare tutti i messaggi segreti dei tedeschi. Un vantaggio militare non da poco 😉 

Distruzione delle chiavi: ogni chiave OTP deve essere usata solo una volta e, una volta utilizzata, deve essere materialmente distrutta. Se la stessa chiave viene utilizzata due o più volte per criptare, un attaccante può effettuare calcoli matematici e analisi statistiche in grado di decifrare i messaggi. Da questo fatto nasce la necessità di usare le chiavi una volta e di distruggerle dopo l’utilizzo. Se una chiave viene conservata e poi rinvenuta, l’attaccante può ovviamente usarla per decifrare i messaggi.

Fatto curioso 1: ai comandanti di flotta tedeschi veniva detto che, in caso di invasione della nave, prima di suicidarsi (per evitare di essere catturati e torturati) dovevano assolutamente bruciare i registri con le chiavi OTP

Fatto curioso 2: durante la guerra fredda, le spie (sopratutto quelle russe) iniziarono a usare le chiavi OTP più di una volta e questo permise agli americani, dopo anni di studio, di decifrare numerosi messaggi segretissimi scambiati tra le spie e i relativi governi. A questo scopo è nato il Venona project che, a quanto pare, è riuscito a decrittare più di 2200 messaggi scambiati con il metodo del cifrario OTP (ecco perché oggi sappiamo che usare una chiave una sola volta è assolutamente indispensabile, come il fatto di distruggerla dopo l’utilizzo).

Svantaggi del One Time Pad

I vantaggi, come ho ben spiegato, sono ricchi e intriganti: l’algoritmo permette la secretezza assoluta del messaggio, a patto che la chiave sia stata generata casualmente e che non sia stata riutilizzata più di una volta.

Il metodo OTP, però, ha anche degli svantaggi, che andiamo a analizzare:

cifrario one time pad

Credits: users.telenet.be

Key distribution: è il termine inglese con cui si intende la distribuzione delle chiavi. Sia il mittende che il destinatario dei messaggi devono essere in possesso delle stesse chiavi. Dato che le chiavi, come sappiamo, devono essere lunghe come i messaggi, se io devo parlare frequentemente con il destinatario, ho bisogno di un grandissimo numero di chiavi da poter utilizzare.

Fatto curioso 1: durante la guerra fredda (e probabilmente tuttora) il problema della key distribution viene risolto grazie alla distribuzione di piccoli cifrari che contengono un grandissimo numero di chiavi univoche. Alle spie che venivano inviate in terra nemica, venivano consegnati numerosi blocchetti (come in foto, a destra) contenenti migliaia di chiavi che sarebbero “bastate” per svariati mesi di comunicazioni segrete.

Fatto curioso 2: per scambiare i messaggi veri e propri (i messaggi criptati, non le chiavi) le spie moderne usano trasmettitori a onde corte che vengono emesse a lunga gittata. Se ad esempio una spia inglese viene inviata in Congo, in Inghilterra viene scelta una number station che ha il compito di inviare il segnale con le onde corte. I numeri che compongono il messaggio cifrato vengono “sparati” in mezzo mondo grazie alle onde corte (che rimbalzano sulla stratosfera e quindi hanno una gittato extracontinentale), così la spia in Congo deve solo procurarsi una ricetrasmittente (acquistabile ovunque, e attira poco l’attenzione dato che è molto comune tra i radioamatori). Dopo aver trovato la giusta frequenza, la spia può mettersi in ascolto e scrivere su un foglio di carta la sequenza di numeri. Grazie al suo blocchetto può decriptare il messaggio e ottenere le informazioni segrete (poi ovviamente brucia la pagina con la chiave!)

Integrità del messaggio: un problema che purtroppo può affliggere l’OTP è l’integrità del messaggio. Una persona con cattive intenzioni può mettersi in mezzo tra mittente e destinatario e modificare il messaggio criptato. Dato che l’attaccante non è in grado di decifrare nulla, comunque, difficilmente potrà dare un senso compiuto alle frasi che modifica (e quindi il destintario si accorgerà della manomissione, dato che non riuscirà a leggere correttamente il testo)

Lunghezza delle chiavi: purtroppo per criptare un messaggio c’è bisogno di una chiave di pari lunghezza. Finché parliamo di messaggi di pochi caratteri, la situazione è semplice, ma se io volessi criptare, ad esempio, un file del pc? Potrei usare il sistema OTP con una chiave (e trasformare i numeri in bits), ma il problema è che per criptare 500 MB di dati, dovrei avere una chiave da 500 MB (e dovrei anche conservarla, se per caso volessi decriptare).  Ecco perché l’OTP viene utilizzato per lo scambio di informazioni “corte”.

Il cifrario monouso è tutto qua?

Ci sono molti aspetti dell’OTP che ho tralasciato (sennò veniva fuori una tesi universitaria :D) ma fortunatamente su internet, se vi interessa, potete trovare di tutto e di più. Vi lascio con l’ultima curiosità:

tabella ct-55
Credits: users.telenet.be

Noi abbiamo utilizzato una tavola di conversione molto semplice, formata solo con le lettere dell’alfabeto (A=1, B=2, ecc).

Le spie e le agenzie segrete di tutto il mondo, invece, usano tavole di conversione molto più complesse, dato che hanno la necessità di usare la punteggiatura, i numeri all’interno del testo, e così via. Quella che vedete a lato, è una delle tavole di conversione più famose che effettivamente è stata usata (ed è usata ancora) da numerose agenzie segrete nel mondo.

Ultima curiosità: il blocchetto con le chiavi che vedi nella header in cima al post è stato effettivamene trovato dall’MI5 inglese nei vestiti di una spia russa.

Danilo petrozzi

Ciao! Io sono Danilo Petrozzi, il fondatore di Eternal Curiosity. Oltre a essere un senior SEO Specialist e un Web Developer, è dall'età di 9 anni che mi appassiono a qualsiasi cosa ruoti intorno al web e all'informatica in generale.

Lascia un commento