Zufall per Hardware erzeugen

Gast #5920333
Lesenswert?

Hallo,

auch wenn mir die random Funktion genügt, so würde ich doch für den 
STm32F1xx eine zufällige Startzahl benöitigen, damit nicht immer die 
gleichen Zahlen entstehen. Der F1 hat keinen RNG wie der F4. Nur ist es 
bei uC mit Zufall so eine Sache. Einen Rauschgenerator wollte ich auch 
nicht aufbauen. Und auch die Unterschiede zwischen Watchdog RC Takt und 
einem Timer am Quarz erzeugen meist die gleichen Zahlen.

Interessant aber wie sie es gemacht haben steht da nicht:
https://winfuture.de/news,93326.html

Gibt es da einfache Lösungen mit wenigen Bauteilen? Also wie gesagt nur 
für den Seed?

Gruss,
Christian
Gast #5920340
Lesenswert?

Christian J. schrieb:

> Gibt es da einfache Lösungen mit wenigen Bauteilen?

Nicht wirklich.

> Also wie gesagt nur für den Seed?

"Nur"? Wer so fragt, hat nicht begriffen, dass ein wirklich zufälliger 
Seed der Kern der Sache ist. Damit steht und fällt die ganze Lösung.

Also: entweder muss es zufällig sein, dann muss auch ein wirklich 
zufälliger Seed her oder es muss eben nicht zufällig sein, dann reicht 
eine Konstante als Seed.

Alles andere ist nutzlose Frickelei. Reine Vertuschung der objektiven 
Untauglichkeit der Lösung.
#5920346
Lesenswert?

Christian J. schrieb:
> Hallo,
>
> auch wenn mir die random Funktion genügt, so würde ich doch für den
> STm32F1xx eine zufällige Startzahl benöitigen, damit nicht immer die
> gleichen Zahlen entstehen.

Ich hab das bei meinem LED-Spiel einfach gelöst. rand() wir nach dem 
Programmstart periodisch mit 100 Hz aufgerufen. Damit kommt der 
Pseudozufallsgenerator in Schwung. Wenn dann im normalen Programmablauf 
ein Aufruf erfolgt, ist die aktuelle Position abhängig vom Zeitpunkt des 
Aufrufs. Der ist aber nie auf 10ms genau reproduzierbar. Also hat man 
einen  praktisch zufälligen Startwert.
#5920350
Lesenswert?

Falk B. schrieb:
> Christian J. schrieb:
>> Hallo,
>>
>> auch wenn mir die random Funktion genügt, so würde ich doch für den
>> STm32F1xx eine zufällige Startzahl benöitigen, damit nicht immer die
>> gleichen Zahlen entstehen.
>
> Ich hab das bei meinem LED-Spiel einfach gelöst. rand() wir nach dem
> Programmstart periodisch mit 100 Hz aufgerufen. Damit kommt der
> Pseudozufallsgenerator in Schwung. Wenn dann im normalen Programmablauf
> ein Aufruf erfolgt, ist die aktuelle Position abhängig vom Zeitpunkt des
> Aufrufs. Der ist aber nie auf 10ms genau reproduzierbar. Also hat man
> einen  praktisch zufälligen Startwert.

Das ist denke ich die pragmatische Lösung. Für ein Gadget ist das super, 
evtl. würde ich die Frequenz etwas erhöhen (kann mir vorstellen dass man 
mit Übung zumindest eine Häufung in einem bestimmten 10ms-Slice erzeugen 
kann beim Knopf drücken). Für kryptographische Anwendungen ist ein 
ordentlicher Hardware-RNG sicherlich die Wahl.
#5920359
Lesenswert?

Falk B. schrieb:
> Der ist aber nie auf 10ms genau reproduzierbar. Also hat man
> einen  praktisch zufälligen Startwert.

Die Variabilität dieses Zeitpunkts ist der einzige Zufall darin. Der 
Rest verkompliziert nur den Determinismus des PRNG. Wenn sich das also 
zwar nicht auf 10ms reproduzieren lässt, aber beispielsweise auf 100ms, 
dann sind allenfalls 3 Bits Zufall drin.
Gast #5920370
Lesenswert?

Christian J. schrieb:
> so würde ich doch für den STm32F1xx eine zufällige Startzahl benöitigen,
> damit nicht immer die gleichen Zahlen entstehen

Kommt auf die Anwendung an:

Zufall nur nach Benutzeraktion, und sei es  wie lange der 
Einschalttaster betätigt wird ?

Mache den seed von dieser Benutzeraktion abhängig.

Das System kennt die Zeit ? Mache den seed von der Zeit abhängig.

Analogeingang ? Sample sein Rauschen ggf. mit langer Antenne.

Oder einfacb de  alten RNG im EEPROM speichern und nach neuem 
Einschalten dort weitermachen.
#5920374
Lesenswert?

A. K. schrieb:
> Falk B. schrieb:
>> Der ist aber nie auf 10ms genau reproduzierbar. Also hat man
>> einen  praktisch zufälligen Startwert.
>
> Die Variabilität dieses Zeitpunkts ist der einzige Zufall darin. Der
> Rest verkompliziert nur den Determinismus des PRNG. Wenn sich das also
> zwar nicht auf 10ms reproduzieren lässt, aber beispielsweise auf 100ms,
> dann sind allenfalls 3 Bits Zufall drin.

Stimmt, aber auch das ist bei meiner Anwendung nicht gegeben. Zumal auch 
das neu ziehen von Zufallszahlen immer wieder vom Zeitpunkt abhängt und 
damit auch geschätzt auf bestenfalls 1s genau reproduzierbar ist.

Ist sicherlich nicht der Königsweg, aber für viele einfache Anwendung 
ausreichend.
Gast #5920383
Lesenswert?

Hallo,

es geht nur um eine Deko, wo auf einer MAX7219 1024 LED Matrix das "Game 
of Life" läuft. Da ich, damit es am Leben bleibt immer zufällige neue 
"unsichtbare Zellen" im Feld erzeuge sollten sie wirklich zufällig sein, 
da sonst immer die gleichen Muster entstehen. Habe das mit dem F429 mal 
schön gelöst, nur hat der eben den RNG drin. Das System arbeitet ohne 
jede Eingaben von außen. Ok, man kann auch einen LDR nehmen und den 
auslesen, da das Licht nie immer gleich ist. Als Startwert reicht das. 
Ich brauche neue Zahlen, wenn die Anzahl Zellen unter bestimmte Werte 
fällt. UIhrzeit hätte ich, einen Dallas Chip dran ist kein Thema, die 
benutze ich oft. I2C Routinen sind fertig für die Statemachine des F1 
und laufen auch.
Gast #5920394
Lesenswert?

Ok,

ich glaube ich mache es so, dass ich wirklich nur einen LDR nehme und 
den alle n Zufallszahlen neu auslese, zb 1 x pro Stunde und damit den 
neuen Seed erzeuge.Das Modell steht am Fenster und von daher schwankt 
die Helligkeit unentwegt um mindestens ein paar Digits.
#5920414
Lesenswert?

Christian J. schrieb:
> Gibt es da einfache Lösungen mit wenigen Bauteilen? Also wie gesagt nur
> für den Seed?

Hat der STM32 nicht eine interne Temperaturdiode am ADC? Damit könnte 
man eine Zufallsgenerator aufbauen, indem man das unterste Bit (die 
untersten Bits) des ADCs benutzt, wenn er die interne Chip Temperatur 
misst. Da ist i.d.R. nur Rauschen drin.

Für Crypto Zwecke würde man dieses Rauschen noch durch "Hash" Funktionen 
wie SHA1 oder MD5 jagen, was auf einem STM32 aber zu teuer sein dürfte.
Beitrag #5920439 wurde von einem Moderator gelöscht.
Beitrag #5920459 wurde von einem Moderator gelöscht.
Gast #5920464
Lesenswert?

Lustig, diese Frage hatten wir gestern im Meeting. Hitzige Diskussionen, 
Tausend Vorschläge :-)

Ergebnis:

Wir lassen einen Zähler laufen und messen ein paar male den 
Nulldurchgang der 50Hz, die wir per Antenne empfangen. Start des System 
und die Phase der 50Hz sind extrem stark abweichend. Der Zähler zählt im 
uc bis 65535 und hat bei 1000 Versuchen jede Zahl nur einmal gebracht.
Gast #5920480
Lesenswert?

Christian J. schrieb:
> Also wie gesagt nur für den Seed?

Wirf doch einfach den Zustand des PRNG alle paar Sekunden in ein 
Backup-Register und lade ihn beim Powerup von da aus. Braucht natürlich 
Speisung an V_BAT, wozu Du entweder einen Goldcap nehmen kannst (mit 
Vorwiderstand und Rücksperrdiode), oder Du verbaust eine Knopfzelle.

Alternativ kannste auch einen ADC-Eingang mit zwei 
Spannungsteilerwiderständen in ungefähr die Mitte seines Bereiches legen 
und zum Startup N Messungen machen, von denen Du jeweils nur das LSB 
mitnimmst. Wobei N halt die Bitbreite Deines Seeds ist.
Gast #5920508
Lesenswert?

Einigermaßen zufällig wirkende Zahlen lassen sich recht einfach 
erzeugen, indem man die Spannung von rauschenden Bauteilen misst oder 
die Dauer eines Tastendruckes auswertet.

Es hängt von deinen Anforderungen ab:

1) Ist es egal, wenn der Zufallszahlen-Generator von außen beeinflussbar 
ist?
2) Ist es egal, wenn der Generator nach hinreichend vielen Aufrufen 
manche Zahlen besonders häufig oder selten ausgibt?

Bei einem Würfel wäre 1) noch Ok, aber 2) ganz sicher nicht.
#5920535
Lesenswert?

Nutze doch einfach die "Hardware" die vor dem Teil steht/sitzt!
Wird im Zusammenhang mit irgendwelchen Eingaben eine Zufallszahl 
benötigt, so sollte der erste Tastendruck als Referenz herangezogen 
werden.
Ich kann mir nicht vorstellen, das jemand wiederholt nach 6,8888888... 
Sekunden die erste Taste nach dem Einschalten, betätigen kann.
Ab diesem Zeitpunkt kommt es natürlich auf den Algorithmus an der 
verwendet werden soll.
Was noch zufällig wäre ist ein von der Netzspannung, hochohmig 
aufgeladener Kondensator hinter einem gleich riecht er. Ein einfacher 
Komparator und eventuell ein Optokoppler schaffen hier Sicherheit. Die 
Größe des Kondensators bzw. des Widerstandes sorgen dafür, dass der 
Schwellwert erst nach der Initialisierung erreicht wird. Der Zufall 
kommt dadurch ins Spiel, dass der Ladezustand des Kondensators davon 
abhängt, zu welchem Spannungswert die Netzspannung eingeschaltet wird. 
Die Si-Nuss rollt ja ständig Rum und es sollte schwierig werden einen 
definierten, aktuellen Wert zwischen nichts und 180° zu treffen.
Gast #5920547
Lesenswert?

Sven B. schrieb:
> Jemand schrieb:
> Sven B. schrieb:
> noch verwendet man veraltete Hashfunktionen wie SHA1
>
> Gilt der Linux Zufallsgenerator als unsicher? Nein.
>
> Was ist "der Linux Zufallsgenerator"? /dev/urandom? Wo benutzt das sha1
> (oder irgendeine Hashfunktion)?

Wenn man Daten aus den Entropy-Pools input_pool oder blocking_pool (-> 
/dev/random) entnimmt, weden diese mit SHA-1 gehasht und gefalten. Für 
/dev/urandom wird ChaCha20 aus dem input_pool geseedet.
Beitrag #5920634 wurde von einem Moderator gelöscht.
Gast #5920642
Lesenswert?

Meine, mich dunkel zu erinnern, dass bei einem Elektor-Projekt zur 
Zufallserzeugung an einem oder mehreren Pins eines Mikrocontrollers 
kleine Kondensatoren über Widerstände angeschlossen waren.
Die wurden jeweils über den gleichen Pin geladen/entladen und dann 
abgefragt, um ein Zufallselement zu erhalten.


Christian J. schrieb:
> Zufall per Hardware erzeugen

Übrigens fände ich den umgekehrten Fall auch sehr cool! ;)
Gast #5920670
Lesenswert?

Statt nur einen LDR auszuwerten, kann man auch zwei auswerten und diese 
nach zwei unterschiedlichen Richtungen ausrichten.
Dann potenziert sich sogar der Zufall! Je nach Sonnenstand kann der eine 
oder andere LDR mehr im Schatten sein.
Gast #5920790
Lesenswert?

Christian J. schrieb:

> es geht nur um eine Deko

Diese Information hät in das OP gehört, findest du nicht?

Für reinen Spielkram reicht es natürlich, wenn's nur hinreichend 
zufällig aussieht. Aber sowas sollte jeder halbwegs mit Eigenintelligenz 
begabte ja locker hinbekommen können, ohne ein Forum dazu befragen zu 
müssen...
#5920799
Lesenswert?

Elbi schrieb:
> Der Zähler zählt im
> uc bis 65535 und hat bei 1000 Versuchen jede Zahl nur einmal gebracht.

Es gibt etablierte mathematische Methoden, eine Verteilung von Zahlen zu 
untersuchen. Diese gehört eher nicht dazu (*). Als Einstieg:
https://de.wikipedia.org/wiki/Zufallszahlengenerator#Güte_eines_Zufallszahlengenerators
https://en.wikipedia.org/wiki/Statistical_randomness

*: for i := 1 to 1000... hat die gleiche Eigenschaft. ;-)
#5920805
Lesenswert?

Bla schrieb:
> Vielleicht kann man den Inhalt eines RAM-Speicherbereiches
> zusammenzählen - beim Einschalten könnten da zufällige Werte stehen.

Ob die Summe gleichverteilter Zahlen wohl gleichverteilt ist? 
Ausserdem ist sehr offen, wie verteilt die Startup-Werte der RAM Zellen 
unter allen Randbedingungen tatsächlich sind.

Ein weiteres Problem dabei liegt in der Erkennung vom Powerup. RAM 
behält seinen Inhalt meist noch bei einer Spannung, die weit unter der 
Schwelle der entsprechenden Detektoren in µCs liegt.
Gast #5920848
Lesenswert?

Hallo

"Für reinen Spielkram reicht es natürlich, wenn's nur hinreichend
zufällig aussieht. Aber sowas sollte jeder halbwegs mit Eigenintelligenz
begabte ja locker hinbekommen können, ohne ein Forum dazu befragen zu
müssen..."

Da gibt es so Typen im Forum die lassen einen (oft überheblichen) 
Kommentar zu gefühlt jeden zweiten Thema seit den letzten zehn Jahren 
ab, haben aber noch immer nicht verstanden wie ein Forum funktioniert 
und wofür es alles gut ist.

Und nein es geht nicht nur darum die Frage eines TO allein für den TO zu 
beantworten (PN, oder "Danke ich habe eine Lösung gefunden" Mitteilungen 
durch den TO ohne weiter Ausführungen sind zu recht verpönt) sondern 
auch darum das andere mitlesen die ähnliche Fragen haben, das die 
Threads archiviert und immer wieder aufrufbar und somit die Information 
für Jedermann nutzbar sind (Wie gut dieses Archiv bzw. Datenbank zu 
nutzen ist und wie gut die Treffer sind ist eine andere Baustelle). Es 
ist ja kein Zufall das wenn man in deutscher Sprache mal etwas 
spezieller im Bereich µC und Elektronik googlet Threads aus diesem Forum 
hier recht oft mit zu den ersten Treffern gehören.

Und einigen regelmäßigen Forennutzern ist auch nicht klar das sie unter 
ihren Nutzernamen sehr schnell Foren weit (teilweise auch in der 
entsprechenden gesamten Online Szene) bekannt, berüchtigt werden.
Aber scheinbar ist es diesen Zeitgenossen egal (oder sind sogar noch 
stolz darauf...?) als arrogante, unsoziale Zeitgenossen zu gelten egal 
wie viel sie Fachspezifisch drauf haben.
Oder sie leben in ihrer Scheinwelt und verwechseln Arroganz, Unfähigkeit 
zur Empathie, Mobben und Beleidigen mit Selbstsicherheit.

Jemand
#5921160
Lesenswert?

Zizat aus dem Artikel: "In dem Verfahren werden im Grunde zwei 
verschiedene Quellen für Pseudo-Zufallszahlen herangezogen. Diese werden 
dann so miteinander kombiniert, dass eine Sequenz von Nummern entsteht, 
die als echte Zufallszahlen angesehen werden können. Sprich: Es ist 
bewiesenermaßen nicht möglich, vorherzusagen, welcher Wert an der 
nächsten Stelle kommt. Wie Zuckerman ausführte, habe er sich seit 20 
Jahren immer wieder mit dem Problem befasst. "Ich bin begeistert, es nun 
gelöst zu haben", sagte er. "

Das Problem der "echten" Zufallszahlen ist ja nun hinreichend bekannt. 
Und dass der Startwert dieses "Game of Life" nun so unheimlich zufällig 
sein sollte, erschließt sich mir nicht. Speicher einfach die letzten 
10000 Zahlen, die dir angeboten wurden und wenn die nächste schon da 
war, dann hol die Nächste Nächste. Die Zuschauer werden kaum stundenlang 
vor der Leinwand stehen, um irgendwann mal entrüstet auszurufen: das war 
doch schon mal da! :-)
Gruß Rainer

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