Articoli Manifesto Tools Links Canali Libri Contatti ?
Crittografia

Crittografia #1: le origini e gli algoritmi simmetrici

Abstract
In questa breve serie di articoli andremo ad effettuare una panoramica molto generale sui diversi sistemi crittocrafici in uso al giorno d'oggi.
Data di stesura: 27/10/2003
Data di pubblicazione: 24/11/2003
Ultima modifica: 04/04/2006
di horobi Discuti sul forum   Stampa

Steganografia e crittografia: dal passato al presente.

Sin dall'antichità vi è stato il problema di poter scambiare messaggi senza che nessuno potesse intercettarli o leggerli.

Immaginiamo due regni alleati (A e B) che debbano scambiarsi messaggi per accordarsi ad invadere un regno rivale (H) senza che quast'ultimo possa intercettarli e leggerli: si capisce facilmente che la segretezza delle informazioni deve rimanere assoluta.

Il primo problema che si poneva era evitare che il messaggio venisse intercettato; bisognava trovare il modo affinchè, anche se il messaggero veniva intercettato, il messaggio non poteva essere recuperato: doveva cioè essere molto ben occultato.

Una delle prime tecniche di comunicazione segrete, basata appunto sull'occultamento del messaggio, si chiama steganografia, dalle parole greche steganós, che significa coperto, e gráphein, che significa scrivere.

Per capire meglio di cosa si tratta facciamo un esempio che ci è stato tramandato da Erodoto e che sembra risalire ai persiani: come messaggero veniva preso uno schiavo al quale erano stati rasati i capelli, dopodichè sulla testa veniva scritto il messaggio ed una volta ricresciuti i capelli veniva inviato in missione.

Come si può notare questo sistema comporta notevoli inconvenienti, primo fra tutti il fatto che si dovesse attendere che i capelli ricrescessero sulla testa del malcapitato messaggero ... si capisce facilmente che non era il metodo più adatto per inviare messaggi urgenti!!!

Al contrario di quanto si può pensare la steganografia è vissuta sino ai giorni nostri: alcune tecniche prevedono infatti l'inserimento di messaggi all'interno di immagini digitali opportunamente ritoccate: vengono usati i bits meno significativi di ogni pixel di un'immagine, sfruttando il fatto che per un occhio umano una differenza di pochi bits tra due terne RGB (rosso, verde e blu, i tre colori primari) non è praticamente percepibile. Quei bits possono quindi essere usati per inserire altre informazioni, come ad esempio un documento di testo o un'altra immagine.

La steganografia, come abbiamo potuto constatare, tende quindi a nascondere un messaggio ma ha un grosso punto debole: una volta intercettato il messaggero (sia esso in carne ed ossa che digitale) è solo questione di una attenta perquisizione per trovare il messaggio e carpirne i contenuti.

Per ovviare a questo problema si è sviluppata parallelamente un'altra tecnica: la crittografia (dal greco kryptòs, nascosto) che mira a nascondere il significato del messaggio e non il messagio in se.

Immaginiamo sempre i nostri due regni (A e B) che vogliano scambiarsi un messaggio riguardante un regno nemico (H) senza che questi se ne accorga: con la crittografia A e B si accorderanno preventivamente sul sistema da usare per cifrare il messaggio (e quindi saranno entrambi in grado di cifrarlo e decifrarlo) che anche se verrà intercettato da H non potrà essere letto, in quanto non a conoscenza del sistema usato.

Anche per la crittografia abbiamo innumerevoli fonti da cui trarre esempi di tecniche applicate nel passato, ne esamineremo tre che, a mio parere, sono le più significative dell'impiego di questo tecnica.

La scitala lacedemonica

La scitala lacedemonica rappresenta uno dei primi esempi di crittografia usata nei tempi passati, i riferimenti che abbiamo rispetto agli anni in cui fu usata sono un pochino confusi ma la possiamo ambientare tra il 900 a.c. ed il 300 a.c.

La scitala lacedemonica, così come ci è stato tramandato da Plutarco, era composta da un bastone di lunghezza e larghezza nota (chiamati appunto scitale) e da un nastro (generalmente fatto di cuoio) sul quale era possibile scrivere ed il suo funzionamento era piuttosto semplice: si avvolgeva il nastro attorno al bastone e vi si scriveva sopra per colonne parallele all'asse del bastone lettera dopo lettera; una volta sciolto il nastro il testo scritto era trasposto e non era facilmente riconducibile all'originale senza un bastone di eguale misura a quello originale.

[Figura 1]

Figura 1: Esempio di scitala lacedemonica: il senso di lettura è dall'altro verso il basso, colonna dopo colonna.

Giulio Cesare ed i messaggi segreti.

Quasi più di quattro secoli dopo l'usa della scitala lacedemonica troviamo la descrizione di un altro semplice sistema per cifrare i messaggi: la traslazione delle lettere inventata da Giulio Cesare.

Di questo sistema ne abbiamo una chiara e semplice descrizione a cura di Svetonio: "...se vi era qualche questione riservata egli usava scrivere in cifra, e questa cifra consisteva in una disposizione apparentemente caotica delle lettere, sicché era impossibile ricostruire la parola originale. Chi voglia scoprirne il senso e decifrarla sappia che bisogna sostituire a ogni lettera la terza che segue nell'alfabeto; vale a dire dove è scritto A bisogna leggere D e così di seguito".

Come si può vedere è un sistema piuttosto semplice che può essere facilmente descritto con la seguente tabella:

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
e f g h i j k l m n o p q R s t u v w x y z a b c

Nonostante la semplicità del sistema esso garantì a Giulio Cesare la totale segretezza dei suoi messaggi per molto tempo.

La seconda guerra mondiale e la macchina Enigma.

Durante la seconda guerra mondiale tutte le comunicazioni militari tedesche venivano criptate con una macchina di cifra chiamata Enigma, ideata dall'ingegnere tedesco Arthur Scherbius. All'apparenza Enigma somigliava a una macchina da scrivere un po' particolare: una tastiera sormontata da un pannello di lettere luminose. Ma il suo cuore era costituito da una serie di rotori (tre nei modelli più comuni e quattro per quelli "super" installati solo sugli U-boat) e di spinotti elettrici. Rotori e spinotti potevano essere regolati su decine di milioni di combinazioni di partenza differenti. E a ogni combinazione corrispondeva un codice di cifra diverso: l'operatore regolava la macchina, iniziava a battere sulla tastiera il messaggio in chiaro e ogni volta che premeva un tasto la corrispondente lettera cifrata si illuminava. Per esempio, la parola "casa" poteva diventare "uyhj". Ma con una regolazione iniziale differente "casa" avrebbe potuto diventare "fwqp". Per riottenere il messaggio in chiaro, l'operatore ricevente doveva regolare rotori e spinotti sull'identica posizione iniziale della macchina trasmittente, digitare sulla sua tastiera il messaggio cifrato e leggere sul pannello il testo originale. "uyhj" ritornava magicamente "casa", ma solo se la regolazione iniziale era quella giusta, altrimenti si ottenevano solo lettere senza senso. Per forzare l'Enigma (alcuni dettagli della soluzione sono tenuti segreti fino ad oggi) Turing, per conto del governo inglese, si servì di gigantesche macchine chiamate appunto Colossi, che possono considerarsi i precursori dei moderni calcolatori elettronici.

[Figura 2]

Figura 2: La macchina Enigma: come si può notare è sprovvista di una stampante.

La crittografia ai giorni nostri.

Abbiamo accennato al fatto che la crittografia si occupa delle "scritture segrete" ma cosa sono realmente tali scritture? Sostanzialmente per scrittura segreta si intende una modalità di scrittura non leggibile da chiunque ma solo da chi è in possesso di una informazione segreta, indicata con il termine chiave (key).

A differenza dei tre esempi che abbiamo visto prima nella crittografia moderna si utilizzano sistemi più complessi: le tecniche utilizzate sono di natura matematica. Con la potenza della matematica, basata principalmente su applicazioni di teoria dei numeri, si costruiscono cifrari molto affidabili e sicuri poiché basati su teoremi ed applicazioni numeriche assolutamente dimostrabili.

Che cos'è quindi un cifrario?

Un cifrario è composto da un algoritmo che consente di trasformare un testo in chiaro (il messaggio che vogliamo scambiarci e da nascondere) in un testo cifrato (il messaggio segreto, m) tramite l'uso di algoritmi di cifratura (C) e decifratura (D).

[Figura 3]

Figura 3

Il principio di Kerckhoffs

Risulterà strano ma uno dei principi fondamentali della crittografia, utilizzato ancora nei moderni sistemi crittografici è stato individuato nel lontano 1883 dal francese August Kerckhoffs: il principio di Kerckhoffs.

"La sicurezza di un sistema crittografico è basata esclusivamente sulla conoscenza della chiave, in pratica si presuppone noto a priori l'algoritmo di cifratura e decifraura."

Questa osservazione appare molto realistica se si pensa che gli algoritmi della maggior parte dei sistemi crittografici moderni sono di pubblico dominio e disponibili ormai ovunque: riviste, libri, internet.

A questo punto potrebbe sorgere spontanea una considerazione: come è possibile che un cifrario crittografico sia sicuro se il suo funzionamento è reso di pubblico dominio nei minimi dettagli con la distribuzione dei codici sorgenti? La risposta è collegata proprio alla tecnica matematica utilizzata per la costruzione del cifrario. La matematica ci garantisce la sicurezza del cifrario, una sicurezza interna non violabile con la sola conoscenza della tecnica utilizzata per la sua costruzione: per poterla violare è necessario conoscere la chiave usata.

Fondamentalmente i sistemi crittografici moderni si dividono in due grandi categorie: i cifrari simmetrici e quelli asimmetrici o a chiave pubblica.

Inoltre bisogna anche tenere presente che esiste un'ulteriore classificazione: block cipher (codificano l'informazione lavorando per blocchi), stream cipher (codificano in modo continuo le informazioni) od hash (usati solo per controllo di integrità del messaggio in quanto ne creano un digest, o riassunto, unico).

Nella tabella qui sotto vediamo le diverse famiglie:

Algoritmo Tipo di funzione Esempi
Simmetrici (private key) Stream RC4, SEAL, WAKE, PKZIP
Block DES, 3 DES, RC2, RC5, RC6, Blowfish, ...
Asimmetrici (public key) Block RSA, Diffie-Hellman, Elliptic curve
Hash - - - - - MD5, SHA-1

In questa serie di articoli non affronteremo le varie differenze e problematiche dei tipi di funzione usata (in quanto veramente complesse) ma ci limiteremo a vedere come funzionano le due più grandi famiglie di algoritmi (simmetrici ed asimmetrici) per essere in grado di scegliere quello più consono alle nostre necessità.

La crittografia simmetrica

Nel cifrario simmetrico viene usata una sola chiave per cifrare e decifrare il messaggio. Introduciamo un parametro chiamato k (key= chiave) all'interno

delle funzioni di cifratura C(m,k) e decifrazione D(c,k) che abbiamo visto prima:

[Figura 4]

Figura 4

Ad esempio il cifrario di Cesare visto in precedenza è un classico esempio di sistema simmetrico. La chiave (k) in questo caso è rappresentata dal numero 3 corrispondente al numero di traslazioni, verso sinistra, delle lettere dell'alfabeto della lingua italiana a partire dalla lettera a. I cifrari simmetrici sono stati tra i primi cifrari della storia e vengono tuttora utilizzati nei moderni sistemi crittografici per la loro velocità di elaborazione.

Vediamone alcuni esempi.

DES - Data Encryption Standard

È stato sviluppato da IBM nei primi anni 70 ed è diventato uno standard nel 1976.

La chiave di crittografazione è lunga 64 bits, ma 8 bits sono di controllo, quindi la chiave effettiva è di 56 bits. Questo porta ad avere circa 72 milioni di miliardi di possibili chiavi. Ad oggi il DES non viene più certificato dal NIST ma ha tuttavia ancora larghissimo impiego nelle trasmissione audiovisive e nei sistemi di protezione di Bancomat e carte di credito, data anche l'elevata velocità di crittografazione. Non può essere tuttavia utilizzato in quei casi dove il valore dell'informazione da proteggere superi certe cifre, dato che già tempo fa è stato dimostrato che in circa 3 ore qualsiasi testo cifrato con DES può essere riportato in chiaro tramite un computer dal costo di 1 milione di dollari (per quello che è noto a livello non militare).

[Figura 5]

Figura 5: Il DES utilizza chiavi di 56 bits, divide il testo in chiaro in blocchi di 64 bit, effettua delle permutazioni iniziali e finali ed un ciclo di 16 iterazioni di permutazioni e xor.

3-DES o Triple DES

Il 3-DES è stato creato come perfezionamento del DES: utilizza sempre il cifrario DES ma con due chiavi di lunghezza 56 bits per un totale di 112 bits.

Praticamente il messaggio originale viene crittografato con la prima chiave k1 di 56 bits, il risultato viene crittografato con la seconda chiave k2 di 56 bits e questo risultato viene nuovamente crittografato con la chiave k1.

Blowfish

È stato ideato nel 1993 da Bruce Schneier: è un algoritmo molto veloce (molto più veloce del DES) e può usare chiavi variabili da 32 a 448 bits. Due cose dovrebbero attirare la nostra attenzione: è completamente free ed è inserito in moltissimi prodotti open source e non è ancora stato trovato un metodo per poterlo attaccare.

Rijndael

È stato sviluppato Joan Daemen e Vincent Rijmen. Questo algoritmo ha vinto la selezione per l'Advanced Encryption Standard (AES) il 2 Ottobre 2000.

Il cifrario utilizza chiavi di lunghezza variabile 128, 192, 256 bits; lo schema del Rijndael è stato influenzato dall'algoritmo SQUARE.

Dalla crittografia simmetrica a quella asimmetrica

A questo punto è facile capire che per poter cifrare e decifrare il messaggio le due persone, A e B, devono preventivamente accordarsi sulla chiave usata: vi immaginate cosa succederebbe se A mandasse una messaggio cifrato a B senza avergli prima comunicato la chiave k? Semplicemente B non sarebbe in grado di leggere il messaggio (se non dopo tantissimi tentativi).

È quindi semplice capire che il problema più grosso di questo tipo di cifrari è lo scambio della chiave k, chiunque ne venga in possesso sarà in grado di leggere il contenuto del messaggio.

[Figura 6]

Figura 6: Lo scambio del messaggio e delle chiavi in un cifrario simmetrico

Oppure pensate di dover comunicare con n utenti in maniera sicura attraverso l'utilizzo di un cifrario di tipo simmetrico: occorrerà scambiare per ogni comunicazione (n-1)*n/2 chiavi k, ad esempio con 10 utenti occorreranno 45 chiavi e 45 incontri fisici (visto che al giorno d'oggi non esiste un canale sicuro al 100%) per lo scambio delle stesse, il tutto per ogni comunicazione ...

Per ovviare a questo tipo di problemi si è passati all'uso di cifrari asimmetrici che vedremo nel prossimo articolo.

Informazioni sull'autore

horobi, diplomato, lavora da circa 10 anni nel campo dell'informatica e si è occupato di sistemi operativi (sia Win che *nix) e reti. Da alcuni anni si occupa di principalmente di sicurezza ed Ethical Hacking.

È possibile consultare l'elenco degli articoli scritti da horobi.

Altri articoli sul tema Crittografia.

Risorse

  1. Parte 2: gli algoritmi asimmetrici
    http://www.siforge.org/articles/2004/03/29-crypto_cap2.html
Discuti sul forum   Stampa

Cosa ne pensi di questo articolo?

Discussioni

Questo articolo o l'argomento ti ha interessato? Parliamone.