21 votos

¿Es Arduino ideal para hacer un HRNG (generador de números aleatorios por hardware)?

Estoy diseñando un generador de números aleatorios por hardware que utilizará múltiples fuentes de entropía ( combinado ):

  • Luz ambiental
  • Sonido ambiente (y niveles sonoros)
  • Temperatura ambiente
  • Humedad ambiente
  • Posición del propio dispositivo (boca abajo, inclinado a la izquierda, inclinado a la derecha, etc.)
  • Otras fuentes en el futuro, posiblemente incluso datos GPS (marcado posible porque dos usuarios pueden estar uno al lado del otro, por lo tanto, posiblemente determinista si los conoces).

Mi idea es fabricar un "recargador" de entropía que la gente pueda llevar consigo durante el día mientras sigue escribiendo en una unidad USB.

Al cabo de unas horas, el usuario dispondrá de un buen fondo de entropía de ~4 GB que podrá conectar a un PC y utilizar. No puedo permitirme los carísimos QRNG basados en la luz o en la desintegración radiactiva, así que estoy intentando inventar algo más barato.

En tu opinión, ¿es Arduino la mejor opción para crear este prototipo? Si no es así, ¿qué recomendarías?

22voto

PhilPursglove Puntos 257

Creo que querrás seguir el camino que sugiere busz. Busca el concepto "ruido de diodo". Las uniones PN en diodos y transistores pueden producir ruido blanco gaussiano casi perfecto. El muestreo que debe ser una fuente de entropía que es mejor que cualquier fuente ambiental.

El problema con la mayoría de los datos ambientales es que los valores no cambian mucho con el tiempo: la temperatura, la humedad, la luz y el sonido tienen menos de un orden de magnitud de variabilidad con modos realmente fuertes. Un acelerómetro para medir el movimiento podría ser una buena fuente de variabilidad si se instalara en una persona, pero probablemente habría que procesar un poco la señal para eliminar los modos normales de oscilación presentes en el movimiento humano. Una fuente de luz y sonido ambiental podría tener una variabilidad bastante alta si se colocara en un espacio urbano de alta densidad, pero de nuevo creo que habría mucha repetición. Sigo pensando que la mejor fuente de entropía sería bajar hacia propiedades físicas fundamentales de los materiales, como el ruido de los diodos, en lugar de subir de escala y buscar factores ambientales capaces de ser leídos por un microcontrolador.

8voto

Bryan Denny Puntos 18960

Existen algunos circuitos interesantes para HRNG sin necesidad de fuentes de entropía ambiental: http://www.cryogenius.com/hardware/rng/ http://robseward.com/itp/adv_tech/random_generator/ y más...

Sin duda es posible adaptar uno de estos circuitos a un Escudo Arduino . El Arduino actuaría entonces como pasarela entre el HRNG y un PC.

Si realmente necesitas entrada de entropía ambiental, el arduino tiene 6 canales de entrada analógica para poder leer en voz alta casi cualquier sensor que se le ocurra y utilizar los datos como fuente para una semilla aleatoria.

6voto

fearphage Puntos 250

Dos comentarios:

  1. Consulte el libro de Bruce Schneier Milenrama Algoritmo PRNG. El punto principal es que se puede tener una fuente realmente pésima de información aleatoria "verdadera"; siempre y cuando se acumule suficiente con el tiempo, la incertidumbre resultante se puede combinar con técnicas de generación de números pseudoaleatorios de software para obtener números aleatorios decentes.

  2. Por otro lado, tengo que dar la razón a la mayoría de los que han respondido. Las señales de los sensores ambientales, que cambian lentamente, son pésimas fuentes de entropía y podrían ser fácilmente influenciadas. Asegúrate de utilizar algo que se base en el ruido intrínseco del dispositivo, y será insensible a los cambios ambientales.

6voto

svec Puntos 2050

3voto

Robert Puntos 133

Estoy de acuerdo con las dos respuestas anteriores. Las actividades humanas y las lecturas ambientales harán un terrible fondo aleatorio. Pero parece que sólo te convencerás de ello probándolo y comprobando tú mismo la aleatoriedad resultante. Será una gran experiencia de aprendizaje para ti.

Arduino está bien para esta aplicación. Todos los sensores que te interesan se pueden conectar a Arduino y hay bibliotecas Arduino disponibles para esos sensores.

Echa un vistazo a estos tutoriales sobre cómo conectar sensores a Arduino: http://www.ladyada.net/learn/sensors/

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X