Hackerboard Wiki HaboBlog
Hackerboard bei Facebook Hackerboard bei Google+ Hackerboard bei Twitter

[HaBo]

 
(Web-) Design und webbasierte Sprachen Tipps & Tricks, Designabgleich, HTML & Javascript, Flash, ASP, PHP, Perl/CGI...

Frage - nächste Zufallszahl vorhersagen/berechnen?

Diskussion: Frage - nächste Zufallszahl vorhersagen/berechnen? im Forum (Web-) Design und webbasierte Sprachen, in der Kategorie Web, Network & Multimedia Palace; Anzeige ich hab neulich das in einem Post hier auf n board gelesen: Zitat: Orginal von Elderan Ein Computer kann ...

Antwort
Alt 28.04.06, 00:39   #1 (permalink)
404
 
Benutzerbild von 404
 
Registriert seit: 28.11.04
404 Leistung: Z3
404 eine Nachricht über ICQ schicken
Likes: 0
Smile Frage - nächste Zufallszahl vorhersagen/berechnen?

Anzeige

ich hab neulich das in einem Post hier auf n board gelesen:

Zitat:
Orginal von Elderan
Ein Computer kann keine Zufälligen Zahlen genieren, denn es ist und bleibt eine Rechenmaschiene die nichts anderes kann als Rechnen. Und was man ausrechnen kann, ist nicht Zufällig.
Meine Frage:

Ist es möglich, die nächste Zahl einer Random Funktion wie z.B. die rand() Funktion in PHP als nächstes ausspuckt, zu berechen & so vorherzusagen? So wie ich das jetzt verstanden hab, müsste es möglich sein, wenn man den Algorhytmus knackt, nach dem die Random Funktion arbeitet? X( Wenn ja, wie müsste so ein Code dann aussehen? ?(

THX. Würde mich echt mal interessieren. :rolleyes:

cya & gn8
__________________
Major Fault, General Error and Colonel Panic came together to celebrate timeout.


------------------------------------------------
http://www.shick.de/
------------------------------------------------
404 ist offline   Mit Zitat antworten
Alt 28.04.06, 08:10   #2 (permalink)
 
Registriert seit: 18.03.05
Tasmas Leistung: Facit NTK
Likes: 0
Standard

Hallo,

Wofür ist den die Zufallsfunktion gut? Das du die nächsten Zahlen eh schon weisst?
Tasmas ist offline   Mit Zitat antworten
   
HaBOT
 
- Anzeige -

Werbung ist gerade online    
Alt 28.04.06, 09:30   #3 (permalink)
 
Registriert seit: 24.08.05
ElLute Leistung: Facit NTK
Likes: 0
Standard

wiso algorithmus knacken?!? ist der zufallsalgorithmus nicht hinlänglich bekannt?!? das problem dürften eigentlich nur sein, die gleichen eingabeparameter zu finden...
ElLute ist offline   Mit Zitat antworten
Alt 28.04.06, 09:42   #4 (permalink)
 
Registriert seit: 24.10.05
Blacki Leistung: Facit NTK
Likes: 0
Standard

ich glaube
PHP-Code:
$zahl microime()*100000 
Blacki ist offline   Mit Zitat antworten
Alt 28.04.06, 10:33   #5 (permalink)
 
Registriert seit: 30.05.05
v01d Leistung: Facit NTK
Likes: 0
Standard

falls php auf das den kernel zurückgreift, wirds unmöglich, wenn man sich die beschreibung durchlest:

Code:
cat /usr/src/linux/drivers/char/random.c
Zitat:
* Theory of operation
* ===================
*
* Computers are very predictable devices. Hence it is extremely hard
* to produce truly random numbers on a computer --- as opposed to
* pseudo-random numbers, which can easily generated by using a
* algorithm. Unfortunately, it is very easy for attackers to guess
* the sequence of pseudo-random number generators, and for some
* applications this is not acceptable. So instead, we must try to
* gather "environmental noise" from the computer's environment, which
* must be hard for outside attackers to observe, and use that to
* generate random numbers. In a Unix environment, this is best done
* from inside the kernel.
*
* Sources of randomness from the environment include inter-keyboard
* timings, inter-interrupt timings from some interrupts, and other
* events which are both (a) non-deterministic and (b) hard for an
* outside observer to measure. Randomness from these sources are
* added to an "entropy pool", which is mixed using a CRC-like function.
* This is not cryptographically strong, but it is adequate assuming
* the randomness is not chosen maliciously, and it is fast enough that
* the overhead of doing it on every interrupt is very reasonable.
* As random bytes are mixed into the entropy pool, the routines keep
* an *estimate* of how many bits of randomness have been stored into
* the random number generator's internal state.
*
* When random bytes are desired, they are obtained by taking the SHA
* hash of the contents of the "entropy pool". The SHA hash avoids
* exposing the internal state of the entropy pool. It is believed to
* be computationally infeasible to derive any useful information
* about the input of SHA from its output. Even if it is possible to
* analyze SHA in some clever way, as long as the amount of data
* returned from the generator is less than the inherent entropy in
* the pool, the output data is totally unpredictable. For this
* reason, the routine decreases its internal estimate of how many
* bits of "true randomness" are contained in the entropy pool as it
* outputs random numbers.
*
* If this estimate goes to zero, the routine can still generate
* random numbers; however, an attacker may (at least in theory) be
* able to infer the future output of the generator from prior
* outputs. This requires successful cryptanalysis of SHA, which is
* not believed to be feasible, but there is a remote possibility.
* Nonetheless, these numbers should be useful for the vast majority
* of purposes.
v01d ist offline   Mit Zitat antworten
Alt 28.04.06, 16:57   #6 (permalink)
Moderator
 
Benutzerbild von Elderan
 
Registriert seit: 30.03.04
Elderan Leistung: 8086
Likes: 14
Standard

Hallo,
sobald man die Startzahl kennt, kann man die Zahlen vorhersagen.

PHP-Code:
<?php
srand
(12345);
for(
$i=0;$i<10;$i++)
   echo 
rand(0,100)."<br>";
?>
Dieser Script gibt dir immer die gleichen Zufallszahlen aus, denn der Startwert ist immer die gleiche (12345).

Wenn man jetzt den Startwert kennt, kann man also die "Zufallszahlen" voraussagen.

Kennt man nur die Zufallszahlen, dann kann es u.U. sein, dass man über die Zufallszahlen an den Startwert. Solche Algorithmen nennen sich dann: Kryptographisch unsicher.

Des weiteren wenn man folgenden Startwert bentutzt:
mt_srand((double)microtime()*1000000); (da seed = int ist)

Dann gibt es max. 1 Millionen mögliche Startwerte. Lässt man jetzt so ein zufälliges Passwort erstellen, dann gibt es max. 1 Mio. Passwörte, die man doch relativ schnell durchtesten kann, sogar über das Internet (bei 100 Passwörter/Sek dauert es ca. 2 Stunden).
Also zur Erstellung eines PW sehr ungeeignet, dieses Verfahren.

Zitat:
Die PHP rand() Funktion benutzt den in der jeweiligen libc enthaltenen Zufallsgenerator. Gerade in älteren libc-Versionen ist dieser aber oft langsam und die Qualität der erzeugten Pseudozufalls-Sequenzen ist unbefriedigend bis unbekannt.
PHP-Manual
Laut Bruce Schneier in "Angewandter Kryptographie", sind die enthaltenen Zufallsgeneratoren in Compilern/C-Libs meistens extrem schlecht und unsicher und lassen sich relativ leicht knacken, deswegen rät er ab, die fertige rand() Funktion von deinem C-Compiler zu verwenden.

Unter Windows lasse ich mit PHP z.B. ein Bild erzeugen, dabei werden mit rand() "zufällige" Punkte auf dem Bild eingezeichnet.
Allerdings sind diese Punkte gar nicht zufällig, sondern ergeben ein schönes Streifenmuster. Unter Linux sah dies anders aus. (Siehe Anhang PHP Code)

Dann gibt es noch die mt_rand() Funktion, die auf den "Mersenne Twister" zurückgreift.

Zitat:
Unlike Blum Blum Shub, the algorithm in its native form is not suitable for cryptography
Wikipedia

Also sind die Algorithmen an sich schonmal nicht kryptographisch sicher.


Dann kommt noch die falsche Handhabung
So dann gab es dort noch die "Netscape Story":
Zitat:
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

Anhang:
PHP-Code:
<?php
//Code entweder mit code.php?method=rand oder mit 
//code.php?method=mt_rand aufrufen

//Ergebnis hängt je von der rand Funktion eurer Lib ab.

mt_srand((double)microtime()*1000000);
srand((double)microtime()*1000000);


$image imagecreate(1000,650) OR die("Fehler beim Erstellen des Bildes");
$farbe_body=imagecolorallocate($image,210,210,210);

if(
$_GET["method"] == "rand"$farbe_pixel imagecolorallocate($image,255,0,0);
else 
$farbe_pixel imagecolorallocate($image,0,0,255);


for(
$i 0;$i<7000;$i++) {
   if(
$_GET["method"] == "mt_rand") {
       
$x mt_rand(0,1000);
       
$y mt_rand(0,650);
    } else {
       
$x rand(0,1000);
       
$y rand(0,650);
    }

   
imagesetpixel($image$x$y$farbe_pixel);
}

header("Content-Type: image/png");
imagepng($image);

?>
Elderan ist offline   Mit Zitat antworten
Alt 28.04.06, 18:47   #7 (permalink)
404
Themenstarter
 
Benutzerbild von 404
 
Registriert seit: 28.11.04
404 Leistung: Z3
404 eine Nachricht über ICQ schicken
Likes: 0
Lightbulb

Vielen Dank, jetzt bin ich wieder n stück schlauer
__________________
Major Fault, General Error and Colonel Panic came together to celebrate timeout.


------------------------------------------------
http://www.shick.de/
------------------------------------------------
404 ist offline   Mit Zitat antworten
Antwort
   
- Anzeige -

Werbung ist gerade online    

[HaBo] » Web, Network & Multimedia Palace » (Web-) Design und webbasierte Sprachen » Frage - nächste Zufallszahl vorhersagen/berechnen?
Themen-Optionen
Ansicht

Forumregeln
Es ist Ihnen nicht erlaubt, neue Themen zu verfassen.
Es ist Ihnen nicht erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks sind aus
Pingbacks sind aus
Refbacks sind aus


Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
Vorhersagen über Lottozahlen? Serow Off topic-Zone 13 07.09.07 12:09
[C/C++] Zufallszahl ändert sich nicht mehr... necx2k5 Code Kitchen 6 23.03.07 21:35
Zufallszahl in C++ michio Code Kitchen 5 18.02.06 16:40
Zufallszahl Blood Code Kitchen 2 25.01.06 14:15


1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61