LA CRITTOGRAFIA: NASCONDERE IL MESSAGGIO DIETRO UN CODICE

 

SIGNIFICATO E SPECIE

Significato:

La crittografia tratta delle "scritture segrete" (significato etimologico della parola) ovvero i metodi per rendere un messaggio "offuscato" in modo da non essere comprensibile a persone non autorizzate.

La parola crittografia deriva dalla parola greca kryptós che significa nascosto e dalla parola greca gráphein che significa scrivere.

La crittografia è la controparte della crittanalisi ed assieme formano la crittologia.

 

Sistemi alfabetici:

- MONOALFABETICI (CESAREO)

I cifrari monoalfabetici sono cifrari di sostituzione: ogni carattere del testo in chiaro è sostituito con un altro carattere (o numero) secondo una tabella prestabilita, ottenendo il testo cifrato. Nella crittografia contemporanea (informatica) si sostituiscono blocchi di bit invece di caratteri, ma il principio è sempre quello della sostituzione.

I più antichi codici di questo tipo sono il codice Atbash e il codice di Cesare.

Questo tipo di cifra è sicura solo per messaggi molto corti; una semplice crittanalisi statistica basata sulle caratteristiche statistiche delle lingue è in genere sufficiente per forzare il testo.

 

- POLIALFABETICI (VIGENERE)

I cifrari polialfabetici si differenziano dai monoalfabetici in quanto un dato carattere del testo chiaro (p.es. la A) non viene cifrato sempre con lo stesso carattere, ma con caratteri diversi in base ad una qualche regola, in genere legata ad una parola segreta da concordare.

In questo modo la sicurezza del codice dovrebbe aumentare in modo significativo; non è infatti più così semplice individuare le lettere del messaggio in base alla loro frequenza caratteristica in ogni lingua. Così per esempio la lettera E molto frequente in tutte le lingue non potrà più essere individuata grazie alla sua frequenza molto elevata.

Lo scrittore Robert Graves attribuisce all'imperatore Augusto un primo codice polialfabetico che precorre la tavola di Vigenere.

Uno dei primi esempi documentati di questo tipo di cifra è il famoso disco cifrante di L.B.Alberti; nei secoli scorsi fu molto usata la tavola di Vigenere, un metodo in verità molto più debole di quello dell'Alberti.

Pur essendo mediamente più sicuri dei monoalfabetici anche questi cifrari sono facilmente attaccabili purchè si disponga di un testo cifrato sufficientemente lungo. Storicamente è famoso il metodo Kasiski che permette di decifrare abbastanza facilmente la tavola di Vigenere.

Rientra tra i cifrari polialfabetici il codice di Vernam che è un Vigenere a chiave lunga come il testo e che secondo Shannon è il codice sicuro per eccellenza.

 

Crittoanalisi:

La crittanalisi tratta dello studio e la comprensione dei testi in qualche modo occultati, sia deliberatamente che per perdita del metodo di decodifica, da questo punto di vista è crittanalisi anche la decifrazione delle lingue morte.

La crittanalisi è la controparte della crittografia ed assieme formano la crittologia.

Alcune tecniche di crittanalisi sono l'analisi delle frequenze, la crittanalisi lineare e la crittanalisi differenziale.

 

STORIA

La crittografia nella I guerra mondiale:

La I guerra mondiale è la prima grande guerra dopo l'invenzione del telefono e della radio; questi mezzi di comunicazione se da una parte consentono una velocità di trasmissione dei messaggi praticamente istantanea, dall'altra sono irrimediabilmente esposti all'intercettazione da parte del nemico, e questo vale soprattutto per le comunicazioni radio. Catturare il corriere che recava un messaggio importante era impresa difficile e occasionale, intercettare una trasmissione radio, una volta installata una stazione di intercettazione è un gioco da ragazzi.

I primi a rendersi conto di questa nuova situazione furono i Francesi che allo scoppio della guerra disponevano già di un ben organizzato ed efficiente ufficio cifra presso il gran quartier generale dell'esercito. E sin dall'ottobre 1914 i crittanalisti francesi guidati dal Col. Cartier e dal Cap.Olivari erano in grado di decrittare i messaggi radio tedeschi.

Altrettanto ben preparati gli Austriaci: già nell'agosto 1914 i crittanalisti asburgici riuscivano a decrittare i radiomessaggi russi che per la verità erano solo in parte cifrati; anche quando i russi cominciarono a cifrare i loro messaggi radio il cap. Pokorny riuscì nel giro di pochi giorni a decrittarli nuovamente.

Negli altri paesi veri e propri uffici cifra furono organizzati solo dopo l'entrata in guerra.

Assolutamente impreparati erano soprattutto i Russi che all'inizio della guerra non si preoccupavano neanche di cifrare i loro messaggi radio.

Capo dell'ufficio crittologico della Marina Britannica era Sir Alfred Ewing che organizzò la cosiddetta Room 40 (dal numero della sua stanza negli uffici dell'ammiragliato) dove si decrittavano migliaia di radiomessaggi della marina tedesca. Il più noto di questi messaggi fu il "telegramma Zimmermann" con il quale i Tedeschi offrivano un'alleanza ai Messicani in chiave anti-USA. Letto al Congresso degli Stati Uniti questo messaggio fu uno dei fattori che spinsero gli USA a entrare in guerra nel 1917.

Negli USA non esistendo un Ufficio Cifra federale fu promosso a tale rango il reparto crittologico dei laboratori Riverbanks di Chicago una fondazione privata di ricerca nella quale lavorava anche William Friedmann destinato a divenire il massimo crittologo e crittanalista USA.

Del tutto impreparati in campo crittologico erano gli Italiani che dovettero in un primo tempo appoggiarsi all'ufficio cifra francese; solo in un secondo tempo fu costituito un ufficio cifra autonomo sotto la guida di Luigi Sacco.

In definitiva fu proprio la Grande Guerra a far scoprire a molti Stati l'importanza della Crittografia, il cui ruolo diventerà assolutamente fondamentale nella II guerra mondiale.

 

La crittografia nella II guerra mondiale:

Forse in nessun altra guerra come nella II guerra mondiale la Crittografia ha svolto un ruolo di primo piano.

Gli storici potranno discutere a lungo su quanto sia stata importante per la vittora finale la superiorità alleata in questo campo; non c'è comunque dubbio che questa superiorità sia stata schiacciante fin dai primi anni di guerra.

Il caso più noto è certo quello della macchina Enigma, usata dai tedeschi e considerata a torto inattaccabile; solo molti anni dopo la fine della guerra si seppe che in effetti già nel 1932, prima ancora che Hitler arrivasse al potere, l'ufficio cifra polacco aveva trovato il modo di forzare l'Enigma. E durante la guerra gli inglesi del progetto ULTRA continuarono a forzare sistematicamente i messaggi cifrati con l'Enigma e dal 1941 anche quelli cifrati con la più sofisticata macchina Lorenz.

 

 

ESEMPIO DI CRITTOGRAFIA E CRITTOANALISI IN VB

 

CIFRARIO DI CESARE

Storia e spiegazione del cifrario:

- STORIA

Il cifrario di Cesare prende il nome da Giulio Cesare, che lo utilizzava con una chiave di 3 spostamenti dell’alfabeto. Al tempo era sicuro, perché i nemici spesso non erano in grado di leggere nemmeno un testo in chiaro, figuriamoci uno cifrato; inoltre, non esistevano metodi di crittoanalisi in grado di rompere una simile cifra. Conosciamo altri che usarono questo cifrario prima di Cesare, dunque non fu certamente inventato da lui. Dalla scoperta dell'analisi delle frequenze da parte degli Arabi attorno all'anno 1000, tutti i cifrari di questo tipo sono diventati rompibili in modo facile, spesso banale, infatti negli ultimi 1000 anni nessuno di questi cifrari è più adatto per comunicazioni sicure. Svetonio nella Vita dei dodici Cesari, un'opera del II secolo d.C., racconta che Giulio Cesare usava per le sue corrispondenze riservate un codice di sostituzione molto semplice, nel quale ogni lettera del testo veniva sostituita dalla lettera che la segue di tre posti nell'alfabeto.

 

-SPIEGAZIONE DEL CIFRARIO

Il cifrario di Cesare è il più antico algoritmo crittografico di cui si abbia traccia storica. È un cifrario a sostituzione monoalfabetica in cui ogni lettera del testo in chiaro è sostituita nel testo cifrato dalla lettera che si trova un certo numero di posizioni dopo nell'alfabeto. In particolare, Cesare utilizzava uno spostamento di 3 posizioni (la chiave era dunque "3"), secondo il seguente schema:

 

Testo in chiaro     a b c d e f g h i l m n o p q r s t u v z
Testo cifrato       D E F G H I L M N O P Q R S T U V Z A B C
 

Per cifrare un messaggio, basta prendere ogni lettera del testo in chiaro e sostituirla con la corrispondente lettera della riga "testo cifrato". Per decifrare, viceversa. Ecco un semplice esempio:

 

Testo in chiaro: attaccare cartegine al tramonto
Testo crittato:  dwwdffduh fduwhjlqh do wudprqwr
 

Cifrare (e decifrare) il testo più volte non migliora la sicurezza, in quanto una rotazione di A posti seguita da una di B posti equivale ad una di A+B. Matematicamente parlando, la cifratura con le varie chiavi forma un gruppo.

 

Il programma per cifrare:

- INTERFACCIA

Di seguito è riportata linterfaccia grafica del cifrario di Cesare, è spiegato inoltre il significato dei pulsanti e dei form.

 

- CODICE

Di seguito è riportato il codice in Visual Basic usato per il cifrario di Cesare con a lato la spiegazione dello stesso.

 

 

 

Questa prima parte è la funzione di cifratura: vi è un ciclo for che prende una alla volta tutte le lettere che formano il testo in chiaro grazie alla funzione Mid, di seguito vi è un controllo per le lettere che dopo lo sfasamento escono dall’alfabeto (come numero Ascii), se questo non avviene vengono cifrate normalmente:

1)      trasformate in codice ascii

2)      sommate allo sfasamento

3)      ritrasformate in carattere

 

La subroutine accanto è quella eseguita alla pressione del tasto, la prima parte (ciclo do while) serve per portare lo sfasamento sempre sotto il 26, questo perché uno sfasamento maggiore non avrebbe senso.

Dopo il ciclo vi è il richiamo alla funzione di cifratura con indicati da dove prendere il testo e lo sfasamento.

Infine l’ultima parte è la creazione dell’alfabeto sfasato posto in fondo all’interfaccia.

 

 

Il programma per decifrare:

- INTERFACCIA

 

- CODICE

Il programma opera un attacco al messaggio cifrato del tipo Brute Force (forza bruta): consiste nell'effettuazione di una ricerca esaustiva della chiave di decifrazione.

Questo tipo di attacco è possibile solo oggi, grazie ai computer: sfruttando le loro caratteristiche di velocità nell'effettuazione di operazioni quali la composizione di stringhe alfanumeriche e la velocità di test dei risultati, è possibile provare milioni di combinazioni in qualche minuto e con macchine potenti ed ancora meglio con macchine specializzate anche in frazioni di secondo.

Naturalmente il cifrario di Cesare ha solo 25 combinazioni possibili oltre il messaggio cifrato, questo ha permesso di inserire in un solo form tutte e 25 le possibili soluzioni del messaggio cifrato.

La prima parte si riferisce al pulsante per decifrare il messaggio: il programma decifra ogni singola lettera per tutti gli sfasamenti possibili (25) con un procedimento analogo alla decifrazione:

1)     trasforma la lettera in codice Ascii

2)     somma uno sfasamento

3)     ritrasforma i numeri in carattere

questo processo lo esegue per tutte le lettere che compongono il messaggio e produce 25 nuovi messaggi che vengono messi nei 25 textbox del frame solo 1 su 25 sarà il messaggio originale.

La funzione che è possibile attivare o meno evidenzia tutti i messaggi codificati che presentano al loro interno le lettere J K X Y W, questi messaggi infatti saranno sicuramente sbagliati se il messaggio originale è stato scritto con l’alfabeto non completo (21 lettere).

La seconda parte è il pulsante che cancella semplicemente tutto il testo inserito nelle textbox del form.

 

CIFRARIO DI VIGENèRE

Storia e spiegazione del cifrario:

- STORIA

Il cifrario di Vigenère è il più semplice dei cifrari polialfabetici; fu pubblicato nel 1586 in un trattato di Blaise de Vigenère; ritenuto per secoli un cifrario inattaccabile, ha goduto di una fama dovuta soprattutto alla sua semplicità e in buona parte immeritata essendo molto più debole di altri codici polialfabetici precedenti quali il disco dell'Alberti, o le cifre del Bellaso; una fama che è durata fino alla I guerra mondiale molti anni dopo la scoperta del primo metodo di crittanalisi: il metodo Kasiski del 1863.

 

- SPIEGAZIONE DEL CIFRARIO

Il metodo si può considerare una generalizzazione del cifrario di Cesare; invece di spostare sempre dello stesso numero di posti la lettera da cifrare, questa viene spostata di un numero di posti variabile, determinato in base ad una parola chiave, da concordarsi tra mittente e destinatario, e da scriversi sotto il messaggio, carattere per carattere; la chiave era detta anche verme, per il motivo che, essendo in genere molto più corta del messaggio, deve essere ripetuta molte volte sotto questo, come nel seguente esempio:

 

Testo chiaro  - ARRIVANOIRINFORZI
Verme         - VERMEVERMEVERMEVE
Testo cifrato – VVIUZVRFUVDRWAVUM
 

Il testo cifrato si ottiene spostando la lettera chiara di un numero fisso di caratteri, pari al numero ordinale della lettera corrispondente del verme. Di fatto si esegue una somma aritmetica tra l'ordinale del chiaro (A = 0, B = 1, C = 2 ...) e quello del verme; se si supera l'ultima lettera, la Z, si ricomincia dalla A, secondo la logica delle aritmetiche finite.

Il vantaggio rispetto ai cifrari monoalfabetici è evidente: la singola lettera del testo chiaro non è sempre cifrata con la stessa lettera; e questo rende più difficile la crittanalisi statistica del testo cifrato.

 

- La tavola di Vigenère

Per semplificare la cifratura, il Vigenère propose l'uso della seguente tavola quadrata, composta da alfabeti ordinati spostati. Volendo ad esempio cifrare la prima R di ARRIVANO si individuerà la colonna della R, quindi si scenderà lungo la colonna fino alla riga corrispondente della corrispondente lettera del verme (qui E); la lettera trovata all'incrocio è la lettera cifrata (qui V); la seconda R invece sarà cifrata con la lettera trovata sulla riga della R di VERME, e cioé con la I

 

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
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 A
C D E F G H I J K L M N O P Q R S T U V W X Y Z A B
D 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
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 D
F G H I J K L M N O P Q R S T U V W X Y Z A B C D E
G H I J K L M N O P Q R S T U V W X Y Z A B C D E F
H I J K L M N O P Q R S T U V W X Y Z A B C D E F G
I J K L M N O P Q R S T U V W X Y Z A B C D E F G H
J K L M N O P Q R S T U V W X Y Z A B C D E F G H I
K L M N O P Q R S T U V W X Y Z A B C D E F G H I J
L M N O P Q R S T U V W X Y Z A B C D E F G H I J K
M N O P Q R S T U V W X Y Z A B C D E F G H I J K L
N O P Q R S T U V W X Y Z A B C D E F G H I J K L M
O P Q R S T U V W X Y Z A B C D E F G H I J K L M N
P Q R S T U V W X Y Z A B C D E F G H I J K L M N O
Q R S T U V W X Y Z A B C D E F G H I J K L M N O P
R S T U V W X Y Z A B C D E F G H I J K L M N O P S
S T U V W X Y Z A B C D E F G H I J K L M N O P Q R
T U V W X Y Z A B C D E F G H I J K L M N O P Q R S
U V W X Y Z A B C D E F G H I J K L M N O P Q R S T
V W X Y Z A B C D E F G H I J K L M N O P Q R S T U
W X Y Z A B C D E F G H I J K L M N O P Q R S T U V
X Y Z A B C D E F G H I J K L M N O P Q R S T U V W
Y Z A B C D E F G H I J K L M N O P Q R S T U V W X
Z 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

 

- Come si decifra il messaggio

Chi riceve il messaggio per decifrarlo deve semplicemente usare il metodo inverso (sottrarre invece che sommare); riferendosi all'esempio di sopra si avrà:

 

Testo cifrato - VVIUZVRFUVDRWAVUM
Verme         - VERMEVERMEVERMEVE
Testo chiaro  - ARRIVANOIRINFORZI
 

Usando la tavola quadrata si potrà decifrare la seconda V ricercandola nella riga della corrispondente lettera del verme, la E; la colonna dove si trova la V ha al primo posto in alto la lettera chiara, la R.

 

Il programma per cifrare:

- INTERFACCIA

 

- CODICE

Questa prima parte del codice si riferisce ai 2 pulsanti presenti nel form, il primo è quello della cifratura: all’inizio viene eseguito un controllo sul testo scritto nelle textbox del messaggio da cifrare e in quella della chiave, l’eventuale testo in maiuscolo viene trasformato in minuscolo e vengono eliminati gli spazi fra le parole, questo è necessario per una corretta esecuzione del programma.

Successivamente vi è un ciclo do while che ha lo scopo di ripetere la chiave inserita finche diventa lunga quanto il messaggio, l’ultima riga di codice esegue il richiamo alla funzione di cifratura.

Il secondo pulsante è quello che semplicemente fa apparire a lato del form la tavola di Vigenère.

Questa seconda parte del codice si riferisce alla funzione di cifratura e alla visualizzazione della lunghezza del messaggio e della chiave.

La funzione di cifratura è strutturata nel seguente modo:

1)     un ciclo for che prende in esame a 1 a 1 le lettere che compongono il messaggio e la chiave

2)     le lettere vengono trasformate in codice ascii

3)     viene effettuata una somma tra le due lettere

4)     avviene una verifica del numero (if)

5)     il numero viene ritrasformato in lettera che viene aggiunta al testo

L’ultima parte del codice conta ad ogni cambiamento della chiave il numero di lettere presenti al suo interno e quando il numero di lettere della chiave è uguale al numero di lettere del messaggio lo sfondo della textbox si colora.

 

Il programma per decifrare:

- INTERFACCIA

 

- CODICE

Questa parte di codice si riferisce al comando per decifrare: all’inizio vi è un controllo come nel programma per cifrare sulle maiuscole e sugli spazi, poi vi è ancora il loop per creare la chiave lunga come il testo cifrato.

Questa seconda parte del codice è riferita alla funzione, richiamata dal pulsante, per decifrare il testo, essa è molto simile a quella per cifrarlo la differenza sta nel fatto che invece di sommare le due lettere avviene una sottrazione, vi è sempre un controllo del numero in uscita dalla sottrazione e una trasformazione del numero in carattere.

Nella seconda parte del codice è quella della visualizzazione del numero di lettere che compongono il messaggio da cifrare (vedere la parte della cifratura per la spiegazione del codice).

 

CODICE ASCII

Introduzione:

Avendo visto che la base su cui si fondano i precedenti programmi è la trasformazione delle lettere in numero e quindi dell’uso del codice ASCII per sommare o sottrarre tra loro le lettere mi è sembrato utile inserire qualche informazione su questo codice.

 

Storia e spiegazione del codice ascii:
Lo schema di codifica ASCII (American Standard Code for Information Interchange), ideato nel 1965 da Robert W. Bemer e approvato nel 1968 dall'ANSI, comprende 256 combinazioni, divise in due sottogruppi di 128 ciascuno, detti rispettivamente "standard" ed "esteso". Essi contengono tutte le possibili combinazioni di 7 e 8 bit rispettivamente (8 bit formano 1 byte): il set ASCII standard usa 7 bit per codice e può rappresentare 128 caratteri, numerati da 0 a 127 (nel sistema numerico esadecimale, da 00 a 7F); l'ASCII esteso usa 8 bit per codice e può rappresentare a sua volta 128 caratteri, numerati da 128 a 255 (nel sistema numerico esadecimale, da 80 a FF).
Nel set ASCII standard, i primi 32 codici sono assegnati a caratteri di controllo della comunicazione o della stampante e vengono usati nella trasmissione dati tra computer, o tra computer e stampante. I restanti 96 codici sono assegnati ai segni d'interpunzione, alle cifre da 0 a 9 e alle lettere dell'alfabeto latino, maiuscole e minuscole.

 

Il codice ascii standard:

 

Decimale 

Esadecimale

Abbreviazione

Significato

0

0x00

NUL

Nullo

2

0x02

STX

Inizio del testo

3

0x03

ETX

Fine del testo

8

0x08

BS

Backspace

9

0x09

HT

Tabulazione orizzontale

10

0x0a

LF

Alimentazione linea

13

0x0d

CR

Ritorno carrello

 Dal 14

 al 31

0x0e - 0x1f

Controllo

32

0x20

 

Spazio

33

0x21

!

 

34

0x22

"

 

35

0x23

#

 

36

0x24

$

 

37

0x25

%

 

38

0x25

&

 

39

0x27

'

Apostrofo

40

0x28

(

 

41

0x29

)

 

42

0x2a

*

Asterisco

43

0x2b

+

 

44

0x2b

,

Virgola

45

0x2d

-

 

46

0x2e

.

Punto

47

0x2f

/

Barra inclinata

48

0x30

0

Inizio numeri

49

0x31

1

 

50

0x32

2

 

51

0x33

3

 

52

0x34

4

 

53

0x35

5

 

54

0x36

6

 

55

0x37

7

 

56

0x38

8

 

57

0x39

9

 

58

0x3a

:

 

59

0x3b

;

 

60

0x3c

 

61

0x3d

=

 

62

0x3e

 

63

0x3f

?

 

64

0x40

@

 

65

0x41

A

Inizio maiuscole

66

0x42

B

 

67

0x43

C

 

68

0x44

D

 

69

0x45

E

 

70

0x46

F

 

71

0x47

G

 

72

0x48

H

 

73

0x49

I

 

74

0x4a

J

 

75

0x4b

K

 

76

0x4c

L

 

77

0x4d

M

 

78

0x4e

N

 

79

0x4f

O

 

80

0x50

P

 

81

0x51

Q

 

82

0x52

R

 

83

0x53

S

 

84

0x54

T

 

85

0x55

U

 

86

0x56

V

 

87

0x57

W

 

88

0x58

X

 

89

0x59

Y

 

90

0x5a

Z

 

91

0x5b

[

 

92

0x5c

\

Barra inclinata rovesciata

93

0x5d

]

 

94

0x5e

^

 

95

0x5f

_

Carattere di sottolineatura

96

0x60

`

Apostrofo rovesciato

97

0x61

a

Inizio minuscole

98

0x62

b

 

99

0x63

c

 

100

0x64

d

 

101

0x65

e

 

102

0x66

f

 

103

0x67

g

 

104

0x68

h

 

105

0x69

i

 

106

0x6a

j

 

107

0x6b

k

 

108

0x6c

l

 

109

0x6d

m

 

110

0x6e

n

 

111

0x6f

o

 

112

0x70

p

 

113

0x71

q

 

114

0x72

r

 

115

0x73

s

 

116

0x74

t

 

117

0x75

u

 

118

0x76

v

 

119

0x77

w

 

120

0x78

x

 

121

0x79

y

 

122

0x7a

z

 

123

0x7b

{

 

124

0x7c

|

Carattere di concatenazione

125

0x7d

}

 

126

0x7e

~

Tilde

127

0x7f

 

Cancella