"Cualquiera que considere métodos aritméticos para producir dígitos aleatorios está, por supuesto, en estado de pecado" \$-\$ John Von Neumann
Una buena fuente de ruido es el ruido de ruptura de un diodo zener. El sencillo esquema siguiente muestra cómo obtener ruido blanco de un zener conectando en cascada dos LNA (amplificadores de bajo ruido) para aumentar el nivel de ruido.
Si no te importa que el ruido sea blanco puedes utilizar simplemente un amplificador opamp con una gran amplificación, con un comparador siguiéndolo. La amplificación del amplificador óptico limita el ancho de banda y, por tanto, la velocidad de cambio de la señal digital. Si es necesario, conecta en cascada dos opamps como los LNAs en el esquema dado para obtener un flujo de bits aleatorios más rápido.
Puedes utilizar el módulo SPI para introducir bytes de bits aleatorios desde este circuito.
(El SPI es sólo una forma sencilla de recoger automáticamente 8 bits aleatorios, no añade ningún nivel de determinismo: la entrada cambia continua y aleatoriamente y nunca se sabe cuál será en el siguiente flanco de reloj. También puedes leer un pin de E/S y desplazar el nivel de ese bit a tu byte de resultado).
Este circuito es una posible solución alternativa, que también se basa en un diodo zener como fuente de ruido:
El esquema menciona el OPA2340 para el amplificador, pero no está claro en el comparador. Mientras que el OPA2340 es razonablemente rápido yo sugeriría utilizar un comparador real ya que suelen ser mucho más rápidos que los opamps. Por ejemplo, el TL3016 tiene un retardo de propagación inferior a 10 ns y un tiempo de subida típico de 0,5 ns. Esto significa que puedes muestrear valores aleatorios más rápidamente sin riesgo de coherencia entre muestras sucesivas.
Para comprobar el generador de números aleatorios, puede comprobar lo siguiente normalidad . Esto significa crear una larga cadena de números aleatorios, cuanto más larga mejor. Lo mejor es transportarla al PC para el análisis. Contar las secuencias de un bit, esa es la 0
s y 1
s. Debería haber aproximadamente el mismo número de cada una. Repite la operación para secuencias de dos bits. Debería haber tantos 00
s como 01
s, 10
s y 11
s. Repetir para secuencias de tres bits, etc.
No soy estadístico, así que puede que haya pruebas mejores o más sencillas. No dude en añadirlas.