Was sind die Unterschiede zwischen der rand () -Funktion und dem RNG-Peripheriegerät (Random Number Generator)?


9

Ich wundere mich für RNG-Peripheriegeräte (Random Number Generator) in STM32F4XXXX-MCUs. Weitere Informationen finden Sie in diesem Referenzhandbuch (Seite 748). Andererseits haben wir die Funktion rand () in der stdlib-Bibliothek, die dieselbe Aufgabe ausführen. Jetzt habe ich zwei Fragen:

  1. Was sind die Unterschiede (Vor- und Nachteile) zwischen der Rand () - Funktion und dem RNG-Peripheriegerät (Random Number Generator)?
  2. Schauen Sie sich diesen Teil an:

Eigenschaften

Bitte erläutern Sie diese beiden Optionen (insbesondere die zweite Option).

Antworten:


12

Daves Antwort setzt es ganz nett fort, aber um ein bisschen mehr über die zweite Option zu klären:

Ein realer Hardware-Zufallszahlengenerator verwendet eine physikalische Entropiequelle. Eine solche Entropiequelle könnte kosmische Strahlung, elektrisches Rauschen, Avanlancheeffekt einer in Sperrrichtung vorgespannten Diode (oder BJT-Transistor), Chua-Schaltung usw. sein. Je weniger deterministisch die Entropiequelle ist, desto besser ist die Qualität der Zufallsausgabe. Eine ideale Entropiequelle wäre die Verwendung eines quantenphysikalischen Effekts oder etwas, das unmöglich mit deterministischen Gleichungen modelliert werden kann.

Ein weiterer wichtiger Faktor bei Zufallszahlengeneratoren ist, dass die Entropiequelle möglicherweise nur eine begrenzte Menge an Entropie pro Zeiteinheit erzeugt. Ein gutes Beispiel ist die Chua-Schaltung: Obwohl sie ziemlich zufällig ist, hat sie eine sehr schlechte Geschwindigkeit und kann möglicherweise nicht für reale Anwendungen verwendet werden.

In vielen Prozessoren / Mikrocontrollern mit eingebauten RNGs wird die Taktverschiebung von 2 auf 4 Takte verwendet, die absichtlich falsch synchronisiert sind. Dann verwenden sie sowohl analoge als auch digitale Filter, um das Muster noch weiter zu randomisieren und das Ergebnis in ein Register zu verschieben. Das Durchführen einer solchen Filterung erfordert einige Zyklen, was die minimale Anzahl von Zyklen erklärt, die für einen bestimmten Takt erforderlich sind, bevor der neuere Wert verfügbar ist.

Die Taktverschiebung ist kein Quanteneffekt, daher könnte sie modelliert werden, ist jedoch zufällig genug, da sie von vielen Parametern abhängt, wie z. B. Temperatur, Siliziumprozess, Betriebsfrequenz, elektrisches Rauschen, Hintergrundstrahlung usw. .

In Anwendungen, in denen das Hardware-RNG nicht über einen ausreichenden Durchsatz verfügt (z. B. in sehr anspruchsvollen kryptografischen Anwendungen), wird das Hardware-RNG häufig als Startwert für einen Pseudozufallszahlengenerator wie die Funktion rand () in der sdtlib verwendet. Eine solche Anwendung bietet jedoch normalerweise eine bessere Implementierung von rand (), das speziell für die Ausführung mit einem Startwert ausgelegt ist, der sehr oft mit echten Zufallswerten verworfen werden kann. In neueren Intel-Prozessoren mit integrierten Hardware-RNGs ist der Pseudozufallsalgorithmus-Teil direkt in das Silizium integriert, sodass er von der Hardware ausgeführt wird, was einen sehr hohen Zufallsdurchsatz ergibt.

Wenn Sie sich für die rand () -Methode selbst interessieren, handelt es sich nur um einen methematischen Ausdruck, der eine ausreichend große Entropiemenge erzeugen soll. Groß genug, um von der Anwendung abhängig zu sein: Für Generationen von kryptografischen Schlüsseln muss die Zufälligkeit von höherer Qualität sein als die Zufälligkeit, die für ein einfaches zufälliges Mischen in Ihrem Lieblingsmusik-Player erforderlich ist. Es ist offensichtlich, dass die Berechnungskosten der Zufallszahl umso höher sind, je höher die Qualität der Zufallsausgabe ist.

Die Operationen, die an einer Zufallszahl beteiligt sind, sind denen bei der Berechnung des MD5-Hash einer Datei ziemlich ähnlich: Sie versuchen, eine Art Bitlawineneffekt zu verwenden, so dass eine einzelne Bitänderung in einem Startwert das gesamte Erzeugungsmuster ändert. Als Randnotiz empfehle ich NICHT, MD5 als Pseudozufallszahlengenerator zu verwenden. es war nur ein Beispiel. Es wäre sowohl ineffizient als auch nicht so zufällig, aber der Punkt ist da: Wenn Sie dieselbe Datei einem MD5-Hashing-Algorithmus zuführen, erhalten Sie immer dieselbe deterministische Ausgabe, so ziemlich die gleiche Art und Weise, wie Sie immer dieselbe Ausgabe erhalten würden Die Funktion rand (), wenn Sie denselben Startwert eingeben, es sei denn, Ihre Implementierung hängt von beliebigen Elementen wie der aktuellen Zeit ab.


7

Der Hauptunterschied besteht darin, dass die rand()Bibliotheksfunktion ein Pseudozufallszahlengenerator ist. Bei einem bestimmten Startwert (Startwert) wird immer dieselbe Zahlenfolge erzeugt.

Andererseits ist das RNG-Peripheriegerät ein echter Zufallszahlengenerator und erzeugt nicht wiederholbare Folgen von Zahlen.


Vielen Dank. und diese beiden Option ..?
Roh

2
Was bedeutet "und diese beiden Optionen ..?" bedeuten? Ist das eine Frage?
John U

2

Die beiden von Ihnen skizzierten Themen lassen sich relativ einfach beschreiben:

  • 1: Sie können Zufallszahlen nicht schneller als einmal alle 40 Taktzyklen generieren. Dies führt zu 48 MHz / 40 = ~ 1 M Sample / s
  • 2: Die Hardware enthält einen Monitor, der jede generierte Nummer auf seltsames Verhalten überprüft. Wenn Sie beispielsweise die Temperatur als Quelle verwenden und eine hochstabile Temperaturumgebung haben, kann es vorkommen, dass das RNG dieselben Nummernsequenzen erneut generiert (wie ein Pseudozufallszahlengenerator, wenn Sie mit demselben Startwert beginnen). . Die Komponente würde dies überwachen und Ihnen ein Signal geben, wenn das RNG wie erwartet funktioniert. Wenn Sie möchten, dass Ihre Zahlen "wirklich" zufällig sind, können Sie dieses Flag überwachen, um festzustellen, ob sie wirklich sind. Wie genau dies gemacht wird und wie das RNG tatsächlich funktioniert, wird wahrscheinlich im verbleibenden Text angegeben.

1

Angenommen, man entwirft einen mechanischen Roulette-Rad-Spinner, der einen Motor für eine bestimmte Zeitspanne antreibt, darauf wartet, dass das Rad und der Ball zur Ruhe kommen, und beobachtet, in welcher Tasche sich der Ball befindet. Normalerweise werden Ball und Rad nach jedem Drehen landen an einer etwas anderen Stelle, und kleine Abweichungen in der Position des Balls nach einer Drehung können einen großen Unterschied darin machen, wo er bei der nächsten Drehung landet. Selbst wenn der Motor immer für die gleiche Zeitdauer mit Strom versorgt wird, ist die Tasche, in der ein Ball bei einer Drehung landet, unabhängig davon, wo er zuvor die Drehung gelandet hat.

Nehmen wir nun jedoch an, dass einige der Zahlen leichte Vertiefungen aufweisen oder entwickeln und die Lager des Motors flache Stellen entwickeln. Dann wären einige Drehungen zufällig, aber nach einer Drehung, die dazu führt, dass der Ball in einer Vertiefung landet und sich das Lager an einer flachen Stelle befindet, könnte die nächste Drehung sehr wohl darauf ausgerichtet sein, dasselbe Ergebnis zu erzielen wie die letzte Drehung, bei der dies stattgefunden hat. Wenn die meisten Drehungen nicht gleichzeitig den Divot und den Flat Spot treffen, wird ihre Existenz die Dinge wahrscheinlich nicht allzu sehr beeinflussen. Auf der anderen Seite, wenn eine Divot / Flat-Kombination genau richtig platziert ist, so dass ein Ball dort einigermaßen konstant auf einer Sekunde landet, und wenn eine so platziert wird, dass der Ball zum ersten zurückgeschickt wird, dann zu einer am Ende mit einigen extrem verzerrten Verhaltensweisen.

Wenn nach der Landung auf 4 und 23 der nächste Spin eine 4 ist, bedeutet dies nicht unbedingt ein Problem. Eine 4 sollte in dieser Situation ungefähr 1/38 der Zeit erscheinen. Ferner sollte die Erfassung von Zufallsdaten nur die Taschenzahl erfassen, da nichts Nützliches darüber bekannt ist, wie oft der Ball in verschiedenen Teilen der Tasche zur Ruhe kommen sollte. Nichtsdestotrotz kann es für die Aufzeichnung der Zahlen nützlich sein, auch zu "beobachten", wo in der Tasche der Ball anhält, und auf ungewöhnliche Muster zu achten. Die Verteilung der Standorte kann ohne Hinweis auf ein Problem nach vorne oder hinten verschoben werden. Wenn jedoch eine enge Spitze in der Verteilung vorhanden ist, kann dies Anlass zur Sorge geben.

Wenn aufeinanderfolgende Ablesungen von einem Zufallsgenerator statistisch unabhängig sind , ist die Kompensation der Verzerrung nicht schwierig (obwohl die erforderliche Zeit nicht deterministisch ist). Wenn ein Generator jedoch in einen Zustand fällt, in dem die Messwerte nicht unabhängig sind (z. B. der zyklische Zustand des obigen Rads), wird eine Kompensation grundsätzlich unmöglich - daher muss ein Hardware-RNG eine Schaltung enthalten, um solche Verhaltensweisen zu erkennen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.