•Alfredo De Santis •23/05/2000 Numeri casuali Generazione Deterministica? Importanti per molte primitive “Anyone who considers arithmetical methods crittografiche of producing random digits is, of course, in a state of sin.” John von Neumann [1951] un avversario non deve determinarli o indovinarli se non con una bassa probabilità Randomness 0 Randomness 1 Caratteristiche del sistema Randomness by obscurity variabili di sistema, ad esempio il tempo del clock oppure numeri di serie (come l'indirizzo Ethernet) il numero di file su dischi od in particolare directory lo spazio libero su ogni disco le informazioni presenti nei vari buffer, nelle code per l'I/O, oppure nei driver per video il numero di task nella coda di schedulazione del sistema operativo, le loro ID, le loro grandezze oppure lo stato della memoria centrale informazioni definite dall'utente, come grandezza e posizione 2 studenti di Berkeley nel settembre 1995 reverse-compilation della routine di Netscape 1.1 time, pid, ppid mischiati erano il seme di un generatore per scegliere chiavi e challange delle finestre, colori utilizzati, nomi dei file Randomness 2 Caratteristiche del sistema Randomness 3 Eventi esterni per la generazione variabili di sistema, ad esempio il tempo del clock oppure numeri di serie (come l'indirizzo Ethernet) il numero di file su dischi od in particolare directory lo spazio libero su ogni disco le informazioni presenti nei vari buffer, nelle code per l'I/O, oppure nei driver per video il numero di task nella coda di schedulazione del sistema operativo, le loro ID, le loro grandezze oppure lo stato della memoria centrale informazioni definite dall'utente, come grandezza e posizione contenuto delle battiture su tastiera intervalli di tempo tra la digitazione dei tasti misure di tempi e posizione dei movimenti del cursore Randomness Randomness delle finestre, colori utilizzati, nomi dei file però solo pochi bit casuali …non molto segreti •Corso di Sicurezza su Reti 4 e/o del mouse informazione raccolta durante una sessione di lavoro (altrimenti si può chiedere di battere tasti a caso oppure di muovere il mouse per un pò) tempo di arrivo dei pacchetti su rete 5 •1 •Alfredo De Santis •23/05/2000 Mischiare più sorgenti Mischiamento: un esempio In genere si ottengono solo pochi bit casuali Usare più sorgenti casuali, non correlate tra di loro Mischiare i bit ottenuti tramite una opportuna funzione S MD5 – evita che ci siano bit facili da indovinare – funzione complessa e non lineare di tutti i bit input 112 bit chiave EDE – ad es., DES, triplo DES, SHS, MD4, MD5, … 16 bit scartati EDE però nessuna funzione deterministica aumenta la casualità Randomness R 6 Generazione pseudo-casuale X valore iniziale o seme Generazione deterministica della sequenza 0 Xi+1 = f ( i, X0 X1 … Xi ) i = 0,1,2,… X1 X2 X3 X4 … Randomness Randomness Generatore a congruenze lineari Cifratura di un contatore j-bit Output feedback ANSI X9.17 Generatore basato su RSA Randomness i+1 X = (a·X + b) mod m [Lehmer 1951] X = (a·X + b) mod m 9 Generatore a congruenze lineari Ad oggi la tecnica più usata per la generazione pseudo-casuale 7 Generazione pseudo-casuale 8 Generatore a congruenze lineari in CBC i+1 i X0 seme i X0 seme Che valori scegliere per a, b, m ? Randomness •Corso di Sicurezza su Reti 10 Randomness 11 •2 •Alfredo De Santis •23/05/2000 Generatore a congruenze lineari X = (a·X + b) mod m i+1 X = (a·X + b) mod m i+1 a=1 Generatore a congruenze lineari i i a=7 Xi+1 = Xi +1 mod m b=0 Xi+1 = 7 Xi mod 32 m = 32 7, 17, 23, 1, 7, 17, 23, … X0 = 1 b=1 periodo 4 a=5 Randomness 12 b=0 Xi+1 = 5 Xi mod 32 m = 32 5, 25, 29, 17, 21, 9, 13, 1, … X0 = 1 periodo 8 Randomness 13 Generatore a congruenze lineari Generatore a congruenze lineari X = 7 · X mod 2 -1 X = 7 · X mod 2 -1 5 31 i+1 75 = 16.805 originalmente usato nella famiglia IBM 360 [1969] Genera tutti i numeri 1,2,… , 2 -2 Molto usato per simulazione e statistica [1969] 14 X = 7 · X mod 2 -1 Randomness Generatore a congruenze lineari i X = (a·X + b) mod m i+1 7 = 16.805 originalmente usato nella famiglia IBM 360 15 31 i+1 5 Numero primo Conveniente per aritmetica a 32 bit 31 Generatore a congruenze lineari 5 i Genera tutti i numeri 1,2,… , 2 -2 Molto usato per simulazione e statistica Buono per scopi crittografici? 31 Randomness 31 i+1 Numero primo Conveniente per aritmetica a 32 bit 75 = 16.805 originalmente usato nella famiglia IBM 360 5 i Numero primo Conveniente per aritmetica a 32 bit [1969] i Dati X0, X1, X2, X3 si possono calcolare a, b, m X1 = (a·X0 + b) mod m Se conoscessi un solo Xi potrei X2 = (a·X1 + b) mod m calcolare tutti i valori seguenti X3 = (a·X2 + b) mod m ed anche i successivi! Randomness •Corso di Sicurezza su Reti 16 Randomness 17 •3 •Alfredo De Santis •23/05/2000 Cifratura di un contatore Cifratura di un contatore c ← valore iniziale c ← valore iniziale c diversi ⇒ X diversi c←c+1 E chiave (seme) c diversi ⇒ X diversi c←c+1 i i Uso di un generatore, e non E chiave (seme) Xi un semplice contatore Xi Randomness 18 Randomness j-bit Output feedback ANSI X9.17 seme shift di j bit 64-j bit k X i k,k´ data ed ora corrente j bit DT DES j bit 19 i 64-j bit EDE seme ← output di 64 bit V i X i 20 z0 (i = 0) zi bit meno significativo 21 Generatore basato su RSA p,q ← primi n ← p ·q e ← intero in [3,ϕ(n)[ tale che gcd(e,ϕ(n))=1 zi ← zi-1e mod n output Randomness Generatore basato su RSA p,q ← primi n ← p ·q e ← intero in [3,ϕ(n)[ i+1 EDE Si inizia cifrando IV Randomness V EDE Xi z0 (i = 0) i ← i +1 tale che gcd(e,ϕ(n))=1 zi ← zi-1e mod n zi c ·log log n bit Xi meno significativi i←i+1 Randomness •Corso di Sicurezza su Reti 22 Randomness 23 •4 •Alfredo De Santis •23/05/2000 Generatore crittograficamente forte Generatore crittograficamente forte Test del prossimo bit Deve passare i seguenti test: Test del prossimo bit Test statistici dati i primi r bit dell’output nessun algoritmo efficiente può predire l’(r+1)-esimo bit con probabilità significativamente migliore di 1/2 Questi sono i primi r bit: 1101001…0 (I due test sono equivalenti) Randomness 24 Qual è il prossimo? Randomness 25 Generatore crittograficamente forte Test statistici nessun algoritmo efficiente distingue tra l’output di un generatore ed una sequenza realmente casuale con probabilità significativamente migliore di 1/2 Casuale o pseudo-casuale? Ecco r bit: 1101001…0 Randomness •Corso di Sicurezza su Reti 26 •5