23.3 Crittografia

La crittografia, dal greco krvptòz (kryptòs = segreto) e gr`afein (gràfein = scrivere) è la scienza che studia i metodi per “cammuffare” le informazioni in maniera tale che chi eventualmente le legge non sia in grado di risalire all’informazione originale (messaggio in chiaro o plain text) se non è a conoscenza della chiave di decodifica del messagio cifrato (encrypted text). La chiave è appunto il valore di un parametro che fornito al meccanismo di cifratura considrato, è in grado di permettere la decodifica corretta dell’informazione. Questi metodi garantiscono la protezione delle informazioni trasmesse da un mittente ad un destinatario attraverso un canale insicuro, al quale chiunque può accedere, in particolare forniscono un certo livello di riservatezza (o privacy) alle informazioni trasmesse (v. fig. 23.1).


pict
Figura 23.1: Schematizzazione dell’uso dei sistemi crittografici.

Uno dei primi metodi crittografici era utilizzato nell’antica Roma da Cesare, che inviava messaggi nei quali le singole lettere che componevano le parole erano sostituite con altre lettere dell’alfabeto secondo una certa regola: fissato un valore numerico X, conosciuto soltanto dal mittente e dal destinatario, ogni lettera del messaggio originale veniva sostituita con la lettera che si trovava X posizioni più avanti nell’alfabeto. Ad esempio, considerando l’alfabeto inglese attuale, fissato X = 3, applicando tale codifica al messaggio “Ciao Giulio” si otterrebbe “Fldr Jltolr”, infatti le lettere ‘a’ diventano ‘d’, le lettere ‘b’, diventano ‘e’, ecc.

Lo studio dei metodi crittografici deriva dal calcolo matematico e si basa sull’elevata complessità delle operazioni di calcolo relativo alle funzioni inverse a quelle di cifratura, nel caso in cui non si conosca la chiave per decifrare il messaggio.

Creare un meccanismo di cifratura sicuro non è banale. Nel caso di crittografia si ipotizza che il nemico sia in grado non solo di accedere al canale attraverso il quale avviene la comunicazione, ma sia anche a conoscenza dell’algoritmo di cifratura (principio di Kerchoffs1). Infatti, la robustezza dei metodi crittografici, non risiede nel meccanismo di cifratura stesso ma nella complessità della decifratura delle informazioni nel caso in cui non si conosca la chiave. Più un algoritmo di cifratura è noto, più viene testato e di conseguenza diviene sempre più affidabile. La sicurezza della cifratura è affidata unicamente alla segretezza della chiave di cifratura.

Nessun metodo di cifratura è assolutamente sicuro, in quanto esiste sempre la possibilità di decifrare il testo cifrato, anche senza conoscere la chiave a priori. Esistono infatti due metodi principali per tentare la decifratura delle informazioni senza conoscere la chiave: l’attacco per forza bruta o per dizionario. L’attacco per forza bruta è il meccanismo con il quale si tenta di decifrare l’informazione provando tutte le possibili chiavi di decifratura, fintantoché non si riesce a trovare quella giusta. È evidente che passando in rassegna tutte le possibili chiavi prima o poi si riesce a decifrare l’informazione: si tratta essenzialmente di stimare quant’è il “prima o poi”. Da un punto di vista computazionale, esistono metodi di cifratura che per provare tutte le possibili chiavi di decifrazione, richiedono, con i sistemi ad oggi esistenti, un tempo massimo dell’ordine di decine di anni (da un punto di vista probabilistico è necessario considerare il fatto che mediamente la decifratura del messaggio avviene dopo aver fatto la metà dei tentativi fra tutte le possibili chiavi, anche se c’è comunque la possibilità che la decifratura dell’informazione avvenga al primo tentativo o comunque dopo pochi tentativi). L’attacco per dizionario è il meccanismo con il quale si tenta di indovinare la chiave considerando i valori più probabili, da cui il termine attacco per dizionario: un dizionario che contiene i valori più probabili utilizzati come chiave. In questo modo si possono effettuare un numero di tentativi di gran lunga inferiore a quelli relativi al totale delle chiavi possibili. Per questo è buona regola utilizzare chiavi che non riconducano facilmente a chi le ha utilizzate. Questo metodo è utilizzato generalmente per la scoperta di password (v. sez. 23.3.5).

È opportuno considerare il fatto che molti degli algoritmi di cifratura sono protetti da brevetti (patent) che ne proibiscono l’uso alle persone diverse dall’autore per un determinato periodo di tempo.

[da completare ...]


  23.3.1 Un po’ di matematica
   23.3.1.1 I moduli
   23.3.1.2 Le funzioni modulari
   23.3.1.3 Le curve ellittiche
  23.3.2 Cifratura a chiave simmetrica
   23.3.2.1 Algoritmi di cifratura
  23.3.3 Cifratura a chiave asimmetrica
   23.3.3.1 Algoritmi di cifratura
  23.3.4 Protocollo Diffie-Hellman
  23.3.5 Funzioni hash
   23.3.5.1 Algoritmi di cifratura
  23.3.6 PKI - Public Key Infrastructure