Math.random() vs Crypto.getRandomValue()


Math.random() realmente es un generados de números pseudoaleatorios (PRNG). El número aleatorio se deriva de un estado interno del dispositivo que es modificado mediante un algoritmo fijo para cada nuevo número aleatorio. El resultado es una secuencia de numeros determinista.

Crypto.getRandomValues() utiliza fuentes de entropía seguras del sistema subyacente (como el generador de números aleatorios del sistema operativo), para generar números aleatorios que son adecuados para aplicaciones que requieren alta seguridad. Este extra de seguridad pueden llevar a una ejecución más lenta en comparación con métodos más simples.

crypto.getRandomValues(new Uint8Array(10));
// Uint8Array(10) [85, 215, 117, 156, 114, 11, 222, 34, 65, 119]