Provided by: manpages-es_4.23.1-1_all 

NOMBRE
random, urandom - dispositivos del núcleo para generar números aleatorios
SINOPSIS
#incluir <linux/random.h>
int ioctl(fd, RNDsolicitud, param);
DESCRIPCIÓN
Los archivos especiales /dev/random y /dev/urandom (presentes desde la versión 1.3.30 de Linux)
proporcionan una interfaz con el generador de números aleatorios del núcleo. El archivo /dev/random tiene
1 como número mayor de dispositivo y 8 como número menor de dispositivo. El fichero /dev/urandom tiene 1
como número mayor de dispositivo y 9 como número menor de dispositivo.
El generador de números aleatorios recoge el ruido ambiental procedente de los drivers de dispositivos y
otras fuentes y lo guarda en un 'pool de entropía'. El generador también mantiene una estimación del
número de bits de ruído de dicho pool. Los números aleatorios se crearán en base a este pool.
Linux 3.17 y posteriores proporcionan una interfaz getrandom(2) más sencilla y segura que no requiere
archivos especiales; consulte la página del manual getrandom(2) para obtener más detalles.
Durante su lectura, el dispositivo /dev/urandom muestra bytes aleatorios creados por un generador de
números pseudoaleatorios basado en el pool de entropía. No se crea ningun bloqueo durante la lectura de
este dispositivo, no se libera la CPU, pero pueden darse retrasos apreciables si se solicitan grandes
cantidades de datos.
Cuando se lee justo durante el inicio del equipo, pueden generarse datos antes de iniciarse el pool de
entropía. Si se considera esto un inconveniente, utilice en su lugar getrandom(2) o /dev/random.
El dispositivo /dev/random es una interfaz antigua de una época en la que las primitivas criptográficas
utilizadas en la implementación de /dev/urandom no eran demasiado fiables. Creará bytes aleatorios solo
dentro del número estimado de bits de ruido nuevo en el pool de entropía, bloqueándolos si necesario.
/dev/random es adecuado para aplicaciones que necesitan aleatoriedad de alta calidad y pueden permitirse
retrasos indeterminados.
Cuando el pool de entropía esté vacío, se bloqueará la lectura de /dev/random hasta que se recopile ruido
ambiental adicional. Desde Linux 5.6, el indicador O_NONBLOCK se ignora ya que /dev/random ya no se
bloqueará excepto durante el comienzo del inicio del equipo. En versiones anteriores, si se llama a
open(2) para /dev/random con el indicador O_NONBLOCK, un read(2) posterior no se bloqueará si el número
de bytes solicitado no está disponible sino que se devuelven los bytes disponibles. Si no hay ningún byte
disponible, read(2) devolverá -1 y errno se establecerá en EAGAIN.
El indicador O_NONBLOCK no tiene efecto al abrir /dev/urandom. Al llamar a read(2) para el dispositivo
/dev/urandom, las solicitudes de hasta 256 bytes devolverán tantos bytes como se soliciten y no serán
interrumpidas por ningún controlador de señales. Las lecturas con un búfer por encima de este límite
pueden devolver una cantidad menor del número de bytes solicitado o fallar con el error EINTR, si son
interrumpidas por un controlador de señal.
Desde Linux 3.16, un read(2) de /dev/urandom retornará un máximo de 32 MB. Un read(2) de /dev/random
devolverá un máximo de 512 bytes (340 bytes en versiones anteriores de Linux 2.6.12).
Al escribir en /dev/random o /dev/urandom se actualiza el pool de entropía con esos datos escritos, pero
esto no dará un recuento de entropía más alto. Afectará al contenido leído de ambos archivos, pero no
hará que las lecturas de /dev/random sean más rápidas.
Modo de empleo
La interfaz /dev/random se considera una interfaz heredada y /dev/urandom es la preferida en todos los
casos, con la excepción de aplicaciones que requieren aleatoriedad durante el comienzo del inicio del
equipo. Dichas aplicaciones, deberán usar getrandom(2) en su lugar, porque se bloquearán hasta que se
inicialice el pool de entropía.
Si se guarda un archivo semilla entre los reinicios como se recomienda a continuación, la salida será
criptográficamente segura contra atacantes sin privilegios de administrador tan pronto como se recarga en
la secuencia de inicio, y es perfectamente adecuada para su uso en las claves de sesión de cifrado de
red. Las principales distribuciones de Linux guardan dicho archivo semilla desde, al menos, el año 2000.
Dado que las lecturas de /dev/random pueden bloquearse, los usuarios normalmente querrán abrirlo en modo
sin bloqueo (o realizar una lectura con tiempo de espera). y proporcionar algún tipo de notificación al
usuario si la entropía deseada no está disponible de inmediato.
Configuración
Si en su sistema no existen todavía /dev/random y /dev/urandom, puede crearlos con las siguientes
órdenes:
mknod -m 666 /dev/random c 1 8
mknod -m 666 /dev/urandom c 1 9
chown root:root /dev/random /dev/urandom
Cuando un sistema Linux arranca sin mucha interación del operador, el pool de entropía puede estar en un
estado bastante predecible. Esto reduce la cantidad actual de ruido en el pool de entropía por debajo de
lo recomendado. Para contrarestar este efecto, es posible conservar la información del pool de entropía
entre los reinicios del sistema. Para hacer esto, añada las líneas a un script de shell adecuado que se
ejecute durante la secuencia de inicio:
echo "Iniciando generador de números aleatorios..."
random_seed=/var/run/random-seed
# Guarda una semilla entre reinicios del sistema
# Carga y guarda todo el pool de entropía
if [ -f $random_seed ]; then
cat $random_seed >/dev/urandom
else
touch $random_seed
fi
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
También, añada las siguientes líneas a un guión shell apropiado que se ejecute durante la parada del
sistema Linux:
# Guarda una semilla de aleatoriedad cuando se apaga el sistema
# Guarda todo el pool de entropía
echo "Guardando semilla de entropía..."
random_seed=/var/run/random-seed
touch $random_seed
chmod 600 $random_seed
poolfile=/proc/sys/kernel/random/poolsize
[ -r $poolfile ] && bits=$(cat $poolfile) || bits=4096
bytes=$(expr $bits / 8)
dd if=/dev/urandom of=$random_seed count=1 bs=$bytes
En los ejemplos anteriores, se supone Linux 2.6.0 o posterior, donde /proc/sys/kernel/random/poolsize
devuelve el tamaño del pool de entropía en bits (ver a continación).
Interfaces /proc
Los archivos en el directorio /proc/sys/kernel/random (presente desde Linux 2.3.16) proporcionan
información adicional sobre el dispositivo /dev/random:
entropy_avail
Este archivo de sólo lectura proporciona la entropía disponible, en bits. Ésta será un número en
el intervalo de 0 a 4096.
poolsize
Este archivo proporciona el tamaño del pool de entropía. El formato de este archivo varía según
las versiones del kernel:
Linux 2.4:
Este archivo proporciona el tamaño del pool de entropía en bytes. Normalmente, este archivo
tendrá el valor 512, pero es posible escribir en él y se puede cambiar a cualquier valor
para el cual haya un algoritmo disponible. Las opciones son 32, 64, 128, 256, 512, 1024 o
2048.
Linux 2.6 y posterior:
Este archivo es de sólo lectura y proporciona el tamaño del pool de entropía en bits.
Contiene el valor 4096.
read_wakeup_threshold
Este archivo contiene los bits de entropía necesarios para reactivar procesos en pausa esperando
entropía de /dev/random. El valor predeterminado es 64.
write_wakeup_threshold
Este archivo contiene la cantidad de bits de entropía por debajo de los cuales se activan procesos
que hacen un select(2) o poll(2) para acceso de escritura a /dev/random. Estos valores se pueden
modificar escribiendo en los archivos.
uuid y boot_id
Estos archivos de solo lectura contienen cadenas aleatorias como
6fw3a24b-31f4-4bd4-a9b9-6b9be13e1fe9. El primero se genera de nuevo para cada lectura, el segundo
se genera sólo una vez.
interfaz ioctl(2)
Las siguientes solicitudes ioctl(2) se definen en descriptores de archivos conectados bien a /dev/random
o a /dev/urandom. Todas las solicitudes realizadas interactuarán con el pool de entropía de entrada, lo
que afectará tanto a /dev/random como a /dev/urandom. La capacidad CAP_SYS_ADMIN es necesaria para todas
las solicitudes salvo para RNDGETENTCNT.
RNDGETENTCNT
Recupera el recuento de entropía del pool de entrada; el contenido será el mismo que el del
archivo entropy_avail en proc. El resultado se almacenará en el int señalado por el argumento.
RNDADDTOENTCNT
Incrementa o disminuye el recuento de entropía del pool de entrada por el valor señalado en el
argumento.
RNDGETPOOL
Eliminado en Linux 2.6.9.
RNDADDENTROPY
Agrega algo de entropía adicional al grupo de entrada, incrementando el recuento de entropía. Es
diferente a escribir en /dev/random o /dev/urandom, lo que solo agregaría algunos datos pero no
incrementaría el recuento de entropía. Se utiliza la siguiente estructura:
struct rand_pool_info {
int entropy_count;
int buf_size;
__u32 buf[0];
};
Aquí entropy_count es el valor agregado (o restado) al recuento de entropía, y buf es el búfer de
tamaño buf_size que se agrega al pool de entropía.
RNDZAPENTCNT
RNDCLEARPOOL
Pone a cero el recuento de entropía de todos los pools y agrega algunos datos del sistema (como el
reloj) a dichos pools.
ARCHIVOS
/dev/random
/dev/urandom
NOTAS
Para obtener una descripción general y una comparación de las distintas interfaces que se pueden utilizar
para obtener aleatoriedad, consulte random(7).
ERRORES
Durante el comienzo del inicio del sistema, la lectura de /dev/urandom pueden devolver datos antes de que
se inicialice el pool de entropía.
VÉASE TAMBIÉN
mknod(1), getrandom(2), random(7)
RFC 1750, "Randomness Recommendations for Security"
TRADUCCIÓN
La traducción al español de esta página del manual fue creada por Juan Piernas <piernas@ditec.um.es> y
Marcos Fouces <marcos@debian.org>
Esta traducción es documentación libre; lea la GNU General Public License Version 3 o posterior con
respecto a las condiciones de copyright. No existe NINGUNA RESPONSABILIDAD.
Si encuentra algún error en la traducción de esta página del manual, envíe un correo electrónico a
debian-l10n-spanish@lists.debian.org.
Páginas de Manual de Linux 6.8 2 Mayo 2024 random(4)