/dev/random
usa los tiempos de interrupciones del núcleo para agregar al grupo de entropía. La cantidad de entropía en el grupo se rastrea en una variable denominada entropy_count
.
Aquí está el fragmento de código relevante de random.c
. Representa el tiempo (en jiffies, creo) entre los dos últimos interrupciones en variable delta
y las diferencias en deltas como 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;
Parece que la estimación de la entropía agregada es esencialmente el piso (no el techo debido al desplazamiento de bits inicial antes del bucle) del logaritmo de base 2 delta. Esto tiene un sentido intuitivo, aunque no estoy seguro de qué suposiciones serían necesarias para hacer esto formalmente correcto.
Entonces, mi primera pregunta es "¿cuál es el razonamiento detrás de esta estimación?"
Mi segunda pregunta es sobre delta = MIN(delta, delta2) ...
. ¿Qué hace esto? ¿Por qué tomar el mínimo de este delta y el último? No sé qué se supone que esto debe lograr, tal vez mejore la estimación, tal vez solo sea más conservador.
Editar: he encontrado un documento que especifica la estimación , pero en realidad no da un argumento razonado para ello (aunque sí describe algunas condiciones informales que el estimador debe cumplir).
Otros recursos que han surgido en los comentarios:
- Wikipedia en
/dev/random
y/dev/urandom
- Un documento que trata de explicarlo (soy escéptico al respecto, ver comentarios)
- Una publicación de blog acerca
/dev/random
de los comentarios del tipo que escribió el código anterior. - Una seguridad. Respuesta de SE sobre el
/dev/random
grupo de entropía.
/dev/random
tiene una base inestable: consulte ¿ Alimentación / desarrollo / grupo de entropía aleatorio? . He llamado a Thomas con la esperanza de que responda tu pregunta.