Ningún motor de números aleatorios de la biblioteca estándar de C++ es criptográficamente seguro

Everything should be a random number generator

La biblioteca `<random>` de C++ separa los generadores de bits uniformes de las distribuciones estadísticas: los motores (linear congruential, Mersenne Twister, subtract with carry y, desde C++26, Philox) producen secuencias pseudoaleatorias a partir de una semilla, y las distribuciones las convierten en valores uniformes, normales, Poisson y demás. Cada motor ofrece un equilibrio distinto entre velocidad, estado y calidad espectral, pero ninguno sirve para criptografía: para eso hay que recurrir a bibliotecas como OpenSSL.

Ninguno de estos motores de números aleatorios es criptográficamente seguro. Como en cualquier operación de seguridad, debe usarse una biblioteca criptográfica para ese fin (por ejemplo, `RAND_bytes` de OpenSSL).

Más de este día

2026-11-08