urandom y dispositivos aleatorios

Finalidad

Fuente de salida aleatoria segura.

Descripción

Los dispositivos de caracteres /dev/random y /dev/urandom proporcionan una salida aleatoria criptográficamente segura generada a partir de tiempos de interrupción o de entrada grabados en los dispositivos.

El dispositivo /dev/random está pensado para proporcionar una salida aleatoria criptográficamente segura de alta calidad y solo devolverá una salida para la que haya suficiente (una cantidad igual o mayor) entrada aleatoria disponible para generar la salida. Si no hay suficiente entrada aleatoria disponible, las lecturas del dispositivo /dev/random se bloquearán hasta que se pueda satisfacer la solicitud a menos que se haya especificado el distintivo O_NONBLOCK al abrir el dispositivo, en cuyo caso se devolverá con el código de error EAGAIN tanta salida de alta calidad como se pueda generar.

El dispositivo /dev/urandom proporciona una fuente fiable de salida aleatoria, sin embargo, la salida no se generará a partir de una cantidad igual de entrada aleatoria si no hay suficiente entrada disponible. Las lecturas del dispositivo /dev/urandom siempre devuelven la cantidad de salida solicitada sin bloqueo. Si no hay suficiente entrada aleatoria disponible, la entrada alternativa será procesada por el generador de números aleatorios para proporcionar salida criptográficamente segura, la fuerza de la cual reflejará la fuerza de los algoritmos utilizados por el generador de números aleatorios. La salida generada sin entrada aleatoria es teóricamente menos segura que la salida generada a partir de entrada aleatoria, por lo que se debe utilizar /dev/random para las aplicaciones para las que se necesita un alto nivel de confianza en la seguridad de la salida.

Los datos escritos en cualquiera de los dispositivos se añaden a la agrupación de entrada aleatoria almacenada y se pueden utilizar para generar la salida. Las grabaciones se comportan de forma idéntica para ambos dispositivos y no se bloquearán.

Detalles de la implementación

Los dispositivos /dev/random y /dev/urandom se crean a partir de números mayores y menores asignados por el subsistema de configuración de dispositivos cuando se carga el generador de números aleatorios, por lo que los nombres de dispositivo siempre se deben utilizar al intentar localizar o abrir los dispositivos. Los dispositivos se suprimen cuando se descarga el generador de números aleatorios. Cuando el sistema se apaga utilizando el mandato de conclusión, la salida se obtiene del dispositivo /dev/urandom y se graba de nuevo en el dispositivo /dev/random cuando el generador de números aleatorios se carga en el siguiente arranque para proporcionar entropía de inicio al generador, mejorando la calidad de la entrada aleatoria almacenada después del arranque.

La entrada se recopila de los tiempos de interrupción cuando la agrupación de entrada aleatoria almacenada cae por debajo de la mitad completa y se sigue reuniendo hasta que la agrupación vuelve a estar llena. Este proceso provoca un impacto de rendimiento menor en todas las interrupciones externas mientras se reúnen los tiempos, que cesa cuando las horas dejan de estar reunidas. Los datos escritos en cualquiera de los dispositivos aleatorios también contribuirán a la agrupación de entrada aleatoria almacenada y pueden influir en la salida, por lo que la escritura en estos dispositivos debe ser una operación privilegiada. Esto es aplicado por los permisos de los dispositivos, por lo que puede ser cambiado por el administrador para ser completamente anulado si lo desea.