Block Ciphers and Modes of Operation | Cerca per titolo, autore, parola chiave | ||||||||
Block Ciphers and Modes of Operation Howard Poston e Keshav Dhandhania. In crittografia, esistono due tipi principali di algoritmi di cifratura: block cipher (cifratura a blocchi) e stream cipher (cifratura a flusso). Nella cifratura a flusso, il testo originale da cifrare (plaintext) viene cifrato un bit alla volta. Nella cifratura a blocchi, il testo originale viene suddiviso in blocchi di una predeterminata lunghezza e i bit di ciascun blocco vengono cifrati insieme. Molti tra i più noti algoritmi di cifratura sono block cipher, quali: DES/3DES, AES, Blowfish, Twofish. Data Encryption Cipher (DES) è un algoritmo di cifratura Feistel, con blocchi da 64 bit e chiavi da 56 bit. Visti i dubbi, legittimi, sulla sicurezza di una chiave a 56 bit, si cominciò a sottoporre il testo originale da cifrare (plaintext) a ben 3 cifrature DES, scegliendo, per ogni cifratura, una chiave differente (producendo, così, una chiave a 168 bit). Questa variante viene chiamata 3DES o Triple DES. Advanced Encryption Standard (AES) utilizza blocchi da 128 bit e chiavi da 128, 192, 256 bit. Blowfish è un algoritmo di tipo Feistel a 16 cicli ed utilizza blocchi di dati da 64 bit e chiavi che vanno dai 100 ai 448 bit. Twofish utilizza blocchi di 128 bit e chiavi da 128 bit, al massimo. Come Blowfish, Twofish è liberamente utilizzabile da chiunque, essendo di dominio pubblico. Uno dei maggiori problemi con la cifratura a blocchi è che permette di cifrare solo i messaggi che abbiano esattamente la lunghezza prevista del blocco. Se, per esempio, state utilizzando l'algoritmo TEA (Tiny Encryption Algorithm), che prevede blocchi di 64 bit, per cifrare un messaggio di 65 bit dovrete stabilire come cifrare il secondo blocco. La soluzione a questo problema è definita come block cipher modes of operation. Electronic Code Book (ECB) è la modalità di cifratura a blocchi più semplice, in cui ciascun blocco di dati del plaintext viene cifrato separatamente dagli altri, utilizzando la stessa chiave di cifratura. Quindi: messaggi originali (plaintext) identici producono identici messaggi cifrati (ciphertext), rendendo questi ultimi più vulnerabili ad eventuali attacchi esterni. Nella modalità Cipher Block Chaining (CBC) un elemento di inizializzazione (initialization vector: IV) viene utilizzato per eseguire un exclusive-or (XOR) sul plaintext, prima di passare alla cifratura. Per il primo ciclo della cifratura, il vettore di inizializzazione è un valore casuale e pubblico, mentre per i cicli successivi è il testo cifrato prodotto dal precedente ciclo. In questo modo, si supera il problema posto dalla modalità ECB, dove identici blocchi di plaintext creano identici blocchi cifrati (ciphertext). Nella modalità Cipher Feedback (CFB) sul blocco di plaintext non viene mai eseguito l'algoritmo di cifratura. Quello che viene cifrato, invece, è lo Initialization Vector (IV), con il quale, una volta cifrato, viene eseguito un OR esclusivo (XOR) sul blocco di plaintext. In questo modo, si imita l'algoritmo one-time pad (OTP), in cui la chiave di cifratura, one-time, viene generata dalla cifratura dello Initialization Vector (IV). Come nella modalità CBC, questo Initialization Vector (IV) è un valore casuale per il primo blocco, mentre per i cicli successivi è il ciphertext generato dal blocco precedente. La modalità Output Feedback (OFB) è molto simile alla modalità precedente (cipher feedback mode): mentre nella modalità Cipher Feedback, l'output della cifratura viene utilizzato per eseguire un exclusive-or (XOR) con il plaintext e il risultato di questo XOR viene utilizzato come Initialization Vector (IV) del blocco successivo, nella modalità Output Feedback, è l'output della cifratura ad essere utilizzato come Initialization Vector (IV) del blocco successivo. Il risultato è che la cifratura dello stesso plaintext, effettuata con la stessa chiave, produrrà, sia in modalità CFB, sia in modalità OFB, lo stesso ciphertext solo per il primo blocco di dati. La modalità counter (CTR) è simile alla modalità ECB: ciascuna operazione di cifratura è separata dall'altra, in modo da poter eseguire simultaneamente la cifratura di tutti i blocchi di dati (parallelization). La modalità Counter utilizza, come le modalità feedback, un output diverso dal plaintext per la cifratura, ma, invece di utilizzare un vettore di inizializzazione (initialization vector), utilizza una combinazione di un nonce (numero arbitrario, o arbitrary number) e di un contatore. Il nonce è un numero casuale, utilizzato per tutti i blocchi di dati, mentre il contatore è esattamente ciò che sembra essere: un numero che parte da zero, per il blocco zero, e si incrementa di uno per ciascun blocco successivo. Grazie a questa combinazione, lo stesso valore non sarà mai utilizzato, dall'algoritmo di cifratura, due volte durante una stessa sessione di cifratura (in cui ciascuno dei blocchi avrà si lo stesso valore di nonce, ma avrà anche un differente valore del contatore), oppure sugli stessi blocchi di dati in due differenti sessioni di cifratura (perchè, in questo caso, lo stesso blocco potrà vedersi assegnare lo stesso valore di contatore, ma un differente valore di nonce). Come nelle modalità feedback (OFB e CFB), sul plaintext viene eseguito un exclusive-or (XOR) con l'output della cifratura (nonce + counter), per arrivare al ciphertext. La modalità Galois Counter Mode (GCM) è un caso particolare della modalità counter, in cui si usa solo il contatore (senza il nonce) e in cui viene anche calcolato, dal messaggio, un codice di autenticazione (message authentication code (MAC)), che garantisca che il messaggio non è stato in qualche modo alterato, durante la trasmissione. La crittografia a blocchi è più facile da implementare, se paragonata alla crittografia a flusso (stream cipher), anche perchè prevede requisiti meno restrittivi, ma è molto più lenta e richiede un utilizzo meno efficiente della memoria. Inoltre, in caso di errore di trasmissione, il testo cifrato rischia di non poter essere ricostruito. Nello stream cipher, un errore di trasmissione di un singolo bit, infatti, coinvolge un solo bit del messaggio originale (plaintext), mentre nel block cipher, in particolare nelle modalità feedback, un errore di trasmissione di un singolo bit modifica la decifratura dell'intero blocco e di tutti i blocchi successivi la cui decifratura dipende dal blocco di dati corrente.
|
|||||||||
Block Ciphers and Modes of Operation | Disclaimer: questo è un link a contenuti ospitati su server esterni. |