¿Qué tan aleatorio es crypto # randomBytes?

¿Qué tan aleatorio es crypto.randomBytes(20).toString('hex') ?

Tan fácil como eso, todo lo que necesito saber.

¿Qué tan aleatorio es crypto.randomBytes() ? Por lo general, lo suficientemente aleatorio para cualquier propósito que necesite .


crypto.randomBytes() genera datos aleatorios criptográficamente seguros :

crypto.randomBytes (tamaño [, callback])

Genera datos pseudoaleatorios criptográficamente fuertes . El argumento de tamaño es un número que indica el número de bytes a generar.

Esto significa que los datos aleatorios son lo suficientemente seguros como para usarlos con fines de cifrado. De hecho, la función es solo una envoltura alrededor de la función RAND_bytes() OpenSSL. Esta parte de su documentación declara:

RAND_bytes obtendrá bytes aleatorios criptográficamente fuertes. Los bytes criptográficamente fuertes son adecuados para necesidades de alta integridad, como la generación de claves a largo plazo. Si su generador está utilizando un algoritmo de software, los bytes serán pseudoaleatorios (pero criptográficamente fuertes).

A menos que tenga un generador de números aleatorios de hardware, los bytes serán pseudoaleatorios, generados de manera predecible a partir de un valor semilla. La semilla se genera a partir de una fuente específica del sistema operativo ( /dev/urandom en sistemas similares a Unix, CryptGenRandom en Windows). Mientras su semilla sea ​​relativamente aleatoria y no sea conocida por un atacante, los datos producidos aparecerán totalmente aleatorios.

Si lo desea, puede realizar la prueba descrita aquí :

Dada cualquier secuencia arbitraria de dígitos binarios, es posible examinarla utilizando técnicas estadísticas. Hay varios conjuntos de pruebas estadísticas disponibles, como STS (Statistical Test Suite), disponibles en la página de GENERACIÓN DE NÚMEROS ALEATORIOS DEL NIST. Esta suite proporciona una serie de pruebas diferentes que incluyen:

  • La prueba de frecuencia (Monobit): verifica si la proporción de 0s y 1s en una secuencia dada es aproximadamente como se esperaría
  • La prueba de ejecuciones: prueba si el número de ejecuciones de dígitos idénticos consecutivos de longitudes variables dentro de una secuencia dada es el esperado
  • La carrera más larga de un bloque: confirma si la ejecución más larga de una secuencia es la esperada

Eso le daría una buena indicación de cuán aleatorio es su generador en su sistema. Sin embargo, puede estar seguro de que es prácticamente indistinguible de una fuente verdaderamente aleatoria, por lo que debería ser lo suficientemente aleatorio para casi cualquier aplicación.

    Intereting Posts