•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