Algoritmi di Crittografia Simmetrici

Introduzione

Gli algoritmi di crittografia detti simmetrici hanno la caratteristica di avere una sola chiave per cifrare e per decifrare un messaggio. Questa chiave è tipicamente una password o una passphrase (una frase). La stessa passphrase viene impiegata per cifrare il messaggio e per decifrarlo. Questi sistemi crittografici sono detti Cifrari a blocchi, poiché cifrano e decifrano una porzione di dati a lunghezza fissa.

Matematicamente, la funzione di crittografia C e quella di decifrazione D sono tali che, dato un messaggio m si ha:
M' = C(M)
M = D(M') = D(C(M))
Dove M' è il messaggio cifrato.

La problematica principale di questa categoria di algoritmi consiste nello scambio della chiave: supponendo che Alice e Bob vogliano scambiarsi un messaggio cifrato, Alice cifra il messaggio M producendo il messaggio cifrato M' attraverso un chiave k. Bob riceve il messaggio M', ma è necessario possedere la chiave k. Se le comunicazioni avvengono su un canale non sicuro, ovvero attraverso un mezzo che può essere intercettato facilmente (come internet), Alice non può trasmettere la chiave attraverso quel canale, poiché potrebbe essere intercettata. Si dovrebbe poter disporre di un canale sicuro attraverso il quale scambiare la chiave. Tuttavia, disponendo di un canale sicuro, potrebbe essere impiegato per inviare il messaggio stesso.

Una soluzione a questo problema consiste nel Protocollo di Diffie-Hellman, che permette a due parti di concordare una chiave simmetrica attraverso uno scambio di messaggi senza che un attaccante possa, analizzando gli stessi, ricostruirla.

Sono stati sviluppati molti algoritmi simmetrici, tra cui i più famosi sono: il DES e varianti come il Triple-DES e l'AES.

Il DES e successivamente il Triple-DES [1] sono stati ampiamente utilizzati in passato, tuttavia all'aumentare della potenza di calcolo disponibile hanno sofferto di attacchi a "forza bruta", in grado di provare tutte le chiavi possibili ed individuare quella giusta in poco tempo. Per questo motivo, il NIST ha sviluppato e pubblicato nel novembre 2001 il successore del DES, chiamato AES (Advanced Encryption Standard), sul documento FIPS PUB 197 [2]. Le chiavi dell'AES sono di 128, 192 e 256 bit, valori sufficientemente elevati da allungare i tempi di attacco a forza bruta.

Il Triple-DES è un algoritmo DES dove sono utilizzate tre chiavi invece di una. Le tre chiavi sono generate indipendentemente e sono diverse tra loro. A volte si impiega una versione particolare del Triple-DES, dove due chiavi sono uguali. La versione con tre chiavi diverse è anche indicata con il nome 3TDES, mentre quella con due chiavi uguali è indicata con 2TDES.

Modalità di funzionamento

Gli algoritmi detti cifrari a blocchi, come il DES, il TDES e l'AES, effettuano le operazioni di cifratura e decifratura su un certo blocco di dati. Poiché un messaggio è composto generalmente da più di un blocco di dati, sono state sviluppate diverse modalità con cui applicare la cifratura. Il NIST ha indicato nel documento FIPS-81 [3] alcune modalità di funzionamento di questi algoritmi.

ECB - Electronic CodeBook

La modalità di funzionamento ECB è la più semplice e la più insicura. In questa modalità il messaggio è suddiviso in n blocchi, ed ogni blocco è cifrato in modo indipendente dagli altri.

Poiché ad ogni blocco di testo in chiaro corrisponde lo stesso blocco cifrato (a parità di chiave), questa modalità è vulnerabile ad analisi crittografiche dei testi cifrati, e pertanto è sconsigliabile l'impiego in crittografia. Viene mostrata solo per ragioni di completezza.

ecb.png

CBC - Cipher Block Chaining

In questa modalità, il blocco di dati da cifrare è ottenuto dal blocco di dati in chiaro combinato tramite una operazione di XOR con il blocco cifrato precedente. In questo modo i blocchi da cifrare dipendono gli uni dagli altri, e rendono maggiormente difficile l'analisi. Nella decifratura si decifra un blocco di testo cifrato, e il risultato viene combinato attraverso una operazione di xor con il blocco cifrato precedente.

Per il primo blocco viene impiegato un vettore di inizializzazione (IV - Initializzation Vector), generato casualmente e che può essere trasmesso.

Sia M0 il primo blocco in chiaro e M'0 il primo blocco cifrato: per il primo blocco si procede nel modo seguente.
Cifratura: M'0 = C(M0 xor IV)
Decifratura: M0 = D(M'0) xor IV

Dato Mi l'i-esimo blocco in chiaro e M'i l'i-esimo blocco cifrato si ha:
Cifratura: M'i = C(Mi xor M'i-1)
Decifratura: Mi = D(M'i) xor M'i-1

cbc-c.png
cbc-d.png

Il sistema funziona, perché si ha:
Mi = D(M'i) xor M'i-1
sostituendo:
Mi = D(C(Mi xor M'i-1)) xor M'i-1
Poiché, per definizione, D(C(M)) = M, allora:
Mi = Mi xor M'i-1 xor M'i-1 = Mi
Infatti dati A e B, si ha A xor B xor B = A.

CFB - Cipher FeedBack

Nella modalità CFB, il blocco dati da cifrare è ottenuto dal blocco di dati cifrati precedente combinato con una operazione di XOR con il blocco di dati in chiaro. Il blocco dati in chiaro viene ottenuto cifrando il blocco cifrato precedente e combinando l'output con il blocco cifrato corrente. L'aspetto interessante di questa modalità consiste nell'impiego del solo algoritmo di cifratura per entrambe le operazioni.

Per il primo blocco viene cifrato il vettore di inizializzazione e il risultato combinato con una operazione di xor con il primo blocco di dati in chiaro. Successivamente viene cifrato il blocco cifrato precedente e il risultato è combinato con il blocco di dati in chiaro. Per l'operazione di decifratura viene effettuata tramite la stessa funzione di cifratura: il blocco di dati in chiaro è infatti ottenuto cifrando il blocco precedente e combinandolo con una operazione di xor con il blocco di dati cifrato.

Cifratura: M'0 = C(IV) xor M0
Decifratura: M0 = C(IV) xor M'0

M0 = C(IV) xor M'0 xor IV = C(IV) xor C(IV) xor M0 = M0

Cifratura: M'i = C(M'i-1) xor Mi
Decifratura: Mi = C(M'i-1) xor M'i

cfb-c.png
cfb-d.png

Dimostrazione:

Mi = C(M'i-1) xor M'i = C(M'i-1) xor C(M'i-1) xor Mi

Output Feedback

Questa modalità è una variante della Cipher FeedBack. In particolare, l'input per la funzione di cifratura è l'output della funzione di cifratura del blocco precedente. L'output viene combinato con l'operazione di xor con il testo in chiaro. In questa modalità le operazioni di cifratura e decifratura sono identiche.

Il primo blocco viene generato in questo modo:
Cifratura: M'0 = C(IV) xor M0
Decifratura: M0 = C(IV) xor M'0

In generale, ponendo O0 = IV, O1 = C(IV) = C(O0) e Oi = C(Oi-1), il blocco i-esimo viene generato così:
Cifratura: M'i = Oi-1 xor Mi
Decifratura: Mi = Oi-1 xor M'i

Dimostrazione:
Mi = Oi-1 xor M'i = Oi-1 xor Oi-1 xor Mi

ofb.png

Sicurezza

Il NIST ha pubblicato, nel documento SP800-57 [4], una valutazione della lunghezza delle chiavi e della sicurezza necessaria per evitare la loro compromissione. Questa valutazione è riassunta nella seguente tabella:

2010 2010 - 2030 > 2030
2TDES sufficiente insufficiente insufficiente
3TDES buona sufficiente insufficiente
AES 128 buona buona sufficiente
AES 192 buona buona buona
AES 256 buona buona buona

La National Security Agency statunitense ha stabilito l'impiego dell'algoritmo AES per proteggere documenti classificati [5]:

CONFIDENTIAL (livello 1) SECRET (livello 2) TOP SECRET (livello 3)
AES-128 protezione adeguata protezione adeguata protezione non adeguata
AES-256 protezione adeguata protezione adeguata protezione adeguata
Bibliography
1. NIST, FIPS PUB 146-3, "Data Encryption Standard", Sito web: http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf
2. NIST, FIPS PUB 197, "Advanced Encryption Standard", Sito web: http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf
3. NIST, FIPS PUB 81, "DES Modes of Operation", Sito web: http://www.itl.nist.gov/fipspubs/fip81.htm
4. NIST, SP800-57 part 1, "Recommendation for Key Management – Part 1: General (Revised)", 2006, Sito web: http://csrc.nist.gov/publications/nistpubs/800-57/SP800-57-Part1.pdf
5. National Security Agency, "NSA Suite B Cryptography", novembre 2009, Sito web: http://www.nsa.gov/ia/programs/suiteb_cryptography/index.shtml
Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License