Provided by: manpages-es_4.27.0-1_all bug

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.9.1                   2 Mayo 2024                                         random(4)