O Arduino é ideal para criar um HRNG (gerador de números aleatórios de hardware)?

21

Estou montando um design para um gerador de números aleatórios de hardware que utilizará várias fontes de entropia ( combinadas ):

  • Luz ambiente
  • Som ambiente (e níveis de som)
  • Temperatura ambiente
  • Umidade ambiente
  • Posição do próprio dispositivo (de cabeça para baixo, inclinado para a esquerda, intitulado para a direita etc.)
  • Outras fontes no futuro, possivelmente até dados de GPS (marcadas como possíveis porque dois usuários podem estar próximos um do outro, portanto, possivelmente determinísticos, se você os conhecer.)

Minha idéia é tornar um pool de entropia 'recarregador' que as pessoas possam carregar consigo durante o dia enquanto ele continua gravando em um drive USB.

Após algumas horas, o usuário terá um bom pool de entropia de ~ 4 GB que pode ser conectado a um PC e usado. Não posso pagar os QRNGs realmente caros, baseados em decaimento leve ou radioativo, por isso estou tentando criar algo mais barato.

Na sua opinião, o Arduino é a melhor escolha para criar protótipos? Caso contrário, o que você recomendaria?

Tim Post
fonte

Respostas:

22

Eu acho que você vai querer seguir o caminho que busz sugere. Procure o conceito "ruído do diodo". As junções PN em diodos e transistores podem produzir um ruído branco gaussiano quase perfeito. Amostras que devem ser uma fonte de entropia melhor do que qualquer fonte ambiental.

O problema com a maioria dos dados ambientais / ambientais é que os valores não mudam muito com o tempo: temperatura, umidade, luz e som têm menos do que uma ordem de magnitude de variabilidade com modos realmente fortes. Um acelerômetro para medir o movimento pode ser uma boa fonte de variabilidade se montado em uma pessoa, mas você provavelmente precisará fazer um pouco de processamento de sinal para remover os modos normais de oscilação presentes na maneira como os humanos se movem. Uma fonte de luz e som ambiente pode ter uma variabilidade bastante alta se colocada em um espaço urbano de alta densidade, mas novamente acho que haveria muita repetição.

todbot
fonte
8

Existem alguns circuitos interessantes para HRNG sem a necessidade de fontes de entropia ambiente: http://www.cryogenius.com/hardware/rng/ http://robseward.com/itp/adv_tech/random_generator/ e mais ...

Definitivamente, é possível adaptar um desses circuitos a uma blindagem do Arduino . O Arduino atuaria como um gateway entre o HRNG e um PC.

Se você realmente precisa de entrada de entropia no ambiente, o arduino possui 6 canais de entrada analógica, para que você possa ler praticamente qualquer sensor que possa imaginar e usar os dados como fonte de uma semente aleatória.

bpijls
fonte
6

Dois comentários:

  1. Veja o algoritmo Yarrow PRNG de Bruce Schneier . O ponto principal é que você pode ter uma fonte realmente ruim de informações aleatórias "verdadeiras"; contanto que você acumule bastante ao longo do tempo, a incerteza resultante poderá ser combinada com as técnicas de geração de números pseudo-aleatórios do software para gerar números aleatórios decentes.

  2. Por outro lado, tenho que concordar com a maioria dos outros respondentes. Sinais que mudam lentamente de sensores ambientais são péssimas fontes de entropia e podem ser facilmente influenciados. Certifique-se de usar algo que seja baseado no ruído intrínseco do dispositivo e que seja insensível a mudanças ambientais.

Jason S
fonte
6

Acabei de ver este gerador de números aleatórios :

Gerador de números aleatórios para ampulheta http://makezineblog.files.wordpress.com/2009/12/usbsand.jpg?w=600&h=703

no Make: Blog e achei que você poderia estar interessado.

Amos
fonte
Você está se referindo ao "gerador de números aleatórios USB Hourglass" ?
Davidcary
Sim, esse foi o único. O link original era para sua página inicial na comcast, que não está mais lá. Obrigado. Corrigido os links agora.
Amos
3

Eu concordo com as duas respostas acima. As atividades humanas e as leituras ambientais formarão uma terrível piscina aleatória. Mas parece que você só estará convencido disso tentando e verificando a aleatoriedade resultante. Será uma ótima experiência de aprendizado para você!

Arduino é bom para esta aplicação. Todos os sensores nos quais você está interessado podem ser conectados ao Arduino e existem bibliotecas do Arduino disponíveis para esses sensores.

Confira estes tutoriais sobre como conectar sensores ao Arduino: http://www.ladyada.net/learn/sensors/

SiliconFarmer
fonte
3

Esta pode ser uma opção para você. É do sparkfun e não é barato, mas provavelmente será excelente como um gerador de números aleatórios 'verdadeiro'. Ele usa um contador geográfico para gerar os números aleatórios.

https://www.sparkfun.com/commerce/tutorial_info.php?tutorials_id=132

Seidleroni
fonte
Isso parece interessante.
Amos
3

Vários geradores de ruído branco nos sintetizadores de música analógica (Moog e Arp) avalariam um transistor. Se você consultar on-line o esquema Minimoog ou o ARP4027, deverá encontrar os esquemas.

Eu fiz um layout de PCB para o ARP4027. Se você não encontrar o esquema, envie-me um e-mail.

A National criou um gerador digital de números aleatórios - o MM5437. No IIRC, havia alguns programas para um AT-tiny que também fariam isso. Poderia ser um pequeno projeto divertido.

jluciani
fonte
2

Li recentemente uma discussão muito interessante sobre o uso de resistores para gerar ruído aleatório. Devido a efeitos quânticos, um resistor produz uma voltagem muito pequena. Isso pode ser amplificado com um amplificador operacional para produzir uma fonte de ruído aleatório de alta qualidade.

wackyvorlon
fonte
2

Você pode usar a entrada do sensor como sementes para um gerador de números pseudo-aleatórios. O sistema operacional Linux usa a entrada do teclado / mouse como sementes para / dev / random. Apenas uma ideia.

J. Polfer
fonte