Frage von Eisenkoenig, 105

Wieso können sich Computer eine zufällige Zahl ausdenken?

Hallo,

Meine Theorie ist das der Rechner eine Quarzuhr haben muss und bei der Funktion random() die Atom Secunde angehalten wird und mit dieser Zahl z.B. 3 ganz komplizierte Rechnungen durchgeführt werden, z.B. nenne mir eine zufällige Zahl zwischen 1 und 2, dann wird die 3 durch 1 und durch 2 geteilt und das Endresultat wäre die 1.

Aber das ergibt bei höheren Zahlen weniger Sinn.

Was also ist für den Zufall bei Computern verantwortlich.
Ich bin noch Schüler in der 10. Klasse und bitte von daher um eine einfache verständliche Antwort.

Vielen dank schonmal

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von TomRichter, Community-Experte für Chemie & Physik, 25

Wie zufällig darf's denn sein?

Für die meisten Zwecke (Computerspiel, Monte-Carlo-Simulation) reichen sogenannte Pseudo-Zufallszahlen aus. Man nimmt als Startwert beispielsweise die Milli- und Mikrosekunden der von Dir genannten Quarzuhr.

Oder einfacher einen der vielen Zähler, die ein Mikroprozessor mitführt und beispielsweise sagt, wieviele Sprünge er richtig vorhergesagt hat.

Diese Zahl nimmt man dann als Startwert einer Berechnung, z.B. eine wie von Schachpapa genannte, und das Ergebnis der Berechnung wird aufgeteilt: Ein Teil liefert die gewünschte Zufallszahl, der andere Teil den Startwert für die nächste Berechnung.

Für kryptographische Zwecke ist das ungeeignet, jedenfalls dann, wenn es sehr sicher sein soll. Denn wer - notfalls durch Ausprobieren aller Möglichkeiten - den Startwert kennt, kann alle folgenden Zahlen berechnen.

Für kryptographische Zwecke nimmt man echte Hardware. Einfaches Beispiel: An den Mikrofoneingang der Soundkarte wird kein Mikrofon, sondern ein 10-kOhm-Widerstand angeschlossen. Damit hängt die Eingangsspannung vorwiegend vom Rauschen ab.

Wird eine Zufallszahl benötigt, misst man die Spannung, die in diesem Moment von der Soundkarte gemessen wird.

Nachteil: Man kann nur langsam weitere Zahlen gewinnen. Würde man nach 1 Mikrosekunde erneut ablesen wollen, bekäme man den gleichen oder fast gleichen Wert geliefert. Nach einer Milli-Sekunde ist der Wert anders, aber noch nicht unabhängig vom verhergehenden. Nach einer Sekunde ist er unabhängig und echt zufällig.

Die Soundkarte ist aber nur als Beispiel gedacht, sie wird zu sehr von außen (z.B. die 50-Hz-Störungen aus dem Netz) beeinflusst. Für ernsthafte Anwendungen nimmt man abgeschirmte Bauteile, deren Rauschen dann wirklich nur noch vom Zufall abhängt.

Kommentar von Eisenkoenig ,

Vielen dank für deine Mühe,
Persönlich kann ich mir schwer vorstellen wieso mann eine Zufallszahl mit einer Soundkarte generieren sollte.
Die andere Variante ist doch auch ausreichend für Kryptographische Sachen.

Kommentar von TomRichter ,

Die Soundkarte wird nicht ernsthaft genutzt, hat aber den Vorteil, dass man sie für Übungszwecke nutzen kann, ohne erst teure Hardware zu kaufen.

Falls Du mit der anderen Variante die Pseudozufallszahlen meinst: Für viele kryptografische Zwecke sind diese ausreichend, aber für andere nicht, da nicht unabhängig voneinander.

Stell' Dir ein one-time-pad vor, das aus aufeinanderfolgenden Pseudo-Zufallszahlen besteht. Sobald man den Startwert kennt, mit dem die erste Zahl berechnet wurde, kennt man alle folgenden auch. Und da es nur 65.535 (bei 2-Byte-Zahlen) bzw. gut 4 Milliarden (bei 4-Byte-Zahlen) verschiedene Startwerte gibt, muss man gar nicht lange probieren.

Antwort
von Schachpapa, 38

In der Programmiersprache Java wird ein sog. linearer Kongruenzgenerator benutzt. Mn beginnt mit einem Startwert s und berechnet den nächsten Wert nach der Formel:

s * 25214903917 + 11

Von dieser Zahl nimmt man nur die letzten 48 Binärstellen.

Das sieht dann wie zufällig aus und ist für die meisten Anwendungen ausreichend.

Mit kleineren Zahlen  geht das auch:  s = (s * 11 +4 ) % 31

Nach 30 Schritten geht's in der gleichen Reihenfolge wieder von vorne los. Beim Java-Random geht es nach ca. 2^48 = 281 Billionen Schritten wieder von vorne los.

Kommentar von Eisenkoenig ,

Sagen wir mal ich möchte das eine zufällige Zahl zwischen 1 und 2 raus kommt, dann würde mit der Rechnung trotzdem immer die selbe Zahl rauskommen so wie ich das verstanden habe.

Kommentar von Schachpapa ,

Der lineare Kongruenzgenerator (LCG) liefert eine Zahl zwischen 0 und 2^48. Wenn du die durch 2^48 teilst, kommt eine Zahl zwischen 0 und 1 heraus. Das ist das, was die random() Funktion liefert.

random() * 2 liefert eine Zahl x mit 0 <= x < 2

random() * 2 + 1 liefert eine Zahl x mit 1 <= x < 3

Wenn du davon nur den Teil vor dem Komma nimmst, hast du 1 oder 2 gleich wahrscheinlich.

Die meisten Programmiersprachen haben einen LCG eingebaut. Für besondere Ansprüche gibt es auch andere bessere Zufallszahlengeneratoren. Die bessere Qualität muss man sich aber mit mehr Rechenaufwand erkaufen. Für die meisten Anwendungen (Spielsimulationen etc.) reicht der einfach LCG.

Antwort
von Fireonic, 54

Zunächst einmal können Computer keine Zufallszahlen generieren, da sie zuhöchst logisch denken. Alles was sie machen können ist Zahlen auf Arten zu generieren, die wir Menschen nicht nachvollziehen können, sodass sie uns zufällig erscheinen.


Ein Beispiel wäre die Zeit seit dem Start des Computers in Millisekunden. Diese wird dann als Eingabe genutzt, es werden einige komplizierte Algorithmen durchgeführt und wir kriegen eine scheinbar zufällige Zahl, die du als Mensch nicht erraten könntest.


Wenn du mehr zum Thema wissen willst, lies dir mal diesen Link durch: https://de.wikipedia.org/wiki/Zufallszahlengenerator


Keine passende Antwort gefunden?

Fragen Sie die Community