Czy Arduino jest idealny do tworzenia HRNG (sprzętowy generator liczb losowych)?

21

Przygotowuję projekt sprzętowego generatora liczb losowych, który będzie wykorzystywał wiele źródeł entropii ( łącznie ):

  • Światła otoczenia
  • Dźwięk otoczenia (i poziomy dźwięku)
  • Temperatura otoczenia
  • Wilgotność otoczenia
  • Pozycja samego urządzenia (do góry nogami, pochylona w lewo, zatytułowana w prawo itp.)
  • Inne źródła w przyszłości, być może nawet dane GPS (zaznaczone jako możliwe, ponieważ dwóch użytkowników może stać obok siebie, a zatem być może deterministyczne, jeśli je znasz).

Moim pomysłem jest stworzenie „ładowarki” do puli entropijnej, którą ludzie mogą nosić przy sobie w ciągu dnia, podczas gdy nadal będzie zapisywać na dysku USB.

Po kilku godzinach użytkownik będzie miał ładną pulę entropii ~ 4 GB, którą można podłączyć do komputera i użyć. Nie stać mnie na naprawdę drogie QRNG oparte na rozpadzie światła lub radioaktywności, więc staram się wymyślić coś tańszego.

Czy Twoim zdaniem Arduino jest najlepszym wyborem do prototypowania tego? Jeśli nie, co byś polecił?

Tim Post
źródło

Odpowiedzi:

22

Myślę, że będziesz chciał pójść ścieżką sugerowaną przez Busza. Wyszukaj pojęcie „szum diody”. Złącza PN w diodach i tranzystorach mogą wytwarzać prawie idealny biały szum Gaussa. Próbkowanie powinno być źródłem entropii lepszym niż jakiekolwiek źródło środowiskowe.

Problem z większością danych środowiskowych / otoczenia polega na tym, że wartości po prostu nie zmieniają się zbytnio w czasie: temperatura, wilgotność, światło i dźwięk mają mniej niż rząd wielkości zmienności przy naprawdę silnych trybach. Akcelerometr do pomiaru ruchu może być dobrym źródłem zmienności, jeśli jest zamontowany na osobie, ale prawdopodobnie będziesz musiał wykonać trochę przetwarzania sygnału, aby usunąć normalne tryby oscylacji obecne w ruchu ludzi. Źródło światła i dźwięku z otoczenia może mieć dość dużą zmienność, jeśli zostanie umieszczone w przestrzeni miejskiej o dużej gęstości, ale znowu myślę, że będzie wiele powtórzeń.

todbot
źródło
8

Istnieje kilka interesujących obwodów dla HRNG bez potrzeby stosowania źródeł entropii otoczenia: http://www.cryogenius.com/hardware/rng/ http://robseward.com/itp/adv_tech/random_generator/ i więcej ...

Zdecydowanie możliwe jest dostosowanie jednego z tych obwodów do tarczy Arduino . Arduino działałoby wówczas jako brama między HRNG a komputerem.

Jeśli naprawdę potrzebujesz wejścia entropii otoczenia, arduino ma 6 analogowych kanałów wejściowych, dzięki czemu możesz odczytać prawie każdy czujnik, o którym możesz pomyśleć i wykorzystać dane jako źródło losowego ziarna.

bpijls
źródło
6

Dwa komentarze:

  1. Spójrz na algorytm Yarrow PRNG Bruce'a Schneiera . Najważniejsze jest to, że możesz mieć naprawdę kiepskie źródło „prawdziwych” losowych informacji; tak długo, jak gromadzisz wystarczającą jej ilość w czasie, wynikową niepewność można łączyć z programowymi pseudolosowymi technikami generowania liczb, aby uzyskać przyzwoite liczby losowe.

  2. Z drugiej strony muszę się zgodzić z większością innych odpowiedzi. Powoli zmieniające się sygnały z czujników środowiskowych są kiepskim źródłem entropii i można na nie łatwo wpłynąć. Upewnij się, że używasz czegoś, co opiera się na wewnętrznym hałasie urządzenia, i będzie to niewrażliwe na zmiany otoczenia.

Jason S.
źródło
6

Właśnie zauważyłem ten generator liczb losowych :

Generator liczb losowych Hourglass http://makezineblog.files.wordpress.com/2009/12/usbsand.jpg?w=600&h=703

na Make: Blog i pomyślałem, że możesz być zainteresowany.

Amos
źródło
Tak, to był ten jedyny. Oryginalny link znajdował się na jego stronie głównej w programie telewizyjnym, którego już nie ma. Dzięki. Naprawiono teraz linki.
Amos
3

Zgadzam się z powyższymi dwoma odpowiedziami. Ludzka aktywność i odczyty otoczenia stworzą straszną losową pulę. Ale brzmi to tak, jakbyś był do tego przekonany tylko poprzez wypróbowanie go i sprawdzenie wynikowej losowości. Będzie to dla Ciebie wspaniałe doświadczenie edukacyjne!

Arduino jest w porządku dla tej aplikacji. Wszystkie czujniki, które Cię interesują, można podłączyć do Arduino, a dla tych czujników dostępne są biblioteki Arduino.

Sprawdź te samouczki na temat podłączania czujników do Arduino: http://www.ladyada.net/learn/sensors/

SiliconFarmer
źródło
3

To może być dla ciebie opcja. Pochodzi z Sparkfun i nie jest tani, ale prawdopodobnie będzie doskonały jako „prawdziwy” generator liczb losowych. Używa licznika geograficznego do generowania liczb losowych.

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

Seidleroni
źródło
To wygląda interesująco.
Amos,
3

Wiele generatorów białego szumu w analogowych syntezatorach muzycznych (Moog i Arp) lawinowo tranzystor. Jeśli pytasz online o schemat Minimoog lub ARP4027, powinieneś znaleźć schematy.

Zrobiłem układ PCB dla ARP4027. Jeśli nie możesz znaleźć schematu, wyślij mi e-mail.

National stworzył cyfrowy generator liczb losowych - MM5437. IIRC istniało kilka programów dla małego AT-a, które by to zrobiły. To może być fajny mały projekt.

jluciani
źródło
2

Niedawno przeczytałem bardzo interesującą dyskusję na temat używania rezystorów do generowania losowego szumu. Z powodu efektów kwantowych rezystor wytworzy bardzo małe napięcie. Można to wzmocnić wzmacniaczem operacyjnym, aby uzyskać wysokiej jakości źródło losowego szumu.

wackyvorlon
źródło
2

Można użyć wejścia czujnika jako nasion do generatora liczb pseudolosowych. Linux OS wykorzystuje dane wejściowe z klawiatury / myszy jako nasiona do / dev / random. Po prostu pomysł.

J. Polfer
źródło