¿Por qué el kernel de Linux usa get_random_int() para generar stack_canary o stack_top?

¿Por qué el kernel de Linux usa get_random_int() para generar stack_canary o stack_top?

Hay un generador de números aleatorios en el kernel de Linux. Esto generalmente se llama LRNG (Generador de números aleatorios de Linux). Podemos usarlo llamando get_random_bytes(). Pero stack_canaryy stack_topson generados por get_random_int(). Aunque el kernel de Linux tiene su propio generador de números aleatorios (LRNG), ¿por qué el kernel de Linux lo genera get_random_int()? Creo que tal vez sea por la eficiencia. ¿Es correcto?

Respuesta1

Justoleer la fuente:

Obtenga una palabra aleatoria para uso interno del kernel únicamente. Similar a urandom pero con el objetivo de reducir al mínimo el conjunto de entropía. Como resultado, el valor aleatorio no es criptográficamente seguro, pero para varios usos el costo de agotar la entropía es demasiado alto.

Es por eso que get_random_intno solo toma la salida de get_random_bytes. Da la casualidad de que los argumentos aquí son erróneos por dos razones:

  • La entropía en realidad no se agota. Eso es sólo un cálculo falso dentro del núcleo.
  • Incluso si la entropía se agotara, no habría razón para no utilizar un generador de números pseudoaleatorios criptográficamente seguro en lugar de una construcción ad hoc. Simplemente use una instancia separada de la que agota la entropía /dev/random. El rendimiento podría ser una razón, pero la diferencia entre un CSPRNG adecuado como Hash_DRBG/SHA-2 y la construcción ad hoc aquí usando MD5 es pequeña.

Respuesta2

Linux /dev/random, /dev/urandomy get_random_bytes()vinculados al mismo grupo de entropía interno. Es muy posible drenarlo cuando se usa solo para RNG y provocar /dev/randomque se bloquee y /dev/urandomse produzca una salida de baja entropía. Esta condición de baja entropía crea problemas para las criptomonedas.

información relacionada