random(7) Miscellaneous Information Manual random(7)
NOMBRE
random - vision general de las interfaces para la obtencion de datos
aleatorios
DESCRIPCION
El generador de numeros aleatorios del nucleo se basa en la entropia
recogida de los controladores de dispositivos y otras fuentes de ruido
ambiental para sembrar un generador pseudoaleatorio de numeros
criptograficamente seguro (CSPRNG). En su diseno se primo la seguridad
sobre la velocidad.
Las siguientes interfaces proporcionan acceso a la salida del nucleo
CSPRNG:
o Los dispositivos /dev/urandom y dev/random se describen en random
(4). Estos dispositivos existen desde los primeros tiempos de Linux,
tambien estan disponibles en muchos otros sistemas.
o La llamada de sistema getrandom(2) especifica de Linux, disponible
desde Linux 3.17. Esta llamada del sistema proporciona acceso a la
misma fuente que /dev/urandom (llamada la fuente urandom en este
documento) o a la mismo fuente como /dev/random. La fuente
predeterminada es urandom; la fuente random se selecciona mediante
la opcion GRND_RANDOM para la llamada del sistema. La funcion
getentropy(3) proporciona una interfaz ligeramente mas portable a un
nivel superior de getrandom(2).)
Inicio del pool de entropia
El nucleo recoge entropia del entorno. Cuando se ha recogido un numero
suficiente de bits aleatorios, el pool de entropia se considera
iniciado.
Seleccion de la fuente de aleatoriedad
Salvo que se desee generar claves pensando a largo plazo (y
probablemente ni siquiera asi), no deberia estar leyendo desde el
dispositivo /dev/random o empleando getrandom (2) con la opcion
GRND_RANDOM. En su lugar deberia leer desde el dispositivo /dev/urandom
o emplear getrandom(2) sin la opcion GRND_RANDOM. Los algoritmos
criptograficos utilizados para la fuente de urandom son bastante
conservadores, y deberian ser suficientes para todos los casos.
La desventaja de GRND_RANDOM y de leer desde /dev/random es que la
operacion puede bloquear por un periodo de tiempo indefinido. La
gestion de las solicitudes parcialmente cumplidas que pueden ocurrir
cuando se utiliza GRND_RANDOM o cuando se lee desde /dev/random
aumentan la complejidad del codigo.
Monte Carlo y otras aplicaciones de muestreo probabilistico
El uso de estas interfaces para proporcionar grandes cantidades de
datos para simulaciones de Monte Carlo u otros programas/algoritmos que
estan haciendo muestreo probabilistico sera lento. Ademas, es
innecesario, ya que esas aplicaciones no necesitan numeros aleatorios
criptograficamente seguros. En su lugar, utilice las interfaces
descritas en esta pagina para obtener una pequena cantidad de datos
para sembrar un generador de numeros pseudoaleatorio en el espacio de
usuario para el uso de estas aplicaciones.
Comparacion entre getrandom, /dev/urandom y /dev/random
La siguiente tabla resume el comportamiento de las diversas interfaces
que se pueden utilizar para obtener datos aleatorios. GRND_NONBLOCK se
puede usar para controlar el comportamiento de bloqueo de getrandom(2).
La ultima columna de la tabla considera el caso que puede ocurrir al
comienzo del inicio cuando aun no esta iniciado el pool de entropia.
+--------------+-----------------+------------------+--------------------+
|Interfaz | Pool | Comportamiento | Comportamiento |
| | | de bloqueo | cuando el pool aun |
| | | | no esta preparado |
+--------------+-----------------+------------------+--------------------+
|/dev/random | Pool de bloqueo | Si el nivel de | Bloquea hasta que |
| | | entropia es | se haya acumulado |
| | | demasiado bajo, | suficiente |
| | | bloquea hasta | entropia |
| | | que haya | |
| | | suficiente | |
+--------------+-----------------+------------------+--------------------+
|/dev/urandom | Salida CSPRNG | Nunca bloquea | Devuelve la salida |
| | | | de un CSPRNG no |
| | | | iniciado |
| | | | (seguramente de |
| | | | baja entropia, no |
| | | | valido con fines |
| | | | criptograficos) |
+--------------+-----------------+------------------+--------------------+
|getrandom() | Igual a | No bloquea una | Bloquea hasta que |
| | /dev/urandom | vez que el pool | el pool este |
| | | este preparado | preparado |
+--------------+-----------------+------------------+--------------------+
|getrandom() | Igual que | Si el nivel de | Bloquea hasta que |
|GRND_RANDOM | /dev/random | entropia es | el pool este |
| | | demasiado bajo, | preparado |
| | | bloquea hasta | |
| | | que haya | |
| | | suficiente | |
+--------------+-----------------+------------------+--------------------+
|getrandom() | Igual a | No bloquea una | EAGAIN |
|GRND_NONBLOCK | /dev/urandom | vez que el pool | |
| | | este preparado | |
+--------------+-----------------+------------------+--------------------+
|getrandom() | Igual que | EAGAIN Si no se | EAGAIN |
|GRND_RANDOM + | /dev/random | dispone de | |
|GRND_NONBLOCK | | suficiente | |
| | | entropia | |
+--------------+-----------------+------------------+--------------------+
Generacion de claves criptograficas
El tamano de la semilla necesaria para generar una clave criptografica
equivale al tamano de la clave efectiva de la llave. Por ejemplo, una
llave privada RSA de 3072 bits o Diffie-Hellman tiene un tamano de
llave efectivo de 128 bits (requiere aproximadamente 2^128 operaciones
para romper) por lo que un generador de llaves solo necesita 128 bits
(16 bytes) de /dev/random.
Aunque es razonable un margen de seguridad por encima de ese minimo
frente afallos en el algoritmo CSPRNG, ningun primitivo criptografico
disponible actualmente puede prometer mas de 256 bits de seguridad, por
lo que si cualquier programa lee mas de 256 bits (32 bytes) del nucleo
pool aleatorio por invocacion, o por un intervalo razonablemente
'resembrado' (no menos de un minuto), debe tomarse como una senal de
que la criptografia no esta habilmente implementada.
VEASE TAMBIEN
getrandom(2), getauxval(3), getentropy(3), random(4), urandom,(4)
signal(7)
TRADUCCION
La traduccion al espanol de esta pagina del manual fue creada por
Marcos Fouces
Esta traduccion es documentacion libre; lea la GNU General Public
License Version 3 o
posterior con respecto a las condiciones de copyright. No existe
NINGUNA RESPONSABILIDAD.
Si encuentra algun error en la traduccion de esta pagina del manual,
envie un correo electronico a .
Linux man-pages 6.18 8 Febrero 2026 random(7)