Cómo implementar la generación de números aleatorios a nivel de hardware

Siempre puede implementar cualquiera de los algoritmos de generador de números pseudoaleatorios en hardware. El más simple y el más utilizado es el registro de retroalimentación de desplazamiento lineal. Tome un registro de desplazamiento y toque algunos de los bits, engánchelos y vuelva a introducirlos en la entrada de la palanca de cambios. Hay una clave para elegir qué bits tocar y cómo combinarlos. En general, los bits de números primos y una transformación lógica que no es lineal y está bastante distribuida (piense en XOR) son buenas opciones. Hay una buena cantidad de literatura sobre cómo tomar estas decisiones, por lo que no las cubriré aquí.

Con una ALU y algunos buffers, puede implementar un generador lineal congruencial con un poco de esfuerzo. Otros algoritmos requerirán más estado a nivel de hardware. Los FPGA hacen esto más fácil, pero todavía es mucho hardware para la tarea. Si está en hardware, puede comenzar a recopilar entropía real y tener una fuente de números aleatorios en lugar de una máquina de estados que genere largas secuencias aleatorias similares.

Lo más sencillo es detectar el ruido que se produce en las uniones PN de silicio. A medida que aumenta la temperatura y la corriente, aumenta el ruido espurio. Hay varios ejemplos de circuitos que se han sintonizado para generar el ruido a una velocidad bastante constante a lo largo del tiempo. Tomar el tiempo entre el ruido te da algunos bits de entropía en los bits de orden más bajo.

También puede medir el tiempo entre las emisiones radiactivas de un elemento en descomposición. Esto se vuelve más difícil ya que necesita una fuente y un sensor para la emisión. Sin embargo, la calidad de la entropía se considera excelente.

Use el módulo temporizador (de un microcontrolador) para incrementar una variable (que retrocede a 0 en algún momento). Cuando desee un número aleatorio, simplemente tome el valor de esa variable. Este valor es teóricamente aleatorio.