que - diferencias entre aleatorio y urandom
youtube google videos (4)
¿Cuáles son las diferencias entre
/dev/random
y/dev/urandom
?
/dev/random
y /dev/urandom
son interfaces para el generador de números aleatorios del kernel:
- La lectura devuelve una secuencia de bytes aleatorios lo suficientemente fuerte para su uso en criptografía
- Escribirles proporcionará los datos del kernel para actualizar el grupo de entropía
Cuando se trata de las diferencias, depende del sistema de operación:
- En Linux, la lectura de
/dev/random
puede bloquear, lo que limita su uso en la práctica considerablemente - En FreeBSD, no hay ninguno.
/dev/urandom
es solo un enlace simbólico a/dev/random
.
¿Cuándo debería usarlos? ¿Cuándo no debería usarlos?
Es muy difícil encontrar un caso de uso en el que deba usar /dev/random
sobre /dev/urandom
.
Peligro de bloqueo:
- Este es un problema real que tendrá que enfrentar cuando decida usar
/dev/random
. Para usos únicos comossh-keygen
, debería estar bien esperar unos segundos, pero para la mayoría de las otras situaciones no será una opción. - Si usa
/dev/random
, debe abrirlo en modo no bloqueante y proporcionar algún tipo de notificación al usuario si la entropía deseada no está disponible de inmediato.
Seguridad:
- En FreeBSD, no hay diferencia de todos modos, pero también en Linux
/dev/urandom
se considera seguro para casi todos los casos prácticos (por ejemplo, ¿ es seguro un Rand de / dev / urandom para una clave de inicio de sesión? Y Mitos sobre / dev / urandom ) . - Las situaciones donde podría marcar la diferencia son casos extremos como una nueva instalación de Linux. Para citar de la página man de Linux:
La interfaz
/dev/random
se considera una interfaz heredada, y/dev/urandom
es preferible y suficiente en todos los casos de uso, con la excepción de las aplicaciones que requieren aleatoriedad durante el arranque temprano; para estas aplicaciones, se debe usar getrandom (2), porque se bloqueará hasta que se inicialice el grupo de entropía.Si se guarda un archivo semilla durante el reinicio como se recomienda a continuación (todas las distribuciones principales de Linux lo han hecho desde 2000 al menos), la salida es criptográficamente segura contra atacantes sin acceso raíz local tan pronto como se recarga en la secuencia de arranque, y es perfectamente adecuada para claves de sesión de encriptación de red. Como las lecturas de
/dev/random
pueden bloquearse, los usuarios generalmente querrán abrirlo en modo no bloqueante (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.
Recomendación
Como regla general, /dev/urandom
debe usar para todo excepto para las claves GPG / SSL / SSH de vida larga.
Estoy tratando de descubrir las diferencias entre los archivos /dev/random
y /dev/urandom
- ¿Cuáles son las diferencias entre
/dev/random
y/dev/urandom
? - ¿Cuándo debería usarlos?
- ¿cuándo no debería usarlos?
Respuesta corta
Usa /dev/urandom
Respuesta larga
Ambos están alimentados por el mismo generador de números pseudoaleatorios criptográficamente seguro (CSPRNG). El hecho de que /dev/random
espera la entropía (o más específicamente, espera que la estimación del sistema de su entropía alcance un nivel apropiado) solo hace la diferencia cuando se usa un algoritmo de seguridad teórica de la información, a diferencia de una seguridad computacionalmente segura algoritmo. El primero abarca algoritmos que probablemente no esté utilizando, como Shamir''s Secret Sharing y One-time pad. Este último contiene algoritmos que realmente usa y le interesan, como AES, RSA, Diffie-Hellman, OpenSSL, GnuTLS, etc.
Por lo tanto, no importa si usa números de /dev/random
ya que están siendo extraídos de un CSPRNG de todos modos, y es "teóricamente posible" romper los algoritmos con los que probablemente los esté usando.
Por último, ese bit "teóricamente posible" significa exactamente eso. En este caso, eso significa usar toda la potencia de computación en el mundo, por la cantidad de tiempo que ese universo ha existido para descifrar la aplicación.
Por lo tanto, no tiene sentido usar /dev/random
Entonces usa /dev/urandom
Fuentes
Siempre use / dev / urandom.
/ dev / urandom y / dev / random usan el mismo generador de números aleatorios. Ambos están sembrados por el mismo grupo de entropía. Ambos darán un número igualmente aleatorio de un tamaño arbitrario. Ambos pueden dar una cantidad infinita de números aleatorios con solo una semilla de 256 bits. Siempre que la semilla inicial tenga 256 bits de entropía, puede tener un suministro infinito de números aleatorios arbitrariamente largos. No obtienes nada por usar / dev / random. El hecho de que haya dos dispositivos es un defecto en la API de Linux.
Si le preocupa la entropía, usar / dev / random no va a arreglar eso. Pero ralentizará tu aplicación sin generar números aleatorios más que / dev / urandom. Y si no le preocupa la entropía, ¿por qué está usando / dev / random en absoluto?
Aquí hay una explicación mucho mejor / más profunda sobre por qué siempre debes usar / dev / urandom: 2uo.de/myths-about-urandom
Usar /dev/random
puede requerir la espera del resultado, ya que utiliza el denominado pool de entropía , donde los datos aleatorios pueden no estar disponibles en este momento.
/dev/urandom
devuelve tantos bytes como el usuario solicitó y, por lo tanto, es menos aleatorio que /dev/random
.
Como se puede leer en la página del manual:
aleatorio
Cuando se lee, el dispositivo
/dev/random
solo devolverá bytes aleatorios dentro del número estimado de bits de ruido en el grupo de entropía./dev/random
debe ser adecuado para usos que requieren una aleatoriedad de muy alta calidad, como la generación de un pad o llave de una sola vez. Cuando el grupo de entropía está vacío, las lecturas de/dev/random
se bloquearán hasta que se recopile ruido ambiental adicional.
urandom
Una lectura del dispositivo
/dev/urandom
no bloqueará la espera de más entropía. Como resultado, si no hay suficiente entropía en el conjunto de entropía, los valores devueltos son teóricamente vulnerables a un ataque criptográfico en los algoritmos utilizados por el controlador. El conocimiento de cómo hacer esto no está disponible en la literatura actual no clasificada, pero es teóricamente posible que tal ataque pueda existir. Si esto es una preocupación en su aplicación, use/dev/random
lugar.
Para fines criptográficos, realmente debería usar /dev/random
por la naturaleza de los datos que devuelve. La posible espera debe considerarse como una compensación aceptable en aras de la seguridad, OMI.
Cuando necesite datos aleatorios rápidamente , debe usar /dev/urandom
por supuesto.