Dave respuesta, bastante bien continuar con ella, pero para aclarar un poco más en la segunda opción:
un hardware real generador de números aleatorios se utiliza un físico de la entropía de la fuente. Dicho de entropía de la fuente podría ser cósmico de radiación, ruido eléctrico, avanlanche efecto de invertir la sesgada (diodo o transistor BJT), circuito de chua, etc. Al menos determinista de la entropía de la fuente, mejor será la calidad de la aleatorios de salida. Un ideal de la entropía de la fuente sería el uso de una física cuántica efecto, o algo que quizás no se modelan con ecuaciones deterministas.
Otro factor importante con generadores de números aleatorios es que la entropía de la fuente puede generar sólo una cantidad limitada de entropía por unidad de tiempo. Un buen ejemplo es el circuito de chua: mientras que es bastante aleatorio, que tiene muy baja velocidad y no puede ser utilizado para aplicaciones en la vida real.
En muchos procesadores y microcontroladores con construido-en generadores de números aleatorios, el reloj de la deriva de los 2 a los 4 relojes que están deliberatly sincronizan incorrectamente se utiliza. A continuación, utilizan filtros analógicos y digitales para aleatorizar aún más el patrón y el cambio en el resultado en un registro. La realización de este filtrado requiere un par de ciclos, lo que explica la cantidad mínima de ciclos requeridos en un determinado reloj antes de la más reciente está disponible.
El reloj de la deriva no es un efecto cuántico, por lo que podría ser modelo, pero es lo suficientemente aleatorios, debido a que se depende de un montón de parámetros, tales como la temperatura, el silicio proceso, la frecuencia de operación, el ruido eléctrico de fondo, radiaciones, etc.
En aplicaciones donde el hardware RNG no tiene suficiente rendimiento (como en exigentes aplicaciones criptográficas), es muy común utilizar el hardware RNG como una semilla para un pseudo generador de números aleatorios, tales como la función rand() en el sdtlib. Sin embargo, de aplicación general, proporcionar una mejor aplicación de la función rand (), que está diseñada específicamente para ejecutar desde una semilla que puede ser descartados muy a menudo con verdaderos valores aleatorios. En el más reciente procesador Intel integrado con el hardware de generadores de números aleatorios, el pseudo-aleatorio algoritmo parte está directamente integrado en el silicio, por lo que se realiza por hardware, con un rendimiento muy alto rendimiento aleatorio.
Si la mente sobre el rand() el método en sí, es sólo un methematical de expresión, que está diseñado para generar una gran cantidad de entropía. Lo suficientemente grande dependiendo de la aplicación: para las claves criptográficas de las generaciones, la aleatoriedad es obligado a ser de mayor calidad que la aleatoriedad se requiere para un simple aleatoria shuffle favoritos en tu reproductor de música. Es obvio que cuanto mayor sea la calidad de lo aleatorio de salida, mayor es el coste computacional del número aleatorio.
Las operaciones que intervienen en un número aleatorio son bastante parecida a la de uno de los involucrados en el cálculo del hash MD5 de un archivo: tratan de utilizar un tipo de poco el efecto de avalancha, de modo que un solo bit de cambio en el valor de la semilla de los cambios de la totalidad de la generación de patrón. Como una nota del lado, yo NO recomiendo el uso de MD5 como un generador de números pseudoaleatorios; era sólo un ejemplo. Sería ineficiente y no de manera aleatoria, pero el punto es: si usted alimenta a la misma archivo MD5 hasing algoritmo, siempre obtendrá el mismo determinista de salida, bastante mucho la misma manera que se haría para obtener siempre el mismo resultado de la función rand() si la entrada de la misma semilla, a menos que su implementación depende de la arbitraria de elementos tales como la hora actual.