Forum: Mikrocontroller und Digitale Elektronik Generierung von Zufallswerten(bit oder int) aus Transistorrauschen; Messung mit Arduino.


von N. K. (evalapply)


Angehängte Dateien:

Lesenswert?

Guten Tag,

ich schreibe gerade an einer Arbeit über die Erzeugung von echten 
(nichtdetermistischen) Zufallszahlen in der Informatik.

Das Ziel ist ein Ansatz für einen sparsamen und schnellen Weg; z.B. in 
der Form eines kleinen Chips, der die generierten Werte als Basis für 
die Erzeugung von kryptographischen Schlüsseln verwendet.

Meine Entropiequelle soll die Schaltung im Anhang sein. Ich habe bereits 
an einem Lautsprecher ein schönes weißes Rauschen, dominant zwischen 1 - 
15kH.

Dieses Rauschsignal möchte ich dann, durch einen ARDUINO DUO, messen und 
eine kleine Routine schreiben, die die Werte in Zufallszahlen(bit, int 
oder float) in einem vom Nutzer vorgegebenen Bereich umwandelt.

Der Code stellt keine Probleme dar; ich habe einen 
Programmiererhintergrund. Allerdings bin ich im Bereich Elektronik 
leider immernoch etwas grün hinter den Ohren.


Meine Fragen also:

Vorweg:
- Habt ihr Verbesserungsvorschläge, gefällt euch der Ansatz? (Bitte 
beachten, es darf kein Geld für Geigerzähler, CCD's oder ähnliche 
Sensoren ausgegeben werden.)

- Wie messe ich das Rauschsignal am besten um daraus zufällige Werte zu 
erhalten?

Ich habe mir lange den Kopf darüber zerbochen; leider fehlen mir dafür 
die Fachkentnisse.

Ein zufälliger bit-stream würde schon reichen. Diesen könnte ich 
Gruppieren und Integer daraus erhalten.
Wie erhalte ich zufällige bits aus einem Rauschsignal?

- Ist der Arduino dafür überhaupt geeignet Werte in Abständen von 
wenigen Mikrosekunden aus einem deart chaotischen Signal zu messen? Oder 
sollte ich dafür lieber einen Raspberry Pi an Land ziehen?

Ich hoffe, dass ihr mich auf die richtige Schiene bringen könnt;

Liebe Grüße.

EDIT: Natürlich hängt am Ausgang des Schaltplans am Ende kein 
Piezo-Lautsprecher sondern der Arduino.

: Bearbeitet durch User
von Ulrich H. (lurchi)


Lesenswert?

Das Rauschen per Transistor ist keine so schlechte Wahl. Das analoge 
Signal hat aber nur eine begrenzte Nutzbare Bandbreite: Die obere Grenze 
kommt von internen und parasitären Kapazitäten und dem Verstärker. Die 
obere Grenze gibt vor wie schnell man das Signal abfragen darf ohne 
deutlich Korrelation zu haben. Nach unten ist die nutzbare Bandbreite 
durch 1/f Rauschen, thermische Effekte und wohl auch die Einkopplung von 
50 Hz/100 Hz ebenfalls begrenzt. Trotzdem ist eine gute Abschirmung nach 
außen wichtig. Zur Auswertung des Signals könnte man z.B. eine AC 
Kopplung und einen Komparator nutzen. Den ggf. vorhandenen kleine Offset 
muss man ggf. in der Software berücksichtigen. Die Zufallsbits sind halt 
nicht perfekt gleich verteilt. Auch die untere Grenzfrequenz sorgt für 
etwas Korrelation, die man ggf. berücksichtigen müsste.

Alternativ könnte man die Auswertung auch per ADC machen, und etwa nur 
die unteren 1-2 Bits davon nutzen. Die Einschränkungen sind ähnlich.

von N. K. (evalapply)


Lesenswert?

Danke für die schnelle Antwort!

Ich werde etwaige Korrelation der Werte ausgleichen, indem ich den 
erhaltenen Zufallswert aus der Schaltung als Seed für einen lin. 
Kongruenzgenerator verwende. Sozusaen TRNG und PRNG verbinde.

AC Kopplung und Komparator habe ich gerade mal gegoogled; sieht ganz 
vielversprechend aus. Der Komparator würde dem Arduino dann die ganze 
Arbeit schon abnehmen.

Ursprünglich hat sich mein Laienverstand das so ausgemalt:

Rauschen ist ja nichts anderes als Wechselspannung bei der die 
"Ausschläge" zufällig verteilt sind.
Das heißt, dass ich, wenn ich den WERT dieser Rauschspannung alle par 
Mikrosekunden messe, Werte wie:

+4.2V
-3.9V
-4.7V
+3.8V

etc erhalte wobei das Vorzeichen dieser Spannung ja nicht vorhersagbar 
ist.

Ich müsste also dem Arduino nur sagen, dass wenn die erste Spannung, die 
im angegebenen Zeitfenster gemessen wurde positiv ist; er eine 1 
ausspucken soll. Dann ein kleines Delay und die nächste Messung und 
falls diese negativ ist, eine 0.

Würde das nicht so funktionieren?

von hp-freund (Gast)


Lesenswert?

Wie wäre es mit einem 2. Rauschgenerator und einem Schieberegister?

Der erste Generator erzeugt den Takt, der Zweite das Datensignal für das 
Schieberegister.
Sozusagen Zufall hoch 2.

Das SR kann natürlich auch als Software im ARDUINO ausgeführt sein und 
ist somit schon direkt als Variable verwendbar.

von LostInMusic (Gast)


Lesenswert?

>Die Zufallsbits sind halt nicht perfekt gleich verteilt.

Ich würde diesen Bitstrom sowieso auf jeden Fall mit einem zweiten, von 
einem PRNG erzeugten bitweise ver-XOR-en. Bei nichtdeterminiertem 
TNRG-Output und gleichverteiltem PNRG-Output ist der Mix dann beides.

von Marc (Gast)


Lesenswert?

Für ernsthaften Einsatz brauchst du zwingend noch eine Selbstdiagnose, 
die die Schaltung komplett stillegt, wenn irgendetwas faul ist.

von Ulrich H. (lurchi)


Lesenswert?

Man kann die Spannung mit dem ADC messen - allerdings braucht der ADC 
relativ lange und liefert dann vielleicht 2 bis bestenfalls 8 brauchbare 
Bits alle etwa 50-100 µs. Im Vergleich dazu ist der Komparator schnell - 
eher durch die Bandbreite des Rauschens Begrenzt - so etwa 1 µs 
Wartezeit könnten reichen.

Die Fehler des analogen Signals kriegt man durch Kombination mit 
Pseudozufallszahlen größtenteils weg, bzw. verschleiert sie recht gut. 
Man kann auch mehrere der Rohdaten verknüpfen und so weniger Datenrate 
bei höherer Zufälligkeit erreichen.

von Oldie (Gast)


Lesenswert?

An dieser Schaltung gefällt mir nicht, dass der LM358 bis
in die Sättigung getrieben wird. Die Rückkehrzeiten aus der
Sättigung lassen eine ganze Menge "natürlichen Zufall"
verschwinden: Tsat = f(Bauteil, Temperatur)

Entweder eine Stufe mit endlicher Verstärkung, dahinter ein
schneller Komparator. Und dann lieber f, oder T auswerten, statt
der Spannung.

Oder die Verstärkung regeln, so dass man immer im linearen
Bereich bleibt. Dann können auch die unteren Bits der mit einem
ADC gewandelten Spannung ausgewertet werden.

Ansonsten ist noch einiger Aufwand an Abschirmung nötig.
Blech drumherum und L-C-Filterung aller Anschlüsse.

von N. K. (evalapply)


Angehängte Dateien:

Lesenswert?

Vielen Dank für die schnellen und hilfreichen Antworten. Ich hätte nicht 
gedacht, dass dieses Forum so schnell ist.

Ich lese das Rauschsignal jetzt direkt über Analogpin 0 als 
Gleitkommazahl mit 22 Nachkommastellen ohne delay ein. Einen Auszug der 
Rohdaten habe ich mal angehängt.

Sicher sind diese Werte noch nicht perfekt. Aber ich werde ein paar 
softwaretechnische Tricks (Wenigstens kenne ich mich damit aus) anwenden 
um eine hübsche Gleichverteilung zu bekommen.

Ich dachte z.B. daran, jede
-te Nachkommastelle in binär. umzuwandeln und diesen bitstrom ,wie 
"LostInMusic" das schon vorgeschlagen hat; mit einem zweiten bitstrom, 
der von einem Pseudozufallsgenerator kommt, dessen Seed allerdings die 
Werte aus der Messung sein werden, ver-XOR-en.

Die Parameter x und y werden dann, natürlich, ebenfalls über die 
Messwerte randomisierte Parameter.

Was haltet ihr davon?

: Bearbeitet durch User
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.