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
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.
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.
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.
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.
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.
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.
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.
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.
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.
Jim M. schrieb:> 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.
Für Krypto-Zwecke nutzt man weder den leicht beeinflussbaren ADC als
Zufallsquelle, noch verwendet man veraltete Hashfunktionen wie SHA1 oder
gar MD5.
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.
Elbi schrieb:> Der Zähler zählt im> uc bis 65535 und hat bei 1000 Versuchen jede Zahl nur einmal gebracht.
... was massiv unwahrscheinlicher ist, als dass Zahlen doppelt
vorkommen. So unwahrscheinlich, dass es eigentlich fast nicht sein kann.
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.
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.
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)?
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.
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.
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! ;)
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.
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...
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.
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
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