lezione sulla crittografia nel minor numero di righe possibile


01/02/2008
Riporto qui di seguito la trascrizione di una conversazione tramite instant messanger con una amica che mi chiedeva una introduzione alla crittografia
Visto che mi pare sicuramente non tecnica né particolarmente rigorosa, ma comunque buona come infarinautra di base sui concetti, ne ho fatto un file html in modo che sia disponibile a tutti


G:lezione sulla crittografia nel minor numero di righe possibile:

L:ok

G:allora... se io devo mandare un messaggio a te ma devo evitare che una eventuale intercettazione permetta ad un terzo di capire un messaggio, mi tocca criptarlo in qualche modo

L:ok

G:tra l'altro, le comunicazioni via internet sono per loro natura intercettabili, perchè passano su sitemi di terze parti in praticamente ogni caso. Per cui non puoi fidarti del "canale", ma devi rendere il messaggio non comprensibile.

G:bene
Allora se io devo mandare un messaggio a te, possiamo metterci d'accordo sull'algoritmo di cifratura

L:ok

G:per esempio posso dirti che ogni lettera è spostata avanti sull'alfabeto di 13 posizioni

L:sì

G:il problema è che se Tizio sa l'algoritmo (la rotazione) e la chiave (il 13) potrebbe intercettare questo:
"Dhrfgb è ha zrffnttvb frtergb"

L:ma?

G:il problema, con questo tipo di cifratura, è che devo dirti 2 cose, in chiaro.
-l'algoritmo e te lo dico una volta per tutte
- la chiave (che posso cambiare ogni volta)

G: se hai
-il messaggio
-l'algoritmo
-la chiave
puoi quindi decriptarlo, no?

G:Comunque, il rot13 è una ciptazione a prova di criceto.
Va bene giusto per non far leggere gli spoiler sui finali dei film...

L:vero

G:bene

G:ora, con questa tecnica possiamo inventarci vari algoritmi sempre più complessi con chiavi sempre più complicate

G:quali sono i veri problemi?
l'algoritmo non è da considerarsi segreto di suo, perchè non possiamo cambiarlo. soprattutto per i messaggi pregressi.
Per cui una tecnica di criptazione che si basa sulla segretezza dell'algoritmo è fallace di suo
quindi l'algoritmo deve basarsi sul fatto che chi intercetta non conosce la chiave

G:ma c'è un problema
grosso

G:che è: come faccio io a dirti la chiave?
cioè come faccio a dirti il 13?
perchè se mi intercettano quella son fregato, no?

L:quindi?

G:quindi potrei criptarti la chiave
ma sposterei il problema senza risolverlo

G:perchè dovrei dirti la chiave per decriptare la chiave.

G:oppure potrei passare da un altro canale, per darti la chiave

G:in pratica posso trovare degli escamotage

G:ma il sistema è problematico di suo

G:ci sei fin qui?

L:sì

G:un sistema utilizzato per esempio per i satelliti militari è questo:
genero 1000 chiavi diverse nel modo più causale possibile (e pure questo ha i suoi problemi, ma è un altro argomento)
le scrivo nel satellite e me le segno in locale
poi, quando il satellite è in orbita e devo mandargli un comando, prendo la prima chiave e gli mado il comando.
Lui prende la prima e lo decodifica.
Per il secondo comando uso la secona chiave e così via

L:sono 1000 ma sono cmq note

G:no, non sono note.
Sono dentro al satellite e localmente alla sala di comando.
non le trasmetto mai.
Ovvero non rischio che i nemici, ascoltando le comunicazioni radio tra me e il satellite, capiscano come mandare loro comandi al satellite stesso

ha comunque 2 problemi:
1- al 1000-esimo comando ho finito le chiavi
2- prevede l'inserimento del set di chiavi direttamente nel ricevente

L:ovvio

G:insomma è molto sicuro ma non applicabile a tutto
anzi...

G:tutti quelli che ti ho detto fino ad adesso si chiamano algoritmi di criptazione simmetrica
Li usava Giulio Cesare (usava il rot-N, mi pare)
Si usano tutt'ora per un gran numero di applicazioni

G:In più questi algoritmi hanno solitamente una forte base matematica per cui determinare varie caratteristiche di sicurezza e complessità del messaggio criptato e della chiave

L:esistono altri metodi?

G:Certo. Esistono gli algoritmi a chiave a-simmetrica.

G:gli algoritmi a chiave a-simmetrica (altrimenti noti come algoritmi a chiabe pubblica-privata) non hanno una forte caratterizzazione matematica, e funzionano così:

G:prediamo una chiave a caso, diciamo un numero: 6990
prendiamo la sua codifica binaria: 1101101001110

L:ok

G:speziamo la chiave in due (non a caso, l'algoritmo determina bene i passaggi precedenti per generare il numero e spezzare la chiave, ma qui lo faccio a caso che se no è un casino)

G:per es:
11011
e
01001110

G:chiamo
chiavepubblica = 11011
chiaveprivata = 01001110

G:ok?

L:sì

G:a questo punto applico l'algoritmo di criptazione utilizzando una delle sue due mezze chiavi

G:orbene, qui c'è la parte di black magic:
la cifratura a chiave asimmetrica prevede che esista uno e un solo algoritmo (tra l'altro noto, conoscendo quello di criptazione) che permetta di decifrare il messaggio
utilizzando che cosa?
Utilizzando l'alto pezzo della chiave!
(ovvero non quello che ho usato per criptare!)

L:wow

G:a questo punto la cosa si fa divertente, perchè lo posso utilizzare così:

diciamo che IO voglio mandare un messaggio a TE
IO --> TE

- TU generi (secondo specifiche definite) la chiavona totale es 1101101001110
- chiami
chiavepubblica = 11011
chiaveprivata = 01001110
- mi dici, anzi, dichiari pubblicamente la tua chiave pubblica 11011

L:ok

G:a questo punto, se io voglio mandare un messaggio che solo tu possa leggere non devo fare altro che:

- prendere il mio messaggio
- criptarlo con la TUA chiave pubblica
- mandarelo

G:che cosa ne ho ottenuto?
ho ottenuto che solo tu lo puoi aprire.
Perchè solo tu hai l'altro pezzo di chiave!

G:il vantaggio è che quel pezzo di chiave non me l'hai MAI TRASMESSO

G:chiaro il concetto?

L:chiaro chiaro
ho dovuto rileggere un po'..

G:ok
quali sono i problemi di questo approccio?

G:i problemi sono che
1- questi algoritmi sono onerosi (come calcoli e quindi tempo) da applicare in cifratura
2- Il messaggio che ne risulta è solitamente più lungo dell'originale
3- In più un attacco a forza bruta (le provo tutte) è più facile (nel caso facile = veloce) rispetto a un messaggio cifrato con chiave simmetrica e algoritmo "tosto"

L:capito

G:il terzo problema si risolve semplicemente allungando la lunghezza della chiave
questo purtroppo aggrava il primo problema

G:per cui una buona soluzione di solito è:

uso la criptazione a-simmetrica per cifrare una chiave che ti trasmetto
e poi usiamo quella chiave per scambiarci il messaggio vero e proprio, criptato in modo simmetrico.

G:ok?

L:ok

G:bene.
ora mettiamoci la cigliegina sulla torta:

cosa succede se io cripto un messaggio con la MIA chiave privata e te lo mando?
Tieni presente che la mia chiave pubblica è nota a tutti, eh..

G:non ci arrivi?
beh, non è così ovvio, di primo acchito.

G: succede che tutti possono leggere il mio messaggio, perchè tutti possono decriptarlo, perchè tutti conoscono la mia chiave pubblica.
Concordi?

L:sì

G:ebbene.... ma chi è che può aver scritto un messaggio che diventa leggibile solo decriptandolo con la mia chiave pubblica?


G:riassumo
prendo un numero a caso e spezzandolo in 2 ne chiamo una parte "pubblica" e una parte "privata"
la privata me la tengo stretta la pubblica la dico a tutti
Se cripto con una delle due parti posso decriptare solo con l'altra

G:Quindi
Se tu cripti con la mia pubblica solo io che conosco la mia privata posso leggere == Criptazione

G:Ma se io cripto con la mia privata e quindi tutti la possono aprire con la mia pubblica, che cos'è che ho fatto?

L:mmm

G:ho fatto una cosa che solo io posso fare, perche solo io conosco la mia chiave privata

L:e a cosa serve?

G:in pratica: l'ho FIRMATO!

G:ok
adesso prendo il mio messaggio originale "Questo è un messaggio segreto"

lo cripto con la mia chiave privata

prendo il risultato e lo cripto con la tua pubblica

cosa ho ottenuto?

L:un ibrido?

G:no! ho ottenuto un messaggio che solo tu puoi aprire e che una volta che l'hai aperto contiene un messaggio che solo io posso aver mandato!

L:ok

G:ok

G:attenta ancora un attimo per un'ultima cosa: la firma ha una implicazione importante

G:se io mando a te un messaggio solo firmato questo può certamente essere intercettato e aperto da qualcuno
la cosa peggiore che può succedere a un messaggio firmato è che ne sia cambiato il contenuto prima che esso arrivi adestinazione.

Ma se uso questo metodo, anche se qualcuno legge il messaggio criptato unicamente con la mia chiave privata, non potrà mai cambiarlo e mandartelo con la variazione

L:perchè?

G:perchè? perchè anche se lo legge e lo modifica, poi non ha più la possibilità di richiuderlo, firmato.
Perchè la chiave privata è la mia e lui non ce l'ha

G:tu che ricevi il messaggio modificato ne ne accorgi subito, semplicemente perchè non si apre con la mia chiave pubblica!

G:quindi facendo la doppia criptazione ti assicuri:

- l'identità del mittente
- l'identità del ricevente
- la consistenza (non modifica) del messaggio
- la criptazione del tutto

L:geniale e brillante