Vai al contenuto

Crittografia e Decodifica – Parte 2: steganografia, sostituzione e trasposizione, moduli, Codice Cesare

La crittografia non è l’unico modo per trasferire un’informazione con sicurezza. Questo si può fare anche occultando l’esistenza del messaggio, in modo che nessuno possa intercettarlo. Questa tecnica è chiamata “steganografia“.

La steganografia

Un esempio di steganografia si può avere quando Istieo, il tiranno di Mileto, ordinò a un suo servo di rasarsi la testa in modo da scrivere sul suo cranio un messaggio da inviare all’accampamento di Aristagora. Quindi il servo aspettò che gli ricrescessero i capelli, in modo da nascondere l’esistenza di questo messaggio, e si diresse verso il suo destinatario. Una volta arrivato, disse dello stratagemma, così gli rasarono di nuovo la testa e lessero il messaggio.

Un espediente steganografico sopravvissuto nel tempo è quello dell’inchiostro invisibile, che può essere ricavato da materiali di origine organica, come il succo di limone o la linfa di piante, i quali, sottoposti a temperature modestamente alte, tendono ad annerirsi.

La steganografia, però, non è adatto a messaggi troppo lunghi, per questo “perde” contro la crittografia.

Crittografia per trasposizione e sostituzione

Un salto nell’antica Grecia

Gli Spartani e gli Ateniesi usarono per molto tempo una tecnica di cifratura che prevedeva l’uso di strisce di carta e di un bastone, chiamato “scitale“, di un determinato spessore e lunghezza. Il messaggio da cifrare veniva scritto sulla striscia di carta, arrotolata precedentemente intorno la scitale. Quando si srotolava, il risultato era un testo con le lettere originali del messaggio, ma in posizioni diverse. La chiave del messaggio è, in questo caso, lo spessore e la lunghezza della scitale che si è usata per cifrarlo.

Per capire bene le potenzialità di questo metodo, supponiamo di voler trasporre tre lettere: A, B, C.
Le possibili combinazioni sono 6: ABC, ACB, BAC, BCA, CAB, CBA.

Per calcolare in numero di combinazioni di n caratteri, si usa il fattoriale di n (in matematica si raffigura con il punto esclamativo “n!“). Quindi se, ad esempio, voglio calcolare in numero di combinazioni possibili di dieci caratteri, lo faccio con il fattoriale di dieci, che scrivo in questo modo:
10!
e calcolo in questo modo:
10 x 9 x 8 x 7 x 6 x 5 x 4 x 3 x 2 x 1 = 3.628.800 combinazioni

Nonostante numeri così alti, questo metodo ha un punto debole, cioè la chiave (lo spessore e la lunghezza della scitale), perché, a tentativi, e in tempi brevi, si può arrivare al giusto spessore e lunghezza della scitale.

A questo proposito si cercarono metodi che avessero chiavi semplici da ricordare, e algoritmi molto complessi ed efficaci.

Crittografia per sostituzione

In parallelo al tipo di algoritmo precedente, basato sul cifrario a trasposizione, si svilupparono quelli chiamati “a sostituzione”. I primi a usarli furono gli imperatori romani.

Nei cifrari a sostituzione, ogni lettere viene sostituita con un’altra, oppure con un altro qualsiasi simbolo, indipendentemente dal fatto che questo si trovi o meno nel messaggio. Un esempio di questo metodo lo abbiamo già affrontato nel precedente articolo di questa categoria dedicata alla crittografia e decodifica, dove ho sostituito ogni lettera della parola CIAO con un’altra lettera dell’alfabeto. Se non lo hai ancora letto, ti invito a farlo cliccando su questo link: Crittografia e Decodifica – Parte 1: le basi.

Il “Codice Cesare”

Se voglio cifrare la parola CIAO cambiando ogni sua lettera con un’altra, lo posso fare sostituendo ogni lettera di questa parola con quella di due posizioni in avanti dell’alfabeto (quindi chiave +2). Il risultato sarà questa stringa incomprensibile: EKCQ. In realtà posso trasportare ogni lettera fino a un massimo di 26 posizioni, cioè il numero totale delle lettere dell’alfabeto. Questo metodo di cifratura è chiamato “Codice Cesare” o “Codice di Cesare”, visto che è stato uno dei suoi maggiori utilizzatori.

Questo codice è stato uno dei più studiati nell’ambito della crittografia, visto che permette di illustrare i princìpi dell’aritmetica modulare.

Aritmetica modulare

Questo tipo di aritmetica la usiamo praticamente tutti i giorni, senza che ce ne rendiamo conto. Sto parlando, infatti, dell’orologio. Quando qualcuno ci chiede l’orario, e noi gli rispondiamo che sono le ore 16:00, in realtà ci riferiamo alle 04:00 PM, come scriverebbero gli inglesi, cioè alle 04:00 del pomeriggio. Quindi nell’aritmetica modulare, noi associamo il numero 16 dell’orologio al numero 4, o il numero 20 al numero 8, il 14 al 2, e così via. Non a caso l’aritmetica modulare può essere chiamata anche “aritmetica dell’orologio”.

La utilizziamo anche per calcolare i gradi degli angoli. Se, ad esempio, diciamo che un angolo misura 390 gradi, è come dire che l’angolo misura 30 gradi. Questo numero deriva dal risultato della differenza tra 390 e 360 (un giro intero).
390 – 360 = 30
Quindi se un angolo misura 770 gradi, devo sottrarre a questo numero 360, con un risultato di 410 gradi. Siccome 410 è ancora maggiore a 360, ripeto il procedimento, con un risultato uguale a 50.
770 – 360 = 410
410 – 360 = 50

Nell’aritmetica modulare, per dire che 770 è uguale a 50 nel modulo di 360, su utilizza questa scrittura:
770 ≡ 50 (mod 360)
Testualmente significa che 770 equivale a 50 nel modulo 360.
Nel caso dell’orologio posso scrivere quanto segue:
14 ≡ 2 (mod 12)

Calcolare l’equivalente modulare

A cosa coincide un numero negativo, ad esempio il -7, nel modulo 12?
Per ottenere il risultato basta fare questo calcolo:
-7 + 0
“Cosa? Questo non ha senso!!!” sta sicuramente pensando qualcuno. Ed è legittimo pensarlo, ma solo per chi ha dimenticato che stiamo ragionando secondo l’aritmetica modulare. Infatti, nel modulo 12, lo zero è uguale a 12. Infatti, se scrivo i primi 12 numeri (tutti quelli compresi nel modulo 12), il 12 non c’è:
0 1 2 3 4 5 6 7 8 9 10 11 (primi 12 numeri)
Quindi, una volta raggiunto il numero 11, si ritorna al numero 0, cosicché 0 è uguale a 12, 1 = 13, 2 = 14, e così via.
Il calcolo sopra esposto assume così un senso:
-7 + 0 = -7 + 12 = 5

Ora voglio calcolare 327 mod 19. Il calcolo che devo seguire è il seguente:
327 / 19 = 17 resto 4
Il resto è il risultato del modulo: 327 ≡ 4 (mod 19).
Per fare lo stesso calcolo con la calcolatrice basta fare 327 / 19 = 17,2105263; Poi 19 x 17 = 323; Infine 327 – 323 = 4.

Moduli e cifrario di Cesare

Molti di voi si staranno sicuramente chiedendo a cosa serve sapere queste cose quando si ha a che fare con il cifrario di Cesare. La risposta si trova qui (figura 1):

figura 1

Nel primo rigo troviamo la corrispondenza numerica dei caratteri dell’alfabeto, l’ultimo rigo è lo slittamento dell’alfabeto, in questo caso, di tre caratteri in avanti. Cosicché la lettera A diventi D, la B diventi E, C = F, e così via.

Funzione di cifratura del Codice Cesare

In questo modo ho raffigurato il cifrario di Cesare in modo da definire una funzione:
C(x) = x + k (mod n)
dove la x è il carattere in chiaro, C(x) la cifratura di x, k la chiave (key), e n, in questo caso, in numero di caratteri dell’alfabeto.

Trovata la funzione del cifrario, possiamo ora sostituire k con la chiave e n con il modulo della figura 1:
C(x) = x + 3 (mod 26)

Proviamo ora a cifrare, con questa funzione, la parola AZIO:
A -> C(0) = (posizione del carattere) 0 (chiave) + 3 (mod 26) = 3 (mod 26) = D
Z -> C(25) = 25 + 3 (mod 26) = 28 (mod 26) = (28 – 26) 2 (mod 26) = C
I -> C(8) = 8 + 3 (mod 26) = 11 (mod 26) = L
O -> C(14) = 14 + 3 (mod 26) = 17 (mod 26) = R

Funzione di decifratura del Codice Cesare

La funzione per decifrare un messaggio cifrato in questa maniera è questa:
C^(-1)(x) = x – k (mod n)
dove C^(-1)(x) (C elevato alla -1 di x) è il contrario di C(x), quindi la decifratura di x.

Proviamo quindi a decifrare il messaggio DCLR, appena ottenuto, con questa funzione:
C^(-1)(x) = x – 3 (mod n)

D -> C^(-1)(3) = 3 – 3 (mod 26) = 0 (mod 26) = A
C -> C^(-1)(2) = 2 – 3 (mod 26) = -1 (mod 26) = 25 (mod 26) = Z
L -> C^(-1)(11) = 11 – 3 (mod 26) = 8 (mod 26) = I
R -> C^(-1)(17) = 17 – 3 (mod 26) = 14 (mod 26) = O

Il risultato è, come volevasi dimostrare, AZIO.

Non è finita

Esiste una formula che generalizza il codice Cesare, che introduco qui di seguito:
C(a, b)(x) = ax + b (mod n )
dove la coppia (a, b) è la chiave.
Inoltre questa funzione vuole che l’MCD (massimo comune divisore) tra a e n sia uguale a 1.

Nel prossimo articolo dedicato a questa categoria, approfondiremo la suddetta funzione.

<—– LE BASI /-/-/-/ IL CIFRARIO AFFINE —–>

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *