Crittografia: da Giulio Cesare al WiFi

Pagare da Internet o con il POS del ristorante, essere sicuri che solo noi possiamo leggere le nostre mail oppure collegarsi senza fili al proprio modem. Ma anche: non poter  creare schede “pirata” per SKY o non riuscire ad accedere a siti a pagamento.. senza pagare. Sono tutti risultati d’un’arte millenaria: la crittografia.

Forse tutti pensano di sapere cos’è la crittografia, ma sapreste dirmi la differenza tra crittografia e steganografia?

La steganografia mantiene nascosta l’esistenza dei dati di un messaggio mentre la crittografia nasconde i dati di un messagio.
Non è chiaro? Facciamo un esempio.

Messaggio originale: Muori.
Steganografia: Mercoledì unirò ogni ragazzo italiano.
Crittografia: PXRUL (Cifrario di Cesare).

Cosa ho fatto? Per steganografere il messaggio ho creato un finto messaggio (si potrebbe trovare anche una frase con più senso) che, verrebbe da dire, subdolamente nasconde il messaggio originale (avete capito il “trucco”?). Mentre per criptare il messaggio ho scritto un messaggio che sembrerebbe senza senso ma con l’oppurtuna chiave…

La steganografia è un’arma importante e ancora oggi usata (per esempio esistono diversi programmi per nascondere dietro a una qualsiasi immagine jpg tutte le informazioni che volete) ma ora parlerò di crittografia; se volete che approfondisca l’argomento non fate i timidi e richiedetelo nel vostro commento!

Le basi della crittografia

Per crittografare un messaggio la crittografia “classica” (vedremo più avanti quella più recente) necessita fondamentalmente di tre informazioni:

  1. Un modo per crittografare il messaggio
  2. Un modo per decifrare il messaggio
  3. Una chiave (o password)

Bisogna pensare che quando non esistevano i computer qualsiasi metodo per trasformare un messaggio era laborioso poichè bisognava “ricopiare” il testo originale applicando regole che, se complicate, potevano far perdere molto tempo! Stesso valeva per la fase di decrifazione: se per decifrare il messaggio “I NEMICI STANNO ARRIVANDO” ci mettiamo un’ora è chiaro che la “tecnica” (ossia il metodo di cifratura e decifratura) non è affatto utile.
Bisogna chiarire un altro punto fondamentale: non è importante tenere nascosta la tecnica ma la password. Il nemico potrà capire quale tecnica stiamo usando per cifrare un messaggio ma se non conosce la password non dovrà mai venire a conoscenza del contenuto dei messaggi. Tanto è vero che al giorno d’oggi tutte le crittografie usate  sono “standardizzate” ossia spiegate nei minimi dettagli in documenti di centinaia e centinaia di pagine.
Ora che conosciamo le basi possiamo esplorare le tecniche più usate nella storia.

Il cifrario di Cesare

Il settore militare ha sempre utilizzato la crittografia, nascondere il messaggio è fondamentale se non si vuole che il nemico sia pronto a tenderci un’imboscata.
E’ noto che Giulio Cesare utilizzasse una forma di crittografia abbastanza semplice per codificare i propri messaggi (sia quelli personali che quelli militari).
La tecnica di Cesare è semplice: ad ogni lettera ne corrisponde un’altra più avanti nell’alfabeto di 3 posti. Ad esempio alla A corrisponde la D, alla B corrisponde la E, alla L corrisponde la O ecc. Ovviamente bisogna utilizzare la “matematica dell’orologio” e al posto di U scrivere A, di V B… facendo “il giro” dopo la Z.
Potete andare al seguente indirizzo http://critto.liceofoscarini.it/critto/caesar.htm per provare a sentirvi Giulio Cesare…

La chiave è il numero “3”, in base a tale numero dipende il messaggio “cifrato”. Essendo 26 le lettere dell’alfabeto inglese si può spostare ogni carattere al massimo di 25 (perchè non 26?) posizioni, dunque esistono in tutto 25 “password” diverse. E’ semplice generare il messaggio cifrato tanto quanto decifrarlo (per chi conosce la password). Tuttavia, anche non conoscendo la password, con un po’ di pazienza non sarebbe impossibile provare tutte le 25 password possibili (in gergo, si chiama attacco “brute-force“: ossia provarle tutte), anche manualmente è subito evidente se si ottengono parole sensate oppure no.
Utilizzando lo schema precedente, per riassumere le tecnica:

  1. Cifrare: ad ogni lettera se ne sostituisce una spostandola di X nell’alfabeto.
  2. Decifrare: ad ogni lettere se ne sostituisce una spostandola di X all’indietro nell’alfabeto.
  3. X è la password ed è un numero da 1 a 25.

A questo punto potete utilizzare questo piccolo schema per decifrare i vostri messaggi

Sostituzione monoalfabetica

Ad ogni lettera è associata un’altra lettera dell’alfabeto in modo “casuale”. Ad esempio

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
Q W E R T Y U I O P A S D F G H J K L Z X C V B N M

È un (non troppo casuale) modo per cifrare un messaggio: alla A corrisponde la Q, alla B corrisponde la W ecc.

Per decifrare il messaggio sarà sufficiente leggere la tabella in senso inverso. In questo caso la “password” è la tabella, che il cifratore e il decifratore devono avere con se. La cifratura e la decifratura sono abbastanza semplici (un po’ più complicate di quella di Cesare) anche facendole a mano. Le password diverse (ossia le possibili tabelle) sono 403’291’461’126’605’635’584’000’000 (circa 403 milioni di miliardi di miliardi, indicativamente quante parole si possono scrivere con 19 lettere). Sono molte, ma non moltissime (si può scrivere in 89 bit, comunemente si usano password di 128 bit). Tuttavia anche a mano è risolubile come metodo. Infatti, in ogni lingua ci sono molte parole che vengono ripetute: “e” “o” “il” ecc., sono parti di testo che sicuramente compaiono in un testo anche di media lunghezza. A partire da queste poche lettere può essere non troppo difficile capire le altre lettere partendo da alcune porzioni di testo.
Per riassumere:

  1. Cifrare: ad ogni lettera si legge la tabella X dall’alto in basso, dalla lettera sorgente alla lettera destinazione.
  2. Decifrare: ad ogni lettera si legge la tabella X dal basso in alto.
  3. Password: è la tabella X, ne esistono miliardi di miliardi.

Come trovare la chiave

Nei due metodi appena descritti esiste un modo per trovare le “chiave” (ossia la corrispondenza tra lettera in chiaro e lettera cifrata). Si basa sul fatto che in ogni lingua ogni lettera compare con una certa frequenza. Ad esempio, in italiano, la A compare con una frequenza del 11,74%. Perciò analizzando un testo (preferibilmente molto lungo) e analizzando la frequenza delle lettere cifrate si possono fare delle corrispondenze: se la lettera X compare nel 12% dei casi (ad esempio) potrebbe essere una A.
Inoltre, se abbiamo un’idea di cosa ci possa essere scritto, siamo molto avvantaggiati. Supponiamo di dover decifrare una pagina HTML, i documenti HTML iniziano con la parola <HTML>. Se nel cifrato troviamo &SDFR& abbiamo ottenuto che la H diventa S, la T diventa D ecc. e dunque siamo molto avvantaggiati. (Anche una lettera possiamo immaginare inizi con Gentile o Cordiale..).

One Time Pad: il cifrario perfetto

One Time Pad (letteralmente “Blocco mono-uso”) è un metodo di cifratura classica, abbastanza simile a quelli visti precedentemente che non ha punti deboli. Per spiegarlo faccio subito un esempio

Testo chiaro:  sii conservatore in ciò che invii verso l'esterno, sii liberale in ciò che ricevi
Testo pulito:  SIICONSERVATOREINCIOCHEINVIIVERSOLESTERNOSIILIBERALEINCIOCHERICEVI
Testo chiave:  NELMEZZODELCAMMINDINOSTRAVITAMIRITROVAIPERUNASELVAOSCURACHELADIRIT
Testo cifrato  FMTOSMRSUZLVODQQAFQBQZXZNQQBVQZJWEVGOEZCSJCVLAFPMAZWKHTIQJLPRLKVDB

Come ho fatto? È semplice, basta in verticale “sommare” le lettere. Ad ogni lettera corrisponde un numero: alla A corrisponde 0, alla B 1, alla C 2 ecc. In questo modo, ad esempio I + E = M (8 + 4 = 12). Naturalmente, come nel cifrario di Cesare se si supera la Z basta ricominciare da capo, ad esempio V + I = D.
Ma perchè questo cifrario è perfetto?
“Andando per tentativi” non potrete mai essere sicuri che la password ottenuta sia giusta, perchè anche se ottenete un messaggio in chiaro di senso compiuto esiste sicuramente un’altra chiave che rende il messaggio di senso compiuto Proprio per questo è meglio utilizzare una password priva di senso : se il vostro nemico, in qualche modo, decifra “Nel mezzo” può arrivare a capire tutta la chiave senza doversi sforzare affatto. Faccio un esempio per chiarire che è una cifratura perfetta:
Testo chiaro: CIAO
Testo chiave:  ABCD
Testo cifrato:  CJCR

Il testo cifrato è CJCR e se pensassi che la chiave sia AJPN, otterrei la parola CANE, come faccio a dire che la chiave è sbagliata? Non posso!

Ma allora perchè non usiamo tutti questo bellissimo metodo? La password deve essere segreta, e in questo caso lunga quanto il messaggio. Quindi se dobbiamo comunicarci in segreto la password, tanto vale comunicarsi tutto il messaggio no?
In realtà questa forma di codifica viene utilizzata: supponiamo che vogliate scappare all’estero e volete comunicare con la vostra famiglia in maniera privata. Potete creare un documento, fatto di caratteri casuali lungo a dismisura (supponiamo un file di testo pieno di caratteri “asfishflewbflakjbfaljfbsa…” grande quanto un dvd) a questo punto ne create una copia per i vostri familiari. In questo modo entrambi ne avete una copia e man mano che vi scambiate messaggi continuate ad utilizzare la chiave in comune. Se la chiave è abbastanza lunga potrete parlare per sempre senza possibilità di venire scoperti, l’unico problema sarà tenere nascosto il dischetto!

DES e AES: cifratura al giorno d’oggi

Tutti questi metodi sono stati superati, anche perchè ormai non ha più senso parlare di “cifrare un testo” tutte le nostre informazioni sono sul computer e il computer utilizza solo numeri (binari) per registrarle. Dunque tutto quello che ci serve è trasformare un numero in un altro!
Il DES (Data Encryption Standard) o DEA è lo strumento moderno per farlo in maniera sicura e inattaccabile (non si è dimostrato sia perfetto, ma nessuno è mai riuscito a fornire la prova contraria). Aveva (forse per colpa del NSA?) un unico difetto: la chiave doveva essere lungua 56 bit, un po’ poco per i giorni nostri (nel 1998 ci vollero 56 ore per trovarla, pensate oggi.). Questo svantaggio è stato recuperato successivamente utilizzando chiavi da 128 a 256 bit con il nuovo metodo AES (anche se i numeri si assomigliano voi dovete pensare che ogni singolo numero in più significa raddoppiare: 57 bit rappresentano un numero 2 volte maggiore di 56 bit).
Descrivere cosa faccia il DES e l’AES è noioso e non ci sono particolari sorprese, viene anzi da chiedersi se funzioni davvero… sì funziona davvero!

Dunque AES è attualmente (magari, spero, lo state utilizzando adesso per fare in modo che il vicino non vi rubi la connessione wifi a internet!) la cifratura simmetrica utilizzata, sicura e “praticamente perfetta”. E allora qual’è il problema?

La password: dalla cifratura simmettrica a quella asimettrica

Il problema è la password: facciamo un esempio.
Il generale vuole parlare con le sue truppe in maniera segreta: il primo giorno di guerra si mettono d’accordo la password è “be!magazine”. Tutto bene, una password abbastanza grande, sicura, siamo pronti!
Peccato però che quel giorno c’era una spia, il generale e le sue truppe s’erano incontrati al bar non sapendo che il barista era un acerrimo nemico del regno!!

Scherzi a parte, il problema è grande e ricorda una massima di Giovenale “Quis custodiet ipsos custodes?”, chi controlla i controllori? Se non posso comunicare in sicurezza come faccio a comunicare la password?
La cifratura asimettrica serve a questo. Lo schema asimettrico è il seguente

  1. Un metodo per cifrare
  2. Un metodo per decifrare
  3. Una chiave (pubblica) nota a tutti per cifrare
  4. Una chiave (privata) nota solo a me per decifrare

Esempio: Alice vuole parlare con Bob, Alice utilizza la chiave pubblica di Bob (che tutti conoscono) in questo modo Bob può utilizzare la sua chiave privata (che invece è segreta). È come se Alice mettesse al messaggio un lucchetto di cui solo Bob ha la chiave, tutti possono avere il lucchetto di Bob, e a lui non interessa perchè solo lui ha la chiave per quel lucchetto!

È fantastico! Ma si può fare davvero? Sì, c’è voluta la genialità dei matematici e riscoprire teoremi (parlo del piccolo teorema di Fermat) che non avevano nessun utilizzo (poi dicono che la matematica non serve!). La tecnica più utilizzata e conosciuta è RSA (dal nome dei 3 scopritori.. perchè la A è in fondo? …) e si basa appunto sull’aritmetica modulare, quella che prima ho chiamato “matematica dell’orologio”: dove 16 è uguale a 4 se è modulo 12… Inoltre sfrutta i numeri primi (sono utili per questo!)… ma non entriamo nei dettagli che è meglio!
RSA è utilizzato ad esempio nel protocollo SSL (quello che vi permette di navigare sicuri tramite internet, quando nella barra compare https al posto di http) insieme ad AES (vi ricordate?): in pratica tramite RSA ci si scambia in maniera sicura esclusivamente la password comune per utilizzare AES, il quale viene utilizzato per cifrare il resto della comunicazione… se avete capito questo avete capito tutto!

Ed è tutto.. spero nel prossimo articolo di spiegarvi quali programmi potete utilizzare per comunicare (o memorizzare i propri dati) in sicurezza…

Grazie, se avete domande, non esitate!

You may also like...

2 Responses

  1. styl says:

    Bell’articolo!

    Propongo un giochino/curiosità. Nel libro “Voi non sapete” di Andrea Camilleri sono raccolti alcuni pizzini di Bernardo Provenzano. Nei suoi messaggi Provenzano sostituiva i nomi più ricorrenti con un semplice numero (spero non 4011), mentre per quelli “una tantum” utilizzava una vera e propria semplice crittografia. Camilleri riporta questo brano:

    “è stato lui a mandarci da questo dottore e poi avevo intenzione di contattare, con il tuo permesso 1012234151512. 14819647415218. In merito all’altro dottore…”

    Riuscite a decrittare questo nome? Due indizi:

    – nel nome di battesimo c’è un errore, manca una lettera
    – pare che Provenzano chiamasse questo codice “Svetonio”…

  2. alle says:

    ho letto il libro CRYPTO e mi sono fatto un viaggio assurdo! il libro no ne che mi abbia preso molto ma il codice di criptazione si!
    il tuo articolo e super fighissimo! sicuro quelli della nasa ti beccano se scappi, anche se fai il DVD 🙂
    ma very compliment per l’article!
    ciao

Leave a Reply

Your email address will not be published. Required fields are marked *