Forum: Compiler & IDEs wie erzeugt man eine zufallszahl


von slaud (Gast)


Lesenswert?

kann mir jemand weiterhelfen

von Rolf Magnus (Gast)


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

von Alex (Gast)


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.

von Patrick D. (oldbug) Benutzerseite


Lesenswert?


von Malte _. (malte) Benutzerseite


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

Du verstärkst das Rauschen eines Verstärkers und samplest dann das
Signal.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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.

von Thomas (Gast)


Lesenswert?

Äh, was ich meinte, ist natürlich: du verstärkst das Rauschen eines
Halbleiterbauelements mit einem Verstärker :)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Andreas Siebel (Gast)


Lesenswert?

Wenn das nicht mal nicht die 50 Hz von der Netzleitung sind ;)

Sieht mir nach nem schönen Ausschnitt von nem Sinus aus.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Andreas Siebel (Gast)


Lesenswert?

Histogramm ja.. hätte ich mal lesen sollen :)


Sieht wirklich nach ner schicken Normalverteilung aus.

von Alex (Gast)


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 :-)

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Sssssss (Gast)


Lesenswert?

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

von Alex (Gast)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

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.