[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

md5-Passwoerter mit Salt // mediawiki/includes/User.php


Hallo zusammen,

ich habe mich die Tage in die Abgruende der Passwoerter von mediawiki
begeben, da ich wissen wollte, wie aus einem Klartext-Passwort das
gehashte Passwort in der user-Tabelle entsteht und bin dabei auf
folgendes Konstrukt gestossen:


includes/User.php

function addSalt( $p ) {
        global $wgPasswordSalt;
        if($wgPasswordSalt)
                return md5( "{$this->mId}-{$p}" );
        else
                return $p;
}
[...]
function encryptPassword( $p ) {
        return $this->addSalt( md5( $p ) );
}

$this->mId      Numerische User-ID
$p              Passwort-String


Aus der User-ID "4711" mit dem Passwort "foobar" wird

md5("4711-".md5("foobar")) bzw
md5("4711-3858f62230ac3c915f300c664312c63f") oder letztlich
 ffb7631cfa7ab9c97fd510b7111ecd70


Warum ein Salt fuer ein Passwort? Ganz einfach, damit verhindert man
gewissermassen Woerterbuchattacken (precompilierte md5-Summen bekannter
Woerter). Mit dem Salt will man noch etwas mehr "Zufall" reinbringen, als
ein vom Mensch generiertes Passwort haben kann.

Soweit noch klar, dann wuerde doch aber reichen: md5("salt-password").

Da bei md5 der Salt nicht irgendwie als Prefix im verschluesselten
Passwort mit abgelegt wird, nimmt mediawiki die vom System vergebene
user_id, die interne Nummer eines Users, diese ist bei der Pruefung von
Passwoertern ohnehin verfuegbar, wenn auch nicht wirklich "zufaellig".

Welchen Vorteil hat md5(salt-md5(passwort)) gegenueber
md5(salt-passwort)?

Es gibt fuer 6-8 stellige "Standardpasswoerter" vorhersagbar viele
Ergebnisse fuer md5(password), rein statistisch gibt es also keinen
Vorteil, 2x md5 anzuwenden. 

Vermutlich ist es ganz trivial zu beantworten, ich kapiers nicht.
Warum macht es mediawiki so und nicht anders? Ideen?

Gruss
-- 
Raphael Becker                                    http://rabe.uugrn.org/
                      http://schnitzelmitkartoffelsalat.und.rahmspin.at/
.........|.........|.........|.........|.........|.........|.........|..