Ergebnis 1 bis 1 von 1
  1. #1
    Stanley Jobson Avatar von Lidloses_Auge
    Registriert seit
    05.01.2007
    Beiträge
    750

    Standard Hashing bei MySQL - Die Password() Funktion

    Manche von euch werden sie schon desöfteren gesehen haben,
    beim durchforsten der Spalte “password” in der MySQL Datenbank.
    Hashes in der Form

    378b243e220ca493

    oder auch

    *94BDCEBE19083CE2A1F959FD02F964C7AF4CFC29

    2 Hashes, die denselben String zum Ursprung haben, nämlich “test”.
    Doch wieso kann es vorkommen, dass man manchmal nur kurze, und ein anderes
    Mal nur lange Hashes bekommt?

    Die Antwort liegt in der Version von MySQL.

    Generell werden die Hashes in MySQL mit der Password() Funktion generiert
    und kommen bei Paneln wie phpmyadmin zum Einsatz, wenn ein Login gefordert wird.
    Das Hashing Verhalten hat sich ab MySQL Version 4.1 verändert, und
    ich möchte nun kurz aufzeigen, welche Unterschiede es gibt, und ebenso auch welche Problematiken dabei auftreten können.

    Kennwort Hashing bei MySQL < 4.1:
    Ein Beispiel Hash der alten Password Funktion finden wir in der Einleitung.
    Es handelt sich um den kürzeren der beiden Hashes, der nur eine Länge von 16 Bytes
    aufweist. Beim Aufruf der Password Funktion mit dem gewünschten Passwort als Parameter
    wird bei Versionen unter 4.1 automatisch der 16 Byte lange Hash generiert.

    Kennwort Hashing bei MySQL >= 4.1
    Bei den Versionen ab 4.1 kommt der längere Hash ins Spiel.
    Es fällt deutlich auf, dass dieser nun 41 Bytes lang ist,
    dementsprechend auch wesentlich bessere Kryptographische Eigenschaften
    aufweist, und in jedem Fall mit einem Sternchen beginnt, woran
    man diesen Hash Typ auch direkt erkennen kann.
    Ein MySQL System ab 4.1 ist in der Lage beide Hashes zu generieren,
    und ist daher abwärtskompatibel.
    In der Regel wird hier beim Aufrufen der Password Funktion samt Parameter
    der lange Hash generiert, doch hier gibt es einige Ausnahmen.

    Ausnahme 1:
    Die erstellten Hashes werden in der password Spalte gespeichert.
    Ist diese 41 Bytes lang, können die neuen Hashes generiert werden.
    Weist die Spalte jedoch nur eine Länge von 16 Bytes auf, ganz gleich
    welche MySQL Version verwendet wird, kann nur ein kurzer Hash
    erstellt werden.
    Dies kann zum Beispiel passieren, wenn man ein Update auf eine Version
    < 4.1 spielt, und im Anschluss daran, das Skript "mysql_fix_privilege_tables"
    nicht ausführt, welches zur Verbreiterung der Password Spalte dient.

    Ausnahme 2:
    Um eine Verbindung mit einer alten MySQL Version herstellen zu können, muss
    man die alten Hashes nutzen, macht sich also die Abwärtskompatibilität zu Nutzen.
    Ruft man mit einer MySQL Version >= 4.1 die Password Funktion auf, wird zwar ein
    großer Hash generiert, doch ist es möglich die Option “–old-passwords” nachzuschalten,
    die ein Erstellen der kurzen Hashes erzwingt.

    Welche Hash Funktion ist zu empfehlen?

    Grundsätzlich gilt natürlich, dass der 41 Byte lange Hash sicherer in der Anwendung ist,
    doch gilt es zu beachten, in welcher Umgebung sich das System befindet.
    Sind alte MySQL Systeme in der Umgebung, gilt es zu beachten, dass man zur Authentifizierung
    kurze Hashes verwenden muss.
    Sind im Netzwerk jedoch ausschließlich neuere Versionen zu finden, ist selbstverständlich
    auch der lange Hash zu empfehlen.

    Weitere lesenswerte Informationen zu MySQL findet man in der ausführlichen Dokumentation.

    In dem Sinne, Happy Hashing.

    Quelle: http://www.novusec.com


    Lidloses_Auge

  2. Folgende Benutzer haben sich für diesen Beitrag bedankt:

    Rapter (02.02.2010)

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •