Podría depender de su sistema operativo. Me imagino que los núcleos recientes de GNU/Linux podrían usar los generadores aleatorios de hardware para, p. Ej. /dev/random
(ya que la página del manual random(4)
sugiere que usa ruido), pero podría estar equivocado.
La práctica habitual es utilizar algún generador común pseudo-aleatorio (como por ejemplo, el random(3)
función estándar), pero a la semilla que, cuando se inicia la aplicación, de alguna fuente más al azar (por ejemplo, la lectura de /dev/urandom
, utilizando getpid()
y algo de la hora actual con gettimeofday()
, etc.).
Muy probablemente, conseguir números aleatorios muy buenos es un arte negro, al menos para mí. Pero la solución anterior tiene al menos la ventaja de no ser fácilmente reproducible de una aplicación a otra.
Si su aplicación es de larga duración (por ejemplo, un servicio web que se ejecuta en el mismo proceso durante muchas horas), quizás pueda volver a inicializar su Pseudo generador de números aleatorios de vez en cuando. Para un servidor web, me imagino que también podría usar los tiempos de solicitud (midiéndolos con granularidad de milisegundos) como fuente de aleatoriedad (para inicializar su PRNG).
¿Qué plataforma de sistema operativo? No me sorprendería si se hace automáticamente tanto en Linux como en Windows, en función de las capacidades de hardware. – unwind
Estoy desarrollando bajo Windows 7, pero mi proyecto usa Qt y eventualmente apuntaré a Windows y Linux, y si la compatibilidad de cacao de Qt se repara pronto, espero que macOS también – dtech
Simplemente escriba un poco de ensamblado en línea para ejecutar la instrucción RDRAND. O espera a que tu compilador sea compatible con lo intrínseco. O mejor aún, espere un par de años, por lo que tendrá algunas probabilidades de que su usuario tenga una máquina que lo soporte. Manual está aquí: http://software.intel.com/file/36945 –