Teoria dei numeri e Crittografia: lezione del 11 gennaio 2012 Crittografia.
E’ la scienza che studia la possibilità che un soggetto A (mittente) spedisca un messaggio ad un utente B (destinatario) attraverso un canale di comunicazione non sicuro, in modo che per un soggetto C (intruso), che sia in grado di intercettare il messaggio, sia “difficile” conoscere le informazioni in esso contenuto.
In un sistema crittografico il messaggio originale (detto messaggio in chiaro) prima di essere trasmesso dal mittente A viene opportunamente modificato (la cosiddetta cifratura che trasforma il messaggio in chiaro in un messaggio cifrato); è il messaggio cifrato che viene trasmesso lungo il canale di comunicazione: quando il destinatario B lo riceve, ne effettua una opportuna modifica (la cosiddetta decifratura) che fornisce come risultato il messaggio in chiaro originale.
Anticamente il concetto di ”messaggio” era ristretto ad un messaggio di tipo “testuale”, cioè costituito da caratteri alfabetici.
Al giorno d’oggi ogni messaggio è in forma digitale (cioè numerica) e può contenere informazioni di vario tipo (file immagine, file audio-video etc…): la codifica numerica avviene attraverso dei codici internazionali (per esempio il codice ASCII) e il messaggio viene trasmesso in base 2 come una successione di bits 0,1.
Il messaggio viene spesso suddiviso in blocchi di bits (di lunghezza prefissata) quindi in termini numerici un messaggio diventa un numero intero non negativo di grandezza limitata (cioè <N dove N>0 è un intero prefissato).
Se vogliamo formalizzare la struttura di un sistema crittografico, servendoci della teoria degli insiemi, possiamo dire che si possono individuare:
- un insieme finito X dei messaggi in chiaro, spesso coincidente con l’insieme I
N={0,1,…,N-1}
dei numeri interi non negativi <N (dove N>0 è un intero prefissato)
- un insieme finito Y dei messaggi cifrati spesso coincidente con l’insieme I
M={0,1,…,M-1} dei numeri interi non negativi <M (dove M>0 è un intero prefissato). Nei casi concreti talvolta è N=M, dunque X=I
N=Y=I
M- una funzione di cifratura f : X → Y (che trasforma ogni messaggio in chiaro x ∈ X in un messaggio cifrato y=f(x) ∈ X) e una funzione di decifratura g : Y → X (che ritrasforma il messaggio cifrato y=f(x) ∈ Y nel messaggio in chiaro x=g(y) ∈ X).
Dal punto di vista insiemistico, la proprietà della funzione di decifratura g si traduce nel fatto che per ogni messaggio in chiaro x ∈ X si deve avere g(f(x))=x, dunque la composizione g •••• f deve coincidere con la funzione identica i
Xdell’insieme X.
Questo implica che la funzione di cifratura f è iniettiva (e dunque biunivoca se X=Y) perché se f(x
1)=f(x
2) allora g(f(x
1))=g(f(x
2)) dunque x
1=x
2.
La funzione di cifratura e la funzione di decifratura si servono in generale di elementi ausiliari (detti rispettivamente chiavi di cifratura e chiavi di decifratura) che sono utilizzati nella trasformazione di un messaggio in chiaro in messaggio cifrato e nella ritrasformazione di un messaggio cifrato nel messaggio in chiaro da cui esso proveniva.
Un principio empirico è il seguente: la sicurezza di un sistema crittografico risiede nella segretezza delle chiavi e non in quella delle funzioni di cifratura e decifratura.
Il sistema crittografico di Cesare.
E’ un sistema crittografico molto semplice (ma poco sicuro) che pare fosse utilizzato da Cesare per
le sue corrispondenze personali.
Supponiamo che l’insieme dei messaggi in chiaro X e quello dei messaggi cifrati Y coincidano entrambi con I
21={0,1,2,……,20} e che tali numeri si facciano corrispondere alle 21 lettere dell’alfabeto italiano (A=0, B=1, C=2,….., Z=20)
Fissiamo una lettera dell’alfabeto e il suo corrispondente numerico a (dunque 1 ≤ a ≤ 20 ): tale valore numerico a è la chiave di cifratura, detta offset. Definiamo la funzione di cifratura f : X → Y nel modo seguente: disponiamo in modo “circolare” gli elementi di X (in modo che dopo il valore 21 vi sia di nuovo il valore 0 e così via), e per ogni messaggio in chiaro x ∈ X definiamo il messaggio cifrato y=f(x)=(x+a)mod21: in pratica ogni lettera viene cifrata spostandola di un numero di posizioni uguale all’offset a lungo l’alfabeto in verso orario.
Per esempio se la chiave di cifratura è a=3 e se x=4 (valore numerico della lettera E) allora f(4)=7, valore numerico della lettera H (appunto la lettera che si trova 3 posizioni più avanti rispetto alla lettera E).
La funzione di decifratura g : Y → X utilizza la stessa chiave a, ed è ovviamente definita nel modo seguente: per ogni y ∈ Y si ha g(y)=(y-a)mod21 (corrisponde ad uno spostamento di a posizioni in verso antiorario).
Ovviamente non è opportuno scegliere l’offset a=0 , che rende coincidenti messaggio in chiaro e messaggio cifrato.
Per rendere operativamente più semplice la cifratura, il mittente scrive, sotto la successione delle lettere dell’alfabeto, la stessa successione “shiftata” verso destra di a posizioni (se a è la chiave di cifratura) sempre pensando ad una struttura “circolare”: sotto ogni lettera si trova la sua cifratura.
Per esempio nel caso a=3:
A B C D E F G H I L M N O P Q R S T U V Z D E F G H I L M N O P Q R S T U V Z A B C
In questo caso, per cifrare il testo in chiaro “ATTACCATESUBITO” applicando ad ogni lettera del testo la funzione f di cifratura, si ottiene il seguente testo cifrato (da trasmettere lungo il canale di comunicazione):
“DZZDFFDZHVAENZR”
Analogamente, per rendere operativamente più semplice la decifratura, il destinatario scrive, sotto la successione delle lettere dell’alfabeto, la stessa successione “shiftata” verso sinistra di a posizioni: sotto ogni lettera si trova la sua decifratura.
Nel nostro caso (sempre con a=3):
A B C D E F G H I L M N O P Q R S T U V Z U V Z A B C D E F G H I L M N O P Q R S T
Decifrando il testo ricevuto “DZZDFFDZHVAENZR” (lettera per lettera) si riottiene il testo originale “ATTACCATESUBITO”.
Nel sistema crittografico di Cesare la chiave di cifratura coincide con quella di decifratura, e ovviamente deve essere concordata in anticipo fra il mittente e il destinatario. Il sistema di Cesare è poco sicuro: l’intruso che intercetti il messaggio cifrato, potrebbe cercare di risalire al messaggio in chiaro con il metodo della “forza bruta”, provando a decifrare il messaggio con tutte le possibili chiavi (che sono in tutto 20) fino ad ottenere un messaggio che abbia un senso compiuto.
Il sistema crittografico di Cesare fa parte dei cosiddetti sistemi a sostituzione monoalfabetica
(ogni lettera dell’alfabeto viene cifrata con un’altra lettera, ma sempre con la stessa lettera, anche se
la lettera originale appare in diverse posizioni nel testo in chiaro).
Nell’esempio precedente la lettera A, che si trova in 2 posizioni diverse nel messaggio in chiaro
“ATTACCATESUBITO” viene cifrata sempre con la lettera D.
Per rendere più difficile l’uso della “forza bruta” da parte dell’intruso, si può utilizzare una variante del sistema di Cesare, in cui il numero di chiavi è molto più grande.
Come chiave di cifratura (e anche di decifratura) si fissa una permutazione σ dei numeri 0,1,2,….,20 (o equivalentemente delle lettere dell’alfabeto A,B,.…,Z) e si definisce la funzione di cifratura f : X → Y nel modo seguente: per ogni messaggio in chiaro x ∈ X si pone f(x)= σ (x).
Dal punto di vista operativo, il mittente scrive, sotto la successione delle lettere dell’alfabeto, le lettere nella permutazione fissata: sotto ogni lettera si trova la sua cifratura.
Per esempio se la permutazione fissata come chiave é BFGTURSEIOLMZNCUDATHP:
A B C D E F G H I L M N O P Q R S T U V Z B F G T U R S E I O L M Z N C U D A Q H P la cifratura del testo in chiaro “ATTACCATESUBITO” è “BAABGGBAUDQFIAZ”.
La funzione di decifratura g : Y → X si ottiene viceversa associando ad ogni lettera (considerata nella permutazione) la lettera che si trova sopra di essa (formalmente g(y)= σ.-1(y) per ogni y ∈ Y ).
Anche in questo caso la chiave di cifratura (la permutazione fissata) coincide con quella di decifratura, e deve essere concordata in anticipo fra il mittente e il destinatario: ma il numero di chiavi possibili coincide con 21! (il numero delle possibili permutazioni di 21 lettere), e poiché tale numero è molto grande (ha 20 cifre in base 10) il metodo della “forza bruta” non è praticamente applicabile dall’intruso che cerca di “rompere” il sistema crittografico.
Anche tale sistema crittografico, come quello di Cesare, è un sistema a sostituzione monoalfabetica (ogni lettera dell’alfabeto viene cifrata con un’altra lettera, ma sempre con la stessa lettera, anche se la lettera originale appare in diverse posizioni nel testo in chiaro).
Tutti i sistemi a sostituzione monoalfabetica sono però vulnerabili ad un altro tipo di attacco, quello basato sull’analisi statistica delle frequenze delle lettere .
Se un testo è scritto in una certa lingua (e soprattutto se esso è molto lungo) il numero di presenze (in percentuale) di ogni lettera dell’alfabeto nel testo è in genere molto vicino ad un valore statistico che si conosce a priori.
Per esempio, nella lingua italiana, le vocali a, e sono le lettere statisticamente più frequenti (quasi il 12% di frequenza); seguono la vocale i (poco oltre l’11%), la vocale o (circa il 10%), la consonante n (circa il 7%) e così via, fino alle consonanti q, z (le meno frequenti, con un valore di circa 0,5%).
Poiché ogni lettera del testo in chiaro ha sempre la stessa cifratura (indipendentemente dalla sua posizione), esaminando la frequenza delle lettere nel testo cifrato si potrebbe, con una certa approssimazione, fare delle ipotesi sulle lettere di cui esse sono la cifratura (soprattutto se il testo è molto lungo) e poi, attraverso altre considerazioni “linguistiche” (ogni lingua ha certi “vincoli” fra le lettere di una parola) sarebbe possibile, anche per tentativi, risalire al testo in chiaro.
Il sistema crittografico di Vigenère
La vulnerabilità alle analisi statistiche dei sistemi crittografici a sostituzione monoalfabetica risiede
dunque nel fatto che ogni lettera dell’alfabeto viene cifrata sempre con la stessa lettera,
indipendentemente dalla sua posizione nel testo.
Il sistema crittografico di Vigenère (introdotto nel ‘500) pone rimedio a questo difetto, perché è un sistema a sostituzione polialfabetica, nel senso che ogni lettera dell’alfabeto viene cifrata con una lettera che però dipende dalla posizione della lettera stessa nel testo in chiaro.
Il sistema di Vigenère è una evoluzione del sistema di Cesare: nel sistema di Cesare si fissa come chiave (offset) una lettera dell’alfabeto con valore numerico a; ogni lettera x del testo in chiaro é cifrata con la lettera che si trova (a partire dalla lettera x) spostandosi di a posizioni lungo l’alfabeto in verso orario (pensando sempre all’alfabeto con un struttura circolare).
Invece nel sistema di Vigenère la chiave è una parola di lunghezza k>0 sull’alfabeto A,B,…,Z:
poiché k è in genere minore del numero di lettere del testo in chiaro, per effettuare la cifratura si ripete più volte la chiave sotto il testo in chiaro fino a “coprire” tutte le lettere di quest’ultimo (anche in eccesso), e poi si cifra ogni lettera del testo in chiaro con il sistema di Cesare utilizzando come chiave la lettera della parola chiave che si trova sotto di essa.
Per esempio, se il testo in chiaro è “APPUNTAMENTOALLETRE”, e se la chiave è la parola
“SEGRETO” :
A P P U N T A M E N T O A L L E T R E S E G R E T O S E G R E T O S E G R E T O S T V O R P O F I T N S T D E I C L I
Nella prima riga vi è il testo in chiaro, nella seconda la chiave ripetuta più volte (fino a coprire il testo in chiaro), nella terza il testo cifrato: per esempio si cifra la seconda lettera P con chiave E (offset =4), ottenendo la cifratura T; si cifra la terza lettera P con chiave G (offset =16), ottenendo la cifratura V e così via. Come si vede una lettera del testo in chiaro può essere cifrata in modo diverso a secondo della sua posizione: la P in seconda posizione viene cifrata con T; la P in terza posizione viene cifrata con V. Per semplificare la cifratura, si può utilizzare una matrice 21x21, composta da alfabeti ordinati e shiftati verso destra: la prima riga contiene le lettere dell’alfabeto nel loro ordine naturale; la seconda riga contiene le lettere shiftate di 1 posto verso destra (sempre pensando ad una struttura circolare); la terza riga contiene le lettere shiftate di 2 posti verso destra etc…. (vedere sotto la matrice).Per cifrare una lettera del testo in chiaro basta individuare, nella prima riga, la colonna in cui si trova la lettera stessa, poi individuare, nella prima colonna, la riga in cui si trova la lettera che ha il ruolo della chiave (offset): la cifratura sarà la lettera che si trova all’incrocio fra la colonna e la riga individuate. Per esempio per cifrare la lettera T con la chiave R: si individua nella prima riga la colonna della T, si individua nella prima colonna la riga della R e si ottiene la cifratura N all’incrocio.
A B C D E F G H I L M N O P Q R S T U V Z B C D E F G H I L M N O P Q R S T U V Z A C D E F G H I L M N O P Q R S T U V Z A B D E F G H I L M N O P Q R S T U V Z A B C E F G H I L M N O P Q R S T U V Z A B C D F G H I L M N O P Q R S T U V Z A B C D E G H I L M N O P Q R S T U V Z A B C D E F H I L M N O P Q R S T U V Z A B C D E F G I L M N O P Q R S T U V Z A B C D E F G H L M N O P Q R S T U V Z A B C D E F G H I M N O P Q R S T U V Z A B C D E F G H I L N O P Q R S T U V Z A B C D E F G H I L M O P Q R S T U V Z A B C D E F G H I L M N P Q R S T U V Z A B C D E F G H I L M N O Q R S T U V Z A B C D E F G H I L M N O P R S T U V Z A B C D E F G H I L M N O P Q S T U V Z A B C D E F G H I L M N O P Q R T U V Z A B C D E F G H I L M N O P Q R S U V Z A B C D E F G H I L M N O P Q R S T V Z A B C D E F G H I L M N O P Q R S T U Z A B C D E F G H I L M N O P Q R S T U V