-
Notifications
You must be signed in to change notification settings - Fork 16
/
random.theory.txt
50 lines (45 loc) · 3.35 KB
/
random.theory.txt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
RANDOM
Types :
- PRNG (pseudo-random number generator) :
- fonction f(s) produisant un output aléatoire (s est la seed)
- types :
- cryptographic PRNG :
- utilise un IV comme seed (au sens de nonce non-prédisible, et non de non-aléatoire, sinon cela est un paradoxe
récursif)
- recherche diffusion + confusion (entre la seed et l'output)
- cherche à être résistant aux PRNG attaques
- non-cryptographic PRNG
- utilise un nonce comme seed :
- ne recherche que diffusion
- utilisé dans les jeux vidéos, graphismes, statistiques, etc.
- RNG (truly random number generator) :
- utilise une seed réellement aléatoire, via des événements physiques, comme sensors (intervals entre touches tapées,
mouvements de souris, etc.)
- a une entropy donnée désignant quantité d'information réellement aléatoire
- est en général bien plus lent que PRNG
Utilisation en cryptographie :
- création de clefs aléatoires :
- clef secrète symétrique
- clef privée asymétrique
- création d'IV pour :
- stream ciphers
- block ciphers (en dehors de certains mode of operation, dont CBC et CTR)
- padding avec bits aléatoires
Définition de aléatoire :
- f(s) où, ignorant s, chaque aₙ a une probabilité de 1/w d'être l'output, pour chaque a de l'output (équivaut à diffusion)
- si l'on peut deviner s -> probabilité == 1 -> plus aléatoire
- si probabilité est différente de 1/w mais != 1, alors il y a un "bias"
- bias aide les PRNG attaques
- cependant d'un point de vue théorique, ne signifie pas que c'est déterministe (pas aléatoire), mais que l'aléatoirité
est mappée selon une "distribution" donnée
/dev/random vs /dev/urandom :
- urandom est :
- pseudo-aléatoire (donc insecure)
- rapide avec une vitesse constante (unblocked).
- random :
- utilise un entropy pool, est réellement aléatoire (basé sur des sensors du PC)
- a une vitesse aléatoire (blocked), et est quasiment toujours bien plus lent.
- L'entropy disponible peut être lue à l'instant présent dans /proc/sys/kernel/random/entropy_avail.
- L'entropy pool semble notamment utiliser les touches tapées et les mouvements de souris.