Schema generico di un algoritmo crittografico Sicurezza nei Sistemi Informativi Crittografia a chiave simmetrica Ing. Orazio Tomarchio [email protected] Dipartimento di Ingegneria Informatica e delle Telecomunicazioni Università di Catania O. Tomarchio Crittografia a chiave segreta Sicurezza nei Sistemi Informativi Crittografia a chiave segreta (simmetrica) chiave-1 = chiave-2 Plaintext m 2 cifratura Ciphertext c chiave K Algoritmi simmetrici (cioè la funzione di cifratura e di decifratura sono l’una l’inversa dell’altra) Plaintext m Basso carico di elaborazione Ciphertext c decifratura Funzione di cifratura c = E(m,K) = EK (m) Funzione di decifratura m = D(c,K) = DK (c) con funzioni di cifratura e decifratura l’una inversa dell’altra Usata principalmente per crittografia dei dati O. Tomarchio Sicurezza nei Sistemi Informativi EK (DK (c )) == c DK (EK (m )) == m 3 O. Tomarchio Sicurezza nei Sistemi Informativi 4 Crittografia a chiave segreta (simmetrica) Chiave unica Chiave comune a mittente e destinatario O. Tomarchio Sicurezza nei Sistemi Informativi Crittografia simmetrica Cifrari a blocchi (Block cipher) 5 Symmetric block cipher Principali algoritmi ( a blocchi) Schema generico ad alto livello Facendo riferimento allo schema generico già introdotto: la stessa chiave k viene usata sia per D che per E k = stringa di bit di lunghezza l m = stringa di bit di lunghezza b c = stringa di bit di lunghezza b Il block cipher Ek rappresenta una relazione biunivoca tra l’insieme delle stringhe m (i.e., i numeri m compresi tra 0 e 2b-1) e i possibili 2b valori [0..2b-1] di c, in maniera dipendente da k Dk = Ek-1 O. Tomarchio Sicurezza nei Sistemi Informativi 7 DES, triple-DES IDEA RC2, RC5 Blowfish AES O. Tomarchio Sicurezza nei Sistemi Informativi 8 Principali algoritmi Obiettivi fondamentali di un block cipher O. Tomarchio Sicurezza nei Sistemi Informativi 9 Ogni bit di c deve dipendere da tutti i bit di k e da tutti i bit di m Non ci deve essere alcuna relazione statistica evidente (almeno per chi non conosce k ) tra c e m La modifica di un bit di m deve portare ad una modifica di ciascuno dei bit di c con probabilità 0.5 La modifica di un bit di c deve fare in modo che il corrispondente m, ricavato con Dk(c), subisca cambiamenti statisticamente non correlati con il cambiamento subito da c O. Tomarchio Concetti introdotti da Shannon Diffusione La struttura statistica del testo in chiaro viene espansa in un ampio intervallo statistico del testo cifrato In pratica vuol dire che ogni cifra del testo cifrato deve essere influenzata da più cifre del testo in chiaro Confusione Cercare di complicare la relazione fra le statistiche del testo cifrato ed il valore della chiave di crittografia Questi due concetti sono alla base della progettazione dei moderni cifrari a blocchi O. Tomarchio Sicurezza nei Sistemi Informativi 10 La funzione XOR Diffusione e confusione Sicurezza nei Sistemi Informativi 11 operatore di “confusione” ideale se l’input è casuale (probabilità 0 : 1 = 50 : 50%) allora anche l’output sarà casuale allo stesso modo disponibile su tutte le CPU tavola di verità: O. Tomarchio Sicurezza nei Sistemi Informativi 12 Prodotto di cifrari Prodotto di cifrari: un possibile schema La sostituzione e la permutazione dei simboli possono essere viste come funzioni fondamentali per la costruzione di una funzione più complessa, che altro non è se non un particolare prodotto delle funzioni fondamentali Un obiettivo importante nel design di questo tipo di algoritmi è che essi siano facilmente reversibili, conoscendo k Data la Ek, deve essere il più semplice possibile ricavare la Dk O. Tomarchio Sicurezza nei Sistemi Informativi 13 Dimensione di m e c: b bit b= j n Si: cifrari a sostituzione che operano su j bit P: cifrario a trasposizione che opera su b bit Round: prodotto dei due cifrari Sono necessari t round, con t > 1, perché si raggiunga uno degli obiettivi fondamentali (il cambiamento di un bit di m deve portare al cambiamento di ciascuno dei bit di c con probabilità 0.5) O. Tomarchio Prodotto di cifrari: combinazione di funzioni elementari (swap, bit-shift, separazioni, concatenazioni, XOR, susbstitution-cipher, …) Il dimensionamento ottimale del numero di round è uno dei parametri di progetto più importanti Come utilizzare k in ciascuno dei cifrari utilizzati nella combinazione? Come assicurare la reversibilità? O. Tomarchio Sicurezza nei Sistemi Informativi 14 DES Prodotto di cifrari: note Sicurezza nei Sistemi Informativi 15 Data Encryption Standard standard FIPS 46/2 (pubblicato nel 1977) modalità di applicazione standard FIPS 81 chiave a 56 bit (+ 8 bit di parità = 64 bit) blocco dati da 64 bit Oggi è ormai obsoleto (sostituito dal 3DES nel 1999) pensato per essere efficiente in hardware perché richiede: permutazioni shift XOR In pratica il più vecchio e il più usato cifrario a blocchi commerciale (conosciuto) ancora in uso oggi, seppure con metodologie di applicazione più complesse rispetto a quanto si facesse tempo fa O. Tomarchio Sicurezza nei Sistemi Informativi 16 Triple DES (3DES) Doppio DES ? applicazione ripetuta di DES usa due o tre chiavi a 56 bit solitamente usato in modo EDE (compatibilità con DES se K1 = K2 = K3) encrypt(K1) + decrypt(K2) + encrypt(K1) equivale a K di 56 bit se si hanno 2**59B, altrimenti equivale a K di 112 bit encrypt(K1) + decrypt(K2) + encrypt(K3) equivale ad avere K di 112 bit standard FIPS 46/3 e ANSI X9.52 O. Tomarchio Sicurezza nei Sistemi Informativi 17 l’applicazione doppia di algoritmi di cifratura è soggetta ad un attacco di tipo known-plaintext chiamato meet-in-the-middle che permette di decifrare i dati con al più 2N+1 tentativi quindi solitamente non si usa mai la versione doppia degli algoritmi di cifratura Nota: se l’algoritmo simmetrico di base fosse un gruppo allora esisterebbe K3 tale che enc (K2 , enc (K1 , P) ) = enc (K3 , P) O. Tomarchio Attacco meet-in-the-middle IDEA ipotesi: chiavi da N bit sono noti P e C tali che C = enc (K2, enc (K1, P) ) nota: esiste M tale che M = enc(K1,P) e C = enc(K2,M) azioni: calcolo 2N valori Xi = enc (Ki, P) calcolo 2N valori Yj = dec (Kj, C) cerco quei valori Ki e Kj tali che Xi = Yj “falsi positivi” eliminabili se ho più coppie P,C O. Tomarchio Sicurezza nei Sistemi Informativi Sicurezza nei Sistemi Informativi Introdotto nel1991 brevettato ma con basse royalty (solo per uso commerciale) chiave a 128 bit blocco dati da 64 bit operazioni usate: 19 International Data Encryption Algorithm 18 XOR addizione modulo 16 moltiplicazione modulo 216+1 Ampiamente analizzato dalla comunità, senza che fosse trovato alcun problema: nessuno ha pubblicato alcun metodo pratico (al di là degli attacchi a forza bruta) per penetrare IDEA Utilizzato in diversi prodotti e sistemi: PGP, S/MIME, … O. Tomarchio Sicurezza nei Sistemi Informativi 20 RC2 RC5 sviluppati da Ron Rivest RC = Ron’s Code algoritmi proprietari di RSA ma non brevettati 3 e 10 volte più veloci di DES chiave a lunghezza variabile RC2: pubblicato come RFC-2268 (mar 1998) chiave da 8 a 1024 bit (solitamente 64 bit) blocchi da 64 bit O. Tomarchio Sicurezza nei Sistemi Informativi RFC-2040 blocco dati da B bit (0 < B < 257) chiave (fissa/variabile) da b byte (0 <= b < 256) ossia tra 0 e 2048 bit lavora al meglio con B = 2 W operazioni usate: 21 shift, rotate addizione modulare usato nel WAP O. Tomarchio Blowfish 22 AES (Advanced Encryption Standard) Algoritmo a blocchi, introdotto nel 1994, royalty free b = 64 bit l = variabile, da 32 a 448 bit Uno dei primi algoritmi ancora in uso ad introdurre il concetto di sicurezza variabile, legato alla variabilità della dimensione della chiave Progettato per essere estremamente efficiente in implementazioni SW su processori general-purpose È molto meno efficace in implementazioni HW: problemi con l’algoritmo di generazione delle sotto-chiavi (estremamente complesso, e richiede “molta” memoria) Utilizza funzioni elementari combinate in maniera semplice, il che lo rende relativamente semplice sia da analizzare che da implementare Implementato in vari meccanismi di sicurezza (esempio: OpenSSH, PGPfone, …) Ha ricevuto ancora meno attenzione (temporale) di IDEA, ma finora non sono stati trovati problemi O. Tomarchio Sicurezza nei Sistemi Informativi Sicurezza nei Sistemi Informativi 23 Algoritmo a blocchi, standardizzato come successore di DES nel 2001 Processo di standardizzazione completamente aperto (processo di selezione pubblica, con regole dettate dal NIST) Basato sulla teoria matematica dei campi finiti di Galois Progettato, oltre che per i “soliti” obiettivi, per essere semplice da implementare sia in HW che in SW: in entrambi i casi si ottiene un algoritmo molto più veloce di DES b = 128 bit l = variabile, 128, 192, 256 bit (AES-128, AES-192, AES-256) Non si conoscono attacchi crittanalitici pratici più efficienti della forza bruta O. Tomarchio Sicurezza nei Sistemi Informativi 24 Applicazione degli algoritmi a blocchi Crittografia simmetrica Modalità d’uso dei block cipher Come si applica un algoritmo a blocchi a dati in quantità diversa da quella del blocco base? Diversi modi d’uso portano a meccanismi ce possiedono diversi vantaggi e svantaggi, e sono più o meno adatti ad applicazioni diverse per cifrare dati in quantità superiore ECB (Electronic Code Book) CBC (Cipher Block Chaining) per cifrare dati in quantità inferiore padding CFB (Cipher FeedBack) OFB (Output FeedBack) O. Tomarchio ECB (Electronic Code Book) m2 formula per il blocco i-esimo: -1 (c , k) mi = E i m1 mn k k E k E … k E D c1 c1 O. Tomarchio c2 Sicurezza nei Sistemi Informativi 26 ECB (decifratura) Il messaggio viene suddiviso in blocchi indipendenti Ciascun blocco viene cifrato indipendentemente dagli altri blocchi Formula per il blocco i-esimo ci = E (mi, k) m1 Sicurezza nei Sistemi Informativi m2 k D mn … k c2 D cn cn 27 O. Tomarchio Sicurezza nei Sistemi Informativi 28 CBC (Cipher Block Chaining) ECB: proprietà Vantaggi Semplicissimo da implementare Non propagazione degli errori, per errori di tipo “cambio di valore di bit” (bit error) Il messaggio viene suddiviso in blocchi… che però vengono legati assieme nelle operazioni di cifratura formula per il blocco i-esimo: Svantaggi Si presta ad attacchi (passivi) che analizzano la frequenza dei simboli ci = E (mi ⊕ ci-1, k) richiede c0 = IV (Initialization Vector) non attaccabile banalmente Propagazione degli errori, per errori del tipo “inserimento o cancellazione di bit” (lost/inserted bit) k A causa di questi svantaggi, è bene non usare mai ECB Sicurezza nei Sistemi Informativi 29 O. Tomarchio m1 m2 k D c1 O. Tomarchio mn … k D … c2 Sicurezza nei Sistemi Informativi E c1 k E … c2 Sicurezza nei Sistemi Informativi Cn-1 k E cn 30 CBC: proprietà formula per il blocco i-esimo: -1 (c , k) ⊕ c mi = E i i-1 richiede che c0 (ossia l’ IV) sia noto anche al ricevente del messaggio IV mn … CBC (decifratura) m2 Si presta ad attacchi (attivi) che manipolano l’ordine dei blocchi, o ne modificano il valore (violazione dell’integrità e autenticità) O. Tomarchio m1 IV Cn-1 k D cn 31 Vantaggi Non propagazione degli errori per gli errori bit error (un singolo errore di questo tipo nel ciphertext agisce sul blocco di <c,m> in esame, e su un bit dell’m successivo) Stessi valori di m in posizioni diverse producono diversi c: molto più resistente di ECB all’analisi della frequenza dei simboli Più resistente di ECB ad attacchi attivi che manipolano l’ordine dei blocchi, o che ne cambiano il valore (ma non immune) Svantaggi Si presta ad attacchi attivi che aggiungono blocchi, o che modificano il valore di un blocco c per modificare in maniera prevedibile il corrispondente m (violazione di integrità e autenticità) Propagazione degli errori, per lost/inserted bit (a meno che non si perda/inserisca un numero di bit multiplo di b) Nota: importanza della presenza dell’IV, e della sua casualità Esempio: se l’IV rimane costante, la trasmissione periodica dello stesso messaggio porterà allo stesso ciphertext, quindi un intruso potrà capire quando il messaggio è cambiato O. Tomarchio Sicurezza nei Sistemi Informativi 32 CBC: proprietà Problemi di sincronizzazione (perdita di bit o inserimento di bit spuri nel ciphertext) OFB (Output FeedBack) Contromisura: se si usa CBC, bisogna prevedere dei meccanismi per ri-sincronizzare il ciphertext di tanto in tanto (per esempio, utilizzando dei marker ben riconoscibili ogni n blocchi) Attacco attivo: aggiunta di blocchi Contromisura: prevedere dei meccanismi per sapere in anticipo quanto ciphertext ci si deve aspettare, o usare dei MAC (vedi più avanti) Attacco attivo: modifiche a ci per influenzare prevedibilmente mi+1 Contromisura: aggiungere un CRC, o, meglio ancora, un MAC (vedi più avanti) per garantire l’integrità Attenzione all’IV! Il messaggio è trattato come uno stream L’output della cifratura viene usato come feedback per la fase successiva Tale feedback è indipendente dal messaggio richiede un IV (per inizializzare lo shift register) left shift register 64 k 64 Prendi gli s bit più a sinistra s s mi Assicurarsi sempre che nella propria implementazione vengano generati IV casuali, e che essi non si ripetano s In ogni caso, e questo non vale solo per CBC, ricordate che questi modi di utilizzo degli algoritmi a blocchi servono per fornire segretezza, non garanzia di integrità o ci autenticazione O. Tomarchio Sicurezza nei Sistemi Informativi 33 O. Tomarchio Sicurezza nei Sistemi Informativi OFB: proprietà Un block cipher usato in OFB diventa a tutti gli effetti uno stream cipher: in particolare, il keystream può essere calcolato prima della trasmissione dei dati (compromesso memoria/potenza di calcolo) Ancora meno propagazione degli errori di CBC: non essendoci feedback dal ciphertext, un eventuale errore di trasmissione su un blocco ci influenzerà solo il corrispondente blocco mi, non Non è più necessario inviare i messaggi in blocchi di (almeno) b bit alla volta come con CBC: si possono inviare i c anche in blocchi di dimensione variabile, man mano che i relativi m sono pronti per essere trasmessi Soliti problemi legati agli errori di bit lost/deleted, amplificati: qualunque numero di bit persi o aggiunti (anche multipli di b) nella trasmissione del ciphertext impediscono la corretta decifratura dall’errore in poi Se Alice sta trasmettendo il messaggio ci=mi ⊕ oi a Bob, e Trudy scopre la coppia <ci,mi>, Trudy può sostituire ci con ci’=ci ⊕ mi ⊕ mi’, e fare in modo che il messaggio ricevuto da Bob sia mi’ invece di mi Contromisura: MAC Attacco passivo: analisi in frequenza Svantaggi Attacco attivo: violazione di integrità e autenticità mi+1 Attenzione all’IV: non si deve mai riutilizzare lo stesso IV con la stessa k per due messaggi diversi! (ergo, se la chiave rimane costante, gli IV che vengono usati per diversi messaggi devono essere veramente casuali) Non è self-synchronizing: non si può usare su canali di comunicazione affetti di errori, a meno di introdurre meccanismi esterni per la ri-sincronizzazione (ad esempio, marker) Non può essere usato con algoritmi crittografici asimmetrici (si usa solo la Ek) O. Tomarchio Sicurezza nei Sistemi Informativi 34 OFB: proprietà Vantaggi E 35 O. Tomarchio In questo caso il keystream sarà lo stesso per due messaggi diversi, quindi un crittanalista, semplicemente facendo lo ⊕ dei due ciphertext, si troverebbe a dover crittanalizzare semplicemente lo ⊕ dei due plaintext originali (analisi in frequenza, ecc.) Sicurezza nei Sistemi Informativi 36 CFB (Cipher FeedBack) Il messaggio è trattato come uno stream Il testo cifrato viene usato come feedback per la fase successiva Lo standard permette di eseguire il feedback con numero qualsiasi di bit (1, 8, 64, o altro) Denotati con CFB-1, CFB-8, CFB-64, etc richiede un IV (per inizializzare lo shift register) CFB: proprietà left shift register 64 k Vantaggi Self-synchronizing: si auto-sincronizza, contrariamente a quanto accade in OFB, se accadono errori di trasmissione (cancellazione o aggiunta di bit) che coinvolgono un multiplo di b bit E 64 Prendi gli s bit più a sinistra s mi Svantaggi s Propagazione dell’errore limitata: in caso di un errore di trasmissione su un singolo bit di un blocco ci, l’errore influenzerà la decifratura di mi, e dei successivi b/s blocchi s Non si può calcolare il keystream in anticipo Non può essere usato con algoritmi crittografici asimmetrici (si usa solo la Ek) ci O. Tomarchio Sicurezza nei Sistemi Informativi 37 O. Tomarchio Sicurezza nei Sistemi Informativi 38 Algoritmi di tipo stream Crittografia simmetrica Stream cipher operano su un flusso di dati senza richiederne la divisione in blocchi, tipicamente su un bit o un byte alla volta Ek è, in genere, stateful (con memoria): essa varia man mano che trasforma il plaintext algoritmo ideale: one-time pad algoritmi reali: usano generatori pseudo-casuali di chiavi, sincronizzati tra mittente e ricevente esempi: RC4 e SEAL O. Tomarchio Sicurezza nei Sistemi Informativi 40 Stream cipher: one-time-pad vs. pseudo-random keystream Algoritmi di tipo stream Abbiamo già visto le proprietà, i vantaggi (perfetta segretezza) e gli svantaggi (chiave lunga) del one-time-pad Il one-time-pad sarebbe il perfetto stream cipher Un possibile metodo per creare uno stream cipher è quello di generare un keystream lungo quanto il messaggio, ma a partire da una chiave k di lunghezza piccola e predefinita O. Tomarchio Sicurezza nei Sistemi Informativi 41 Il keystream sarebbe in questo caso, non perfettamente casuale come nel one-time-pad, bensì pseudocasuale Quanto più il keystream generato si avvicina ad essere perfettamente casuale, tanto più lo stream cipher si avvicina alla perfetta segretezza In ogni caso, saremo lontani dalla perfetta segretezza, dato che H(k) « H(m) O. Tomarchio Schema generico O. Tomarchio Sicurezza nei Sistemi Informativi Sicurezza nei Sistemi Informativi 42 Synchronous stream cipher 43 O. Tomarchio Sicurezza nei Sistemi Informativi 44 Self-synchronizing stream cipher Synchronous stream cipher: proprietà principali Se parliamo di alfabeti binari, mi e ci possono essere di qualunque dimensione, anche un solo bit La concatenazione dei vari zi porta ad un keystream pseudocasuale Sorgente e destinazione devono sincronizzare il flusso di dati e il processo di generazione e uso delle zi Dalla mi=h-1(ci,zi) segue che la perdita o l’aggiunta anche di un solo blocco ci porta alla decifrazione errata di tutti i successivi cj (con j>i) Nelle implementazioni di questi cifrari bisogna quindi prevedere dei meccanismi per limitare gli effetti di questi problemi (per esempio, marker, re-inizializzazione del processo, ecc.) Analogamente, se ci serve lo zi, dobbiamo calcolare tutti gli z precedenti, fino a zi-1 La modifica, per esempio per errori di trasmissione, di un dato blocco ci non porta a modifiche dei blocchi successivi o precedenti di mj (recuperati dai corrispettivi cj) Non propagazione dell’errore: questo meccanismo si adatta bene alla trasmissione su canali con un alto tasso d’errore La maggior parte degli stream cipher oggi usati è di tipo binary additive, dove la funzione h è semplicemente un XOR O. Tomarchio Sicurezza nei Sistemi Informativi 45 O. Tomarchio Come nel caso precedente, se parliamo di alfabeti binari, mi e ci possono essere di qualunque dimensione, anche un solo bit La concatenazione dei vari zi porta ad un keystream pseudocasuale È un synchronous stream cipher, creato da Ron Rivest (la “R” di RSA) nel 1987 Initialization Vector (IV): serie di blocchi non segreti necessari ad inizializzare il processo di generazione degli zi Self-synchronizing: la cancellazione di un ci, l’inserimento di un ci “spurio”, o gli errori di trasmissione su un certo ci porta ad errori di ricostruzione degli m, ma tali errori si ripercuotono solo su un limitato numero di mj che seguono l’mi corrotto La quantità di mj corrotti dipenderà dalla grandezza di t Sicurezza nei Sistemi Informativi 47 È rimasto protetto da segreto fino al 1994, quando il codice sorgente di RC4 fu illegalmente inviato in rete È ancora, in teora, un trade secret, quindi dovrebbe essere acquistata una licenza da RSADSI (RSA Data Security Incorporated) per poter usarlo in applicazioni commerciali RC4 viene usato per generare, a partire da una chiave K lunga da 1 a 256 byte (ottetti), un keystream pseudocasuale O. Tomarchio 46 RC4 Self-synchronizing stream cipher: proprietà principali Sicurezza nei Sistemi Informativi La pseudo-casualità dello stream è stata verificata anche con chiavi “banali”, come “0” Di solito è meglio non utilizzare i primi 256 byte, in quanto essi mostrano la correlazione maggiore tra chiave e keystream O. Tomarchio Sicurezza nei Sistemi Informativi 48 Crittografia simmetrica RC4 È estremamente semplice da implementare, e porta ad implementazioni veloci ed efficienti sia in HW che in SW RC4 nelle implementazioni commerciali è circa 10 volte più veloce di DES Chiave singola e segreta Una chiave per ogni coppia/gruppo di utenti si è un vettore di 258 byte zi è lungo 8 bit h = h-1 = XOR Sembra possedere tutte le proprietà necessarie per uno stream cipher. Il keystream generato è: Pseudo-casuale, indipendentemente dalla chiave scelta Non c’è regolarità nei cicli di ripetizione del keystream Non sembrano esserci cicli di ripetizione piccoli O. Tomarchio Sicurezza nei Sistemi Informativi 49 O. Tomarchio Distribuzione delle chiavi per crittografia simmetrica distribuzione OOB (Out-Of-Band) distribuzione tramite algoritmi per scambio chiavi O. Tomarchio Sicurezza nei Sistemi Informativi 50 Lunghezza delle chiavi segrete Per una comunicazione privata completa tra N persone occorrono N x (N-1) / 2 chiavi: Sicurezza nei Sistemi Informativi 51 se l’algoritmo di crittografia è stato ben progettato … e le chiavi - lunghe Nbit - sono tenute segrete … allora l’unico attacco possibile è l’attacco esaustivo che richiede un numero di tentativi pari a 2Nbit O. Tomarchio Sicurezza nei Sistemi Informativi 52 Block cipher: quale usare oggi? Criteri Sicurezza: robustezza rispetto agli attacchi crittanalitici conosciuti, spazio delle chiavi, dimensione del blocco Disponibilità di implementazioni HW/SW, e loro compatibilità Rapidità di esecuzione, efficienza, compattezza Flessibilità d’uso (chiave di dimensione variabile, blocco di dimensione variabile) Ad oggi, personalmente, non vedo altra scelta se non AES Velocità indicative di diversi block cipher, in Mb/s, implementati in SW in linguaggio C++, P4 2.1 GHz © Wei Dai O. Tomarchio Sicurezza nei Sistemi Informativi 53