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
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.
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?
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.
>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.
Für ernsthaften Einsatz brauchst du zwingend noch eine Selbstdiagnose, die die Schaltung komplett stillegt, wenn irgendetwas faul ist.
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.
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.