/dev/random
utilise les timings des interruptions du noyau pour ajouter au pool d'entropie. La quantité d'entropie dans le pool est suivie dans une variable nommée entropy_count
.
Voici l'extrait de code pertinent de random.c
. Il représente le temps (en jiffies je pense) entre les deux dernières interruptions en variable delta
et les différences de deltas en tant que delta2
.
delta = time - state->last_time;
state->last_time = time;
delta2 = delta - state->last_delta;
state->last_delta = delta;
if (delta < 0) delta = -delta;
if (delta2 < 0) delta2 = -delta2;
delta = MIN(delta, delta2) >> 1;
for (nbits = 0; delta; nbits++)
delta >>= 1;
r->entropy_count += nbits;
/* Prevent overflow */
if (r->entropy_count > POOLBITS)
r->entropy_count = POOLBITS;
Il semble que l'estimation de l'entropie ajoutée soit essentiellement le plancher (pas le plafond en raison du décalage initial avant la boucle) du logarithme de base 2 du delta. Cela a un certain sens intuitif, bien que je ne sois pas sûr des hypothèses qui seraient nécessaires pour que cela soit formellement correct.
Donc, ma première question est "quel est le raisonnement derrière cette estimation?"
Ma deuxième question concerne delta = MIN(delta, delta2) ...
. Qu'est-ce que cela fait? Pourquoi prendre le minimum de ce delta et du dernier? Je ne sais pas ce que cela est censé accomplir - peut-être que cela améliore l'estimation, peut-être juste plus conservateur.
Edit: J'ai trouvé un article qui spécifie l'estimation , mais il ne donne pas vraiment d'argument raisonné pour cela (même s'il décrit certaines conditions informelles que l'estimateur devrait remplir).
Autres ressources évoquées dans les commentaires:
- Wikipédia sur
/dev/random
et/dev/urandom
- Un papier qui essaie de l'expliquer (je suis sceptique à ce sujet, voir commentaires)
- Un article de blog sur les
/dev/random
commentaires du gars qui a écrit le code ci-dessus. - Une réponse secutity.SE sur le
/dev/random
pool d'entropie.
/dev/random
est sur une base fragile - voir Feeding / dev / random entropy pool? . J'ai cinglé Thomas dans l'espoir qu'il répondra à votre question.