La cifratura a blocchi è uno schema di crittografia nel quale ciascun blocco in chiaro viene elaborato in modo indipendente per produrre un blocco di testo cifrato di identiche dimensioni.
è una tecnica utilizzata per l’applicazione di algoritmi di crittografia simmetrica che operano su blocchi di dati di lunghezza fissa B. Se si vuole cifrare un dato di dimensione maggiore di B occorre suddividerlo in blocchi di dimensione B ed eventualmente riempire l’ultimo blocco con tecniche di padding (viene utilizzato, ad esempio, da DES o AES).
l’input dell’algoritmo di crittografia è il risultato dello XOR tra il blocco di testo in chiaro corrente e il blocco di testo cifrato precedente; per ciascun blocco viene utilizzata la stessa chiave. In fase di decifratura, ciascun blocco di testo cifrato passa attraverso l’algoritmo di decrittografia; il risultato subisce uno XOR con il blocco di testo cifrato precedente, per produrre il blocco di testo in chiaro.
è stata ideata per convertire idealmente una cifratura a blocchi in una cifratura a flusso. La cifratura a flussi non necessita di eseguire riempimenti e può inoltre operare in tempo reale. Nell’operazione di cifratura, l’input della funzione di crittografia è un registro a scorrimento a 64 bit che inizialmente viene impostato con un vettore di inizializzazione IV (Initialization Vector). Gli s bit più significativi (ovvero quelli più a sinistra) dell’output subiscono uno XOR con il primo segmento di testo in chiaro P1 per produrre la prima unità di testo cifrato C1. Il contenuto del registro di scorrimento viene fatto scorrere a sinistra di s bit, e negli s bit meno significativi (quelli più a destra) del registro viene inserito C1. Il processo viene reiterato fino all’esaurimento di tutte le unità di testo in chiaro.
Il vantaggio della OFB è che non propaga gli errori di trasmissione dei bit. Il suo svantaggio è che è più vulnerabile a un attacco a modifica del flusso dei messaggi.
In questa modalità viene utilizzato un contatore corrispondente alle dimensioni del blocco di testo in chiaro. Il requisito essenziale è che il suo valore sia differente per ciascun blocco da cifrare; in genere viene inizializzato con un determinato valore e poi incrementato di un’unità per ogni blocco successivo.
Feistel suggerisce di eseguire due o più cifrature di base in sequenza in modo che il risultato prodotto sia più resistente. In sostanza si sviluppa una cifratura a blocchi con lunghezza della chiave di k bit e lunghezza di blocco di n bit, consentendo 2k trasformazioni (invece che 2n! nell’ideale a blocchi).
La cifratura di Feistel possiede le proprietà di:
Tutte le fasi hanno la stessa struttura:
I parametri caratterizzanti Feistel sono:
Per effettuarla si dà come input si usa il testo cifrato ma si applicano le sottochiavi Ki in ordine inverso (Kn la prima, Kn-1 la seconda, e cosi via).
DES è stato adottato nel 1977 dal National Bureau of Standards, i dati vengono crittografati in blocchi di 64 bit con una chiave di 56 bit.
L’elaborazione del testo avviene in diverse fasi:
L’input di una tabella è costituito da 64 bit numerati da 1 a 64. Le voci della tabella di permutazione contengono una permutazione dei numeri da 1 a 64. Ciascuna voce della tabella delle permutazioni indica la posizione di un bit di input nell’output.
La metà sinistra e destra di ciascun valore intermedio di 64 bit vengono trattate come due entità distinte da 32 bit. L’elaborazione generale in ogni fase è:
La chiave della fase Ki è di 48 bit e l’input R è di 32 bit. L’input R viene espanso a 48 bit usando una tabella che definisce una permutazione più un’espansione che prevede la duplicazione di 16 bit di R. Ai 48 bit risultanti viene applicata con una XOR la chiave Ki. Il risultato di 48 bit attraversa una funzione di sostituzione che produce un output di 32 bit che viene permutato. Nella F(R,K), dopo lo XOR tra i 48 bit di R e K, il risultato passa per le S-box. La sostituzione che avviene è costituita da 8 S-box, ognuna delle quali accetta in input 6 bit e produce un output di 4 bit. L’operazione eseguita è la seguente:
Ad esempio, con un input 011001, la riga è 01 (converto in decimale->riga 1) e la colonna è 1100 (converto in decimale->colonna 12). Il numero trovato alla 1° riga e 12° colonna della S-box lo converto in binario e ho il mio output.
La chiave è da 64 bit, un bit ogni 8 viene ignorato. La chiave viene permutata, e quella risultante di 56 bit viene trattata come 2 quantità di 28 bit, dette C0 e D0. In ciascuna fase C e D sono soggette a uno scorrimento circolare o rotazione a sinistra di 1 o 2 bit. I valori risultanti vengono utilizzati per la fase successiva e come input per la tabella Permuted Choice 2 che funge da input per la funzione F(Ri-1,Ki).
Nel luglio 98 la EFF costruì una macchina in grado di rompere il DES in meno di tre giorni. Visto che il prezzo hardware continuava a scendere e la potenza ad aumentare, rese il DES praticamente inutile.
Per chi volesse vedere DES in azione, o non si gli ben chiaro qualche passaggio, consiglio questo sito, che permette di osservare tutte le fasi di una cifrature e capirle in modo ottimale.