Frage von iBrain, 45

Existiert überhaupt eine Möglichkeit einen Software-basierten Zufallsgenerator zu erstellen der sich nicht an einen Algorithmus orientiert?

Hallo, ich programmiere schon seit einiger Zeit mit verschiedenen Programmiersprachen (C, Phyton, LUA, PHP, ...) und immer bei der Implementierung eines Zufallsgenerators wand ich mich an eine API welche ich jetzt vor kurzem auseinandergefleddert habe und einen Algorithmus entdeckt habe. Ich habe einige Zeit überlegt wie man einen Zufallsgenerator Algorithmusunabhänigig schreiben könnte und mir ist dazu rein garnichts eingefallen bis auf Hardwarebasierter Würfelspielchen hat da jemand ne Idee und könnte mir aushelfen oder bin auf etwas gestoßen was gar unmöglich ist ?

Antwort
von Roderic, 28

Software basiert auf Algorithmen. Algorithmen sind immer deterministisch.

Ein Zufallsgenerator, der nur auf Software basiert, muss demzufolge ebenfalls deterministisch sein.

Ein Software-Zufallszahlen-Generator ist also immer nie "ganz zufällig".

Das Einbinden der Uhrzeit oder anderer Softwarekomponenten des PC verschleiert nur das Problem - beseitigt es aber nicht.

Helfen kann nur das Einbinden einer Hardware Komponente, die in irgendeiner - wie auch immer geartete - Weise auf einen quantenmechanischen Prozess zugreifen kann - zB das Rauschen eines offenen hochohmigen CMOS Gates.

Antwort
von grtgrt, 45

Software arbeitet stets so, wie der sie darstellende Code es vorgibt. Damit ist Software immer auch ein Algorithmus.

Man könnte sich jetzt höchstens fragen, ob dieser Algorithmus so geschrieben werden kann, dass er nicht stets gleiches Ergebnis liefert wird. Und das ist in der Tat möglich: Man muss nur Zeitabhängigkeit einbauen.

Wie man das macht, beschreibt https://www.gutefrage.net/frage/was-muss-ich-in-der-main-funktion-aendern-um-ver... .

Antwort
von TeeTier, 23

Die anderen Antworten gehen ausreichend auf deine Frage ein, weshalb ich hier nur in ein paar kleinen Sätzen eine Erfahrung mit einem selbstgeschriebenen PRNG schreiben will:

Dir ist sicherlich bekannt, dass moderne CPUs über einen RDRAND Befehl verfügen, der angeblich echte Zufallszahlen erzeugen soll.

Ich habe die Ausgabe von RDRAND mal mit Hilfe von der "dieharder" Testsuite statistisch überprüft, und mit dem Ergebnis eines selbst geschriebenen XOR-Shift-Pseudo-Zufallszahlen-Generators überprüft.

Das Ergebnis war, dass RDRAND zwar nicht durchgefallen war, aber mehrere Tests als "WEAK" absolviert hat, die der einfache XOR-Shift PRNG mit Bravur bestanden hat.

Ich habe ebenfalls die C-Referenzimplementierung vom Mersenne-Twister überprüft, und auch hier hatte der XOR-Shift-PRNG ein besseres Ergebnis erziehlt.

Ich habe jetzt keine Zeit mehr, aber guck dir bei Gelegenheit ruhig mal die Wikipedia-Seite zu XOR-Shift Generatoren an.

Fazit: Ein primitiver algorithmischer PRNG mit einfachsten Operationen, kann durchaus besser als MT oder sogar Hardware-Implementierungen wie RDRAND sein. (über die Gründe dafür kann man streiten, und die sind auch nicht der Punkt ... hier geht es um das Endergebnis)

RDRAND erzeugte als echte schlechte Zufallszahlen, und XOR-Shift erzeugte gute Pseudo-Zufallszahlen. Man muss sich dabei bewusst sein, was man wofür einsetzen möchte!

Außerdem darf man im Bezug auf Kryptografie sog. Seitenkanalangriffe nicht unterschätzen, die den besten echten (!) Zufallszahlengenerator ad absurdum führen.

Kommentar von iBrain ,

Also könnte man von der Begrifflichkeit eines Warscheinlichkeitsgenerators ausgehen was für mich ersichtlicher erscheint ?

Expertenantwort
von DepravedGirl, Community-Experte für Mathematik, 18

Das beste was mir dazu einfällt, wäre, dass man ein externes Gerät anschließt, und dann Zustände in dem Gerät abfragt, von denen man weiß dass sie zufällig sind.

Das gab es früher, als es Datasetten noch gab, bestimmte Zustände von ihnen konnte man abfragen. Wenn man das tat bekam man Zustandswerte die sich nie in identischer Art und Weise wiederholten. Was für Geräte sich stattdessen im Jahre 2015 eignen würden weiß ich nicht.

Antwort
von Mamuschkaa, 35

kommt darauf an was du unter software-Basiert verstehst,
Wenn du etwas mit der normalen Technik Programmierst, wird am Ende etwas durch Schaltkreise gejagt, die vorraus berechnet werden können.
Ein Algoritmus halte ich immer für angebracht, um eine Gerechte Verteilung zu garantieren, dennoch kann in diesem Algorithmus zb informationen eingehen, welche nicht durch die Software bestimmt sind,(zb zustände in der micro architektur welche durch andere Programme gesteuert werden)
Wenn du ein wissenschaftlichen Zufall möchtest, müsstest du erst mal neue PC bauen, in den erkenntnisse aus der QuantenPhysik oder Quantenmechanik eingehen,
zb sieht man den Radioaktive zerfall meineswissens als Zufällig an,
Wenn mal also den Zerfall von Atomkernen messen würde und auf dieser Grundlage ein zufallsgenerator erzeugt würde das gehen.
Dies ist aber wohl nicht in der möglichkeit eines durchschnittlichen Programmierers enthalten.

Antwort
von dompfeifer, 9

So wie ich die Frage verstanden habe, sollen die Ausgaben des Zufallsgenerators absolut unberechenbar sein. Bei einem festen Algorithmus werden Ergebnisse immer im Voraus berechenbar.

Die erwünschte Software lässt sich derart gestalten, dass über entsprechende Sensoren ständig externe, nicht vorhersehbare physikalische Größen in den Rechenprozess eingebracht werden. Das könnten z.B. digitale Signale aus dem Windrauschen sein, aus dem TV-Wellen-Rauschen, meteorologische Daten wie Luftdruck, Temperatur, Wolkenmuster u. dergl. mehr.

Antwort
von nordman48, 29

Eigentlich kann es ja nur algorithmusabhänigig funktionieren, sonst müsstest du eine lernfähige Software haben.

Kommentar von LC2015 ,

sonst müsstest du eine lernfähige Software haben.

Daran scheitert es nicht, nahezu jeder nutzt täglich lernfähige bzw. selbstlernende Software (z.B. Spamfilter, Autokorrektur etc.)

Kommentar von iBrain ,

Ich denke das diese auch nach einigen Algorithmen arbeiten und nur gewisse Wörter erfassen und bei erneuter Wiedergabe oder vorkommen eines Musters es als Spam klassifizieren.

Keine passende Antwort gefunden?

Fragen Sie die Community