kann mir jemand weiterhelfen
Eine Zufallszahl kann man nur mit Hardware-Unterstzützung bekommen. Wenn Pseudozufallszahlen auch reichen (also welche, die über einen Algorithmus vom Computer berechnet werden und nur so aussehen, als seien sie zufällig), dann such mal nach "pseudo random number gnerator" oder PRNG. Oder willst du nur wissen, wie die Standard-C-Funktion dafür heißt? Das wären dann srand() und rand().
Die Methode der lineare Kongruenz bietet folgende rekursive Formel: x(n+1)=(ax(n)+x)mod m Wählt man geeignete Werte für a und c ist der Anfangswert von x egal und man erhält eine gleich verteilte Folge von Zufallszahlen mit der Periodizität m. Sollen bei jedem Neustart des Zufallszahlengenerators verschiedene Werte erscheinen müssen die Anfangswerte entsprechend variiert werden. Für m=32 sind a=1664525 und c=32767 günstige Anfangswerte. Das Ganze stammt von Analog Devices. Ich habe es auf einem DSP in Gebrauch.
Ansonsten ist der genaue Zeitpunkt einer Benutzereigabe meist recht zufällig. Also seit dem Programmstart einen Timer durchzählen lassen und auslesen sobald der Benutzer eine Taste drückt. Dies verwende ich in einem Programm von mir dann als Initalisierungswert für die oben genannten avr-libc Funktionen.
Du verstärkst das Rauschen eines Verstärkers und samplest dann das Signal.
s/Verstärker/Z-Diode/ Ich wollte immer mal ausprobieren, ob das Rauschen einer Z-Diode schon dick genug ist, um den normalen Analogkomparator umschalten zu lassen.
Äh, was ich meinte, ist natürlich: du verstärkst das Rauschen eines Halbleiterbauelements mit einem Verstärker :)
Die Variante, einfach eine Z-Diode an den Analogkomparator zu klemmen, tut nicht, die Offsetspannung ist offenbar höher als das Rauschen einer Z-Diode. Was aber funktioniert ist, den ADC mit seinen 200-fachen Differenzeingängen zu benutzen. Setup: Z-Diode 3,3 V mit 1,8 kOhm gegen + 5V und an einen der beiden Diff-Eingänge, von da 22 kOhm gegen den anderen Eingang, den mit 22 µF abgeblockt. Hier ein Histogramm der Messergebnisse: -7: 4 -6: 7 -5: 11 -4: 25 -3: 34 -2: 67 -1: 85 0: 136 1: 171 2: 224 3: 221 4: 206 5: 208 6: 255 7: 216 8: 185 9: 166 10: 130 11: 111 12: 53 13: 37 14: 23 15: 6 16: 2 17: 2 Die unteren Bits des ADC-Wertes sollten ein recht gutes seed für den PRNG ergeben.
Wenn das nicht mal nicht die 50 Hz von der Netzleitung sind ;) Sieht mir nach nem schönen Ausschnitt von nem Sinus aus.
Häh? Du hast das Prinzip meines Histogramms nicht verstanden. ;-) Es handelt sich um die Messwerte auf der linke Seite, gegenüber- gestellt mit deren Häufigkeit im gesamten Messzeitraum auf der rechten Seite. (Ich hätte es natürlich noch auf prozentuale Häufigkeiten umrechnen können, habe ich nicht dran gedacht.) Nein, kein Sinus, wohl eher eine Gauß'sche Glockenkurve, genau das muss aber rauskommen. Klar hängt da sicher auch eine Brummeinstreuung mit drin (ich kann das eventuell nochmal in einer Blechdose wiederholen, die Laborstromversorgung ist eher unverdächtig), aber letztlich kann dir das in der Praxis sch***egal sein, ob das nun Rauschen, Brummen, Knistern oder Knattern ist: das wesentliche Ziel ist es ja, dass jemand von außen selbst bei exakter Kenntnis der benutzten Hard- und Software nicht erraten kann, mit welchem genauen Startwert man als seed in den PRNG hineingegangen ist, d.h. er kann die benutzte Zufallszahlenfolge nicht voraussagen. Das Experiment sollte nur demonstrieren, dass es mit einem geringen Aufwand an externer Elektronik möglich ist, wenigstens einigermaßen ,,Zufall'' zu produzieren.
> Es handelt sich um die Messwerte auf der linke Seite, gegenüber- > gestellt mit deren Häufigkeit im gesamten Messzeitraum auf der > rechten Seite. p.s.: auf der linken Seite stehen alle Messwerte, die im Beobachtungszeitraum (der ca. 1 Minute oder so umfasste) beobachtet worden sind, d.h. der ADC hat weder weniger als -7 noch mehr als +17 gemessen. Die Mitte der Gaußkurve liegt nicht bei 0, einerseits haben die Eingangsströme an der Widerstandskette bereits zu extern messbaren Spannungsdifferenzen geführt, andererseits hat natürlich auch der Differenzverstärker des ADC eine Offsetspannung. Das alles ist aber für das Zufallsexperiment gar nicht wichtig, im Gegenteil: die eher breite ,Spitze' der Glocke bedeutet, dass man selbst mit wenigen aufeinanderfolgenden Messungen bereits so viel ,Zufall' einsammeln kann, dass das für das Ziel des Experiments sehr gut ausreichend sein kann. Es genügt eigentlich, nur jeweils das unterste Bit einer jeden ADC-Messung auszuwerten und dann 31 Messungen vorzunehmen, um die 31 bits für das srandom()-seed zu gewinnen.
Histogramm ja.. hätte ich mal lesen sollen :) Sieht wirklich nach ner schicken Normalverteilung aus.
Die mathematischen Methoden produzieren allerdings besseres Rauschen. Sie erzeugen (periodisch) Zufallswerte, welche über den gesamten Wertebereich gleichverteilt sind. Eine Gaußkurve kann nicht i.O. sein, wenn weißes Rauschen das Ziel ist. "Es genügt eigentlich, nur jeweils das unterste Bit einer jeden ADC-Messung auszuwerten und dann 31 Messungen vorzunehmen, um die 31 bits für das srandom()-seed zu gewinnen." So wird es etwas, wobei noch der Performance-Vergleich ausstünde :-)
> Die mathematischen Methoden produzieren allerdings besseres > Rauschen. Sie erzeugen (periodisch) Zufallswerte, welche über den > gesamten Wertebereich gleichverteilt sind. Ein weißes Rauschen ist nebensächlich. Wenn es dir um irgendwelche kryptografischen Dinge geht, ist vordergründig wirklich nur wichtig, dass dir (selbst bei Kenntnis der Interna) keiner voraussagen kann, welche Zufallszahl du jetzt wählst. Das ist bei einem PRNG als solches erstmal nicht gegeben, dazu muss man ihn ordentlich mit einem seed füttern. Ob die resultierende Zufallszahlenfolge wirklich gleichverteilt ist, interessiert kein Schwein, lediglich zu große Häufungen muss man vermeiden -- sonst könnte sich ein Angreifer mit seinen Rateversuchen ja auf diese Häufungen konzentrieren. > So wird es etwas, wobei noch der Performance-Vergleich ausstünde :-) Ist für das Thema komplett egal. Wenn es sicher sein soll, spielt Zeit im Allgemeinen keine Rolle.
Wegen Seed per ADC: Das funktioniert aber nur wenn der Angreifer nicht ans System drankann. Sonst klemmt er den ADC auf GND und hat immer dieselbe seed ...
Irgendwie hat sich der Server verschluckt, ich sehe den Ursprungsbeitrag nicht mehr. Von daher kann ich das eigentliche Thema (Zielapplikation) schwerlich rekonstruieren. (17.08.2005 01:34 --> "kann mir jemand weiterhelfen" ist alles sichbare) Da ich Zufallszahlen bei Verwendung stets in großer Zahl benötige (Regelungstechnik) ist meine Sichtweise halt eine andere.
> Sonst klemmt er den ADC auf GND und hat immer dieselbe seed ... Vielleicht nichtmal. ;-) Aber den Fall sollte man erkennen können und kann dann den Dienst ganz quittieren. > Da ich Zufallszahlen bei Verwendung stets in großer Zahl benötige > (Regelungstechnik) ist meine Sichtweise halt eine andere. Spricht ja nichts gegen die Benutzung eines PRNG, aber man sollte ihm eben trotzdem ein passendes seed mitgeben -- sonst ist die Zahlenfolge eben alles andere als zufällig.
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.