wie erzeugt man eine zufallszahl

Gast #237891
Lesenswert?

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().
Gast #237892
Lesenswert?

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.
Moderator Persönliche Seite #237898
Lesenswert?

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.
Moderator Persönliche Seite #237900
Lesenswert?

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.
Moderator Persönliche Seite #237901
Lesenswert?

> 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.
Gast #237903
Lesenswert?

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 :-)
Moderator Persönliche Seite #237904
Lesenswert?

> 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.
Gast #237906
Lesenswert?

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.
Moderator Persönliche Seite #237907
Lesenswert?

> 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.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren