%20para%20generar%20stack_canary%20o%20stack_top%3F.png)
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_canary
y stack_top
son 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_int
no 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/urandom
y get_random_bytes()
vinculados al mismo grupo de entropía interno. Es muy posible drenarlo cuando se usa solo para RNG y provocar /dev/random
que se bloquee y /dev/urandom
se produzca una salida de baja entropía. Esta condición de baja entropía crea problemas para las criptomonedas.