Zufallszahlen

tja... meine frage is simpel:

wie generiert ein computer zufallszahlen oder/und buchstaben?
 
Schreib in irgendeiner Sprache ein Programm, dass das erledigt.

Wie genau entnimst du der Dokumentation der Sprache oder google
 
Hallo,
eigentlich ganz einfach:

[Vortlaufende Zahlen] ^ [Zahl] MOD [Zahl2]

Beispiel:
x^2 MOD 123

Beispieltabelle
Code:
x  : Ergebnis
100: 37 
101: 115 
102: 72 
103: 31 
104: 115 
105: 78 
106: 43 
107: 10 
108: 102 
109: 73 
110: 46 
111: 21 
112: 121 
113: 100 
114: 81 
115: 64 
116: 49 
117: 36 
118: 25 
119: 16 
120: 9

Dabei legt [Zahl2] den Max. Wert fest:
[Vortlaufende Zahlen] legt dabei den "Startwert" fest. Als Startwert benutzt man meistens die Zeit, am besten Mikrosekunden.
Denn wenn der Startwert identisch ist, so ist natürlich das Ergebnis identisch.

x^2 MOD 10

Beispieltabelle:
100: 0
101: 1
102: 4
103: 9
104: 6
105: 5
106: 6
107: 9
108: 4
109: 1
110: 0

Es gibt aber noch viele weitere Möglichkeiten

"Zufällige" Buchstaben ermittelt man so:
Man hat ein Array mit allen 26 Buchstaben:

Formel:
x^2 MOD 25

Diese gibt ein Ergebnis zwischen 0 und 25 aus, falls eine 0 "gewürfelt" wird, so wird der 0. Eintrag aus dem Array (arrays fangen an bei 0 zu zählen) genommen, normalerweise ein a.
Bei einer 25 wäre es ein Z.

So wird dann z.B. 10 mal gewürfelt und den Ergebnissen wird ein Buchstabe zugewiesen, und der String wird dann am Ende gespeichert/ausgegeben etc.


Weiter Infos:
Pseudozufallszahlen

Edit

Um echte, nicht vorhersagbare Zufallszahlen zu erhahlten muss man entweder Rauschen, Quantenmechanische Effekte oder die Abgabe von Atomen eines Radioaktiven Stoffes benutzen.
Aber ein Computer kann nichts anderes als Rechnen, und auch wenn das Ergebnis für uns Chaotisch aussieht, sofern man den Algorithmus + den Startwert hat, kann man die gleiche Reihnfolge von Zufallszahlen "würfeln".

Allerdings sofern man nur die Zufallszahlen hat, wird es sehr schwer sein auf den Startwert zurück zu kommen. Soweit ich weißt geht das bei kryptologisch sicheren Pseudogeneratoren nur per Brute Force.

Aber du musst auch beim Startwert aufpassen. Falls du einen Timestamp (Sekunden seit 1.1.1970) z.B. benutzt, und ein Angreifer weiß ca. wann die "Zufallszahlen" erstellt wurden, wird es für ihn ein leichtes sein den Startwert herrauszufinden.

Außerdem sollte man auch auf die Menge der Startwerte achten.

Falls man Mirkosekunden als Startwert benutzt wird es recht schwer sein den exakten Zeitpunkt (auf Mirkosekunden genau) der Erstellung der Zahlen zu ermitteln.
Allerdings gibt es CPU's die nur alle 10ms die Zeit aktualsieren.
Somit ist der Zahlenraum schon um das 10fache geschrumpft

Dies nennt man geschrumpfter Schlüsselraum:

Beispiel: Die Netscape Story
Ein reduzierter Schlüsselraum wurde Mitte 1995 bekannt im bekannten Browser Netscape.
Wenn man z.B. Kreditkartennummern chiffriert senden möchte, erzeugt das Programm einen 128 Bit langen Sitzungsschlüssel. Innerhalb der USA drufte nur effektiv 40 Bit des Schlüssels benutzt werden.
Selbst 2^40 ist eine ordentliche große Zahl, ca. 10^12 oder 1 Billionen (Anmerkung: Heutzutage in ca. 1 Tag geknackt) wäre ein damaliger PC rund 12 Tage beschäftig.

Doch der (Pseudo)Zufallsgenerator für den Sitzungsschlüssel von Netscape war wenigstens unter den UNIX-System Solaris und HP-UX nicht zufällig genug. Er wurde mit einer Größe initialisiert, die von der Systemzeit abhing (auf Mikrosekunden genau gemessen) sowie von den Identifikationsnummern des aktuellen und des Elternprozesses (den PID und PPID).
Daraus ergibt sicht eine Varianstionsbreite/Startwerte von 10^18 Möglichkeiten.
Wenn jedoch jmd. Zugang zu dem gleichen Rechter hat, dann kann er die PID und PPID des Anwenders sehr leicht bestimmen, und die Systemzeit wird er mindestens mit Minutengenauigkeit ermitteln können.
Es bleiben wenige zig Millionen Möglichkeiten übrig (10^7).
Um den Faktor 10^11 - also 100 Mrd. - hat sich hier die Variationsbreite verkleinert!

Und bei nur 1000 Versuchen pro Sekunde (Elderan: Heutige PC's schaffen 15 Mio Keys/Sek) wäre ein Rechner nach drei Stunden fertig!.

Doch die Praxis ist noch schöner: Oft genug kann man in einem Rechner die Zeit gar nicht auf die Mikrosekunde genau messen, sodern z.B. nur in 10ms-Intervallen.
Dann hat man noch einmal vier Größenordnungen gewonne, der Rechner arbeitet nur noch 10 Sekunden. Der volle Brute Force angriff auf den 40 Bit Key mit 1000 Versuche pro Sekunde hätte volle 30 Jahre gedauert.

....
Netscape behob den Fehler umgehened.

Quelle: Abenteuer Kryptologie ISBN: 3 -8273-1815-7

Da kann man sehen was ein reduzierter Schlüsselraum alles anrichten kann ;)
 
Wie Elderan eben sehr eindrucksvoll bewiesen hat gibt es keine Zufallszahl.
Alles wird nach einem bestimmten Alogrhytmus gebildet und wenn man den knackt kann man jede erdenktlich Zufallszahl vorhersagen
Ein Computer kann nichts erfinden.

--------------------------
Dieser Beitrag sollte als "zusätzliche Information" dienen
--------------------------
 
@Elderan erst mal big THX für deine mühe
@Johnson
also ist es so das der pc ansicht nicht mit zufall am hut hat und nur sich sein input aus andern quellen ( zeit, mausbewegegung, was weiss ich) holt...

frage geklärt

danke leute!
 
Hallo,
also ist es so das der pc ansicht nicht mit zufall am hut hat und nur sich sein input aus andern quellen ( zeit, mausbewegegung, was weiss ich) holt...

Jo so ist es.
Also oft wird nur die Zeit (dd.mm.yyy hh.mm.ss) benutzt, was man aber oft als Angreifer selber "messen" kann.
Daraus ergibt sich ein stark reduzierter Schlüsselraum (Siehe Edit im letzen Post von mir).

Wenn man weiß an welchem Tag die Zahlen erstellt wurden, so braucht man nur 86400 mögliche Startschlüssel testen.

Sonst bessere Programme benutzen schon Mircosekunden, Außenstehende können normalerweise nicht auf Mircosekunde genau sagen wann die Zahlen erstellt wurden..
Allerdings gibt es ein Problem mit der Zeitmessung. Manche Rechner aktualsieren nur alle 10ms die Mircosekunden.

Darum benutzen Programme, die sehr gute Zufallszahlen benötigen, z.B. PGP, die Mausbewegung.

Bei PGP soll man auf der Tastertur einfach irgendetwas eingeben. PGP erstellt dann einen Startwert aus den eigegebenen Zeichen und die dauer zwischen den Eingaben.
 
Zurück
Oben