From 81d15ffc25344f21b33bbc8fe18b588d05613354 Mon Sep 17 00:00:00 2001 From: mhioz <50373842+mhioz@users.noreply.github.com> Date: Sun, 12 May 2019 21:08:43 +0200 Subject: [PATCH] Initialisierung des Zufallsgenerators verbessert MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Mithilfe eines offenen AD-Wandler Eingangs wird eine Zahl für die Initialisierung des Zufallsgenerators erzeugt. Dazu wird der analoge Port mehrfach eingelesen, aber nur das niederwertigste Bit weiterverwendet da es am stärksten rauscht. Das LSB wird bitweise verschoben und mit XOR zu einem 32 Bit Integer kombiniert. Bei Bedarf können die Durchläufe der Schleife erhöht werden. Die anderen randomSeed()-Aufrufe wurden entfernt, die verbesserte Initialisierung sollte genügen. --- Tonuino.ino | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/Tonuino.ino b/Tonuino.ino index b72f638..ac35933 100644 --- a/Tonuino.ino +++ b/Tonuino.ino @@ -641,6 +641,7 @@ MFRC522::StatusCode status; #define buttonDown A2 #define busyPin 4 #define shutdownPin 7 +#define openAnalogPin A7 #ifdef FIVEBUTTONS #define buttonFourPin A3 @@ -718,7 +719,15 @@ void waitForTrackToFinish() { void setup() { Serial.begin(115200); // Es gibt ein paar Debug Ausgaben über die serielle Schnittstelle - randomSeed(analogRead(A7)); // Zufallsgenerator initialisieren + + // Wert für randomSeed() erzeugen durch das mehrfache Sammeln von rauschenden LSBs eines offenen Analogeingangs + uint32_t ADC_LSB; + uint32_t ADCSeed; + for(uint8_t i = 0; i < 128; i++) { + ADC_LSB = analogRead(openAnalogPin) & 0x1; + ADCSeed ^= ADC_LSB << (i % 32); + } + randomSeed(ADCSeed); // Zufallsgenerator initialisieren // Dieser Hinweis darf nicht entfernt werden Serial.println(F("\n _____ _____ _____ _____ _____")); @@ -840,7 +849,6 @@ void previousButton() { void playFolder() { Serial.println(F("== playFolder()")) ; disablestandbyTimer(); - randomSeed(millis() + random(1000)); knownCard = true; _lastTrackFinished = 0; numTracksInFolder = mp3.getFolderTrackCount(myFolder->folder); @@ -1088,8 +1096,6 @@ void loop() { return; if (readCard(&myCard) == true) { - // make random a little bit more "random" - randomSeed(millis() + random(1000)); if (myCard.cookie == cardCookie && myCard.nfcFolderSettings.folder != 0 && myCard.nfcFolderSettings.mode != 0) { playFolder(); }