Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

md5 Verkryptung

23 views
Skip to first unread message

Andre Gildemeister

unread,
Nov 15, 2000, 3:00:00 AM11/15/00
to
Hallo,

Ich programmierere momentan an einem Online Portal. Für ein paar Funktionen
muss der user sich registrieren und später einloggen.
Um noch besseren Schutz zu Gewährleisten würde ich die Passwörter gerne mit
md5 verkrypten, ich glaube das ich momentan die beste und
sicherste Methode oder ?
Wenn die Passwörter mit md5 verkryptet werden dann gibt es aber trotzdem
noch eine Möglichkeit sie ihm nachhinein zu verändern oder ?
Außerdem wäre noch interessant zu wissen ob man trotz der verkrypteten
Passwörter noch einen Vergleich im Stile von:
$result = mysql_query("SELECT id,name,passwd from user WHERE name='$user'" .
"AND passwd='$passwd'"); herstellen kann.
Den wenn der user sein passwort bspw. andre20 eingibt und es verkryptet so
aussieht ^131vi4ojr4t539?3503´ß5 kann man dann
intern trotzdem noch ein Vergleich herstellen, wenn nein mit welcher
Verkryptung kann man das erreichen ?

Beste Gruesse
Andre Gildemeister

Matthias P. Wuerfl

unread,
Nov 15, 2000, 3:00:00 AM11/15/00
to
Andre Gildemeister in de.comp.lang.php:

>Wenn die Passwörter mit md5 verkryptet werden dann gibt es aber
>trotzdem noch eine Möglichkeit sie ihm nachhinein zu verändern
>oder ?

Aendern? Ueberschreiben mit einem neuen Password - ja. Vom md5
eines Textes laesst sich nicht auf den Text schliessen.

>Außerdem wäre noch interessant zu wissen ob man trotz der
>verkrypteten Passwörter noch einen Vergleich im Stile von:
>$result = mysql_query("SELECT id,name,passwd from user WHERE
>name='$user'" . "AND passwd='$passwd'"); herstellen kann.

Klar. $passwd muss dann (genau wie das Feld in der Datebank)
vermd5t sein.

>Den wenn der user sein passwort bspw. andre20 eingibt und es
>verkryptet so aussieht ^131vi4ojr4t539?3503´ß5 kann man dann
>intern trotzdem noch ein Vergleich herstellen, wenn nein mit
>welcher Verkryptung kann man das erreichen ?

bei md5("anre20") kommt _immer_ das gleiche raus. Beim Eingeben wie
beim ueberpruefen. md5 (- wie sagt man? Hashes?) besteht aus den
Buchstaben a bis f sowie aus den Zahlen 0 bis 9. So wie oben sieht
es also nicht aus.


Gruesse, Matthias

--
Ich halte nichts von Intuition. Aber ich habe das
seltsame Gefühl, daß ich das eines Tages tun werde
(Woody Boyd, Cheers)

Alexander - LX - Schmidt

unread,
Nov 15, 2000, 3:00:00 AM11/15/00
to
"Andre Gildemeister" <gildem...@ecsites.de> schrieb:

> Um noch besseren Schutz zu Gewährleisten würde ich die
> Passwörter gerne mit md5 verkrypten, ich glaube das ich
> momentan die beste und sicherste Methode oder ?

Schon. Aber ich denke, wenn der MySQL-Server gut gesichert
ist und Dein interner Bereich vielleicht sogar über einen
https gefahren wird, ist das sinnvoller, als Passwörter
encrypted zu speichern.

> Wenn die Passwörter mit md5 verkryptet werden dann gibt
> es aber trotzdem noch eine Möglichkeit sie ihm nachhinein
> zu verändern oder?

Ja, warum nicht? Zeichenfolgen sind Zeichenfolgen.

> Außerdem wäre noch interessant zu wissen ob man trotz der
> verkrypteten Passwörter noch einen Vergleich im Stile von:
> $result = mysql_query("SELECT id,name,passwd from user
> WHERE name='$user'" . "AND passwd='$passwd'"); herstellen kann.

Ja, vorher $passwd natürlich auch md5()'en. Du vergleichst
dann die beiden verschlüsselten Passwörter. Du kannst aus
md5 nicht wieder das Original restaurieren, wohl ergibt
aber ein md5("andre"); immer das gleiche Resultat.

aLeX!
--
[ planet LX - the gaLaXy of sonic experiences : ]
[ http://www.planet-lx.de | http://www.mp3.de/home/lx ]
[ mailto:l...@planet-lx.de | mailto:m...@il-an-lx.de ]

Kristian Koehntopp

unread,
Nov 15, 2000, 3:00:00 AM11/15/00
to
"Andre Gildemeister" <gildem...@ecsites.de> writes:
>Ich programmierere momentan an einem Online Portal. Für ein paar Funktionen
>muss der user sich registrieren und später einloggen.
>Um noch besseren Schutz zu Gewährleisten würde ich die Passwörter gerne mit
>md5 verkrypten, ich glaube das ich momentan die beste und
>sicherste Methode oder ?

md5 ist keine Verschluesselungsfunktion, sondern eine
kryptographische Hashfunktion. Diese unterscheiden sich von
Verschluesselungsfunktionen dadurch, dass sie irreversibel sind.

Dennoch koennen solche Funktionen zur Sicherung eines Logins
eingesetzt werden. Die Challenge-Response-Authentication von
PHPLIB zeigt, wie es geht.

>Außerdem wäre noch interessant zu wissen ob man trotz der verkrypteten
>Passwörter noch einen Vergleich im Stile von:
>$result = mysql_query("SELECT id,name,passwd from user WHERE name='$user'" .
>"AND passwd='$passwd'"); herstellen kann.

Nein.

Ein Login sieht stattdessen so aus, dass der Server eine
Zufallszahl ermittelt, an den Browser sendet und sich zugleich
in einer Session merkt. Diese Zahl heisst Challenge.

Der User tippt im Browser sein Passwort und den Benutzernamen
ein. Der Browser bildet dann eine Response aus
md5("username:passwort:challenge") und sendet den Usernamen und
die Response an den Server zurueck.

Der Server holt mit Hilfe des Usernamens das Passwort aus der
Datenbank, und holt sich die Challenge aus der Session. Er
berechnet jetzt die erwartete Response aus dem Usernamen, dem
Datenbank-Passwort und der Challenge, und vergleich die
erwartete Response mit der tatsaechlichen Response. Stimmen sie
ueberein, wird der User eingeloggt.

Du kannst all das selber codieren, oder die entsprechende Klasse
aus PHPLIB einfach aktivieren.

Beachte, dass Challenge-Response-Authentication zwar die
Passworte nicht im Klartext uebertraegt, aber keine Zertifikate
zur Authentisierung der beteiligten Parteien verwendet. Daher
kann es immer noch sein, dass die Kommunikation durch eine
Man-in-the-Middle Attack angegriffen wird. Dagegen schuetzt nur
der Einsatz von SSL.

Kristian
--
Slashdorked

Bjoern Hoehrmann

unread,
Nov 16, 2000, 3:00:00 AM11/16/00
to
* Kristian Koehntopp wrote in de.comp.lang.php:

>"Andre Gildemeister" <gildem...@ecsites.de> writes:
>>Ich programmierere momentan an einem Online Portal. Für ein paar Funktionen
>>muss der user sich registrieren und später einloggen.
>>Um noch besseren Schutz zu Gewährleisten würde ich die Passwörter gerne mit
>>md5 verkrypten, ich glaube das ich momentan die beste und
>>sicherste Methode oder ?
>
>md5 ist keine Verschluesselungsfunktion, sondern eine
>kryptographische Hashfunktion. Diese unterscheiden sich von
>Verschluesselungsfunktionen dadurch, dass sie irreversibel sind.

Was nicht bedeuten soll, dass man anhand eines MD5 Strings nicht auf den
ursprünglichen Text schliessen kann:

#!perl -w
use strict;
use Digest::MD5 qw(md5 md5_hex);

my $string = 'kris';
my $s = md5 $string;
printf "Gegeben (hex): %s (Digest von '%s')\n", md5_hex($string),
$string;
foreach('aaaa'..'zzzz') {
print "match: $_\n" if (md5($_) eq $s)
}

Das "knackt" alle 4 buchstabigen Strings die aus [a-z] bestehen in
wenigen Sekunden.

Das Problem ist lediglich, dass man ggf. nicht weiss, wie lang der
String ist und welcher "Zeichensatz" benutzt wurde. Damit steigt dann
nur der Aufwand und ab einem bestimmten Punkt die Möglichkeiten der
Zuordnung, aber man sollte in keinem Fall sorglos mit MD5
"verschlüsselten" Passwörtern umgehen. Mit ein paar Tausend Mark kann
man sich auch den Plattenplatz leisten, um sich die jeweilige neue
Berechnung der Digests bis zu einer bestimmten Länge zu ersparen.
--
Björn Höhrmann ^ mailto:bjo...@hoehrmann.de ^ http://www.bjoernsworld.de
am Badedeich 7 ° Telefon: +49(0)4667/981ASK ° http://bjoern.hoehrmann.de
25899 Dagebüll # PGP Pub. KeyID: 0xA4357E78 # http://learn.to/quote [!]e
--- "If you can dream it, you can do it" [tm] - Adobe Systems Inc. ---

Matthias P. Wuerfl

unread,
Nov 16, 2000, 3:00:00 AM11/16/00
to
Bjoern Hoehrmann in de.comp.lang.php:

>Was nicht bedeuten soll, dass man anhand eines MD5 Strings nicht
>auf den ursprünglichen Text schliessen kann:

>[brute force]

<kleinlich>
Doch. "ausprobieren" ist nicht "auf etwas schliessen". Man kann
doch auch nicht Milliarden Lottozettel ausfuellen (alle
Moeglichkeiten) und dann behaupten man haette die Zahlen
vorhergesagt.
</kleinlich>

f'^2p

Bjoern Hoehrmann

unread,
Nov 16, 2000, 3:00:00 AM11/16/00
to
* Matthias P. Wuerfl wrote in de.comp.lang.php:

>Bjoern Hoehrmann in de.comp.lang.php:
>
>>Was nicht bedeuten soll, dass man anhand eines MD5 Strings nicht
>>auf den ursprünglichen Text schliessen kann:
>>[brute force]

Das kann es sein, muss es aber nicht.

><kleinlich>
>Doch. "ausprobieren" ist nicht "auf etwas schliessen".

"Ausprobieren" ist lediglich die Methode, das "auf etwas schliessen"
kommt später, wenn du heuristisch bestimmst, welche der gefundenen
Möglichkeiten die richtige ist. Ab einer Länge von 129 Bit ist md5 nicht
mehr eindeutig, daher gibst es zwangsläufig Duplikate. Gehe ich davon
aus, dass die Daten bis zu 1 MB umfassen, findet man z.B. mit brute
force x mögliche Strings. Aufgrund der Beschaffenheit dieses Strings
kann man dann auf das Original schliessen (z.B. wenn die Daten ein PDF
Dokument sind und der Rest Datenmüll).

>Man kann
>doch auch nicht Milliarden Lottozettel ausfuellen (alle
>Moeglichkeiten) und dann behaupten man haette die Zahlen
>vorhergesagt.

Ein unpassenderer Vergleich fällt mir auch nicht ein.

Kristian Koehntopp

unread,
Nov 16, 2000, 3:00:00 AM11/16/00
to
Bjoern Hoehrmann <bjo...@hoehrmann.de> writes:
>Was nicht bedeuten soll, dass man anhand eines MD5 Strings nicht auf den
>ursprünglichen Text schliessen kann:

Weswegen man ja sinnvollerweise in einen solchen Hash auch noch
einen Salt-Wert einfliessen laesst. :-) PHPLIB zum Beispiel
laesst aus genau diesem Grund in die Session-ID neben der
uniqid() noch $sess->magic mit eingehen...

> #!perl -w

perl is a four letter word. :-)

Kristian
--
Slashdorked

0 new messages