it-swarm.com.de

Was ist das standardmäßige Passwortverschlüsselungsverfahren von Drupal?

Ich versuche herauszufinden, welche Sicherheit Drupal 6/7 standardmäßig verwendet, um Passwörter zu speichern. Ist es MD5, AES, SHA? Ich konnte nichts finden.

41
Chris Abrams

Drupal 8 und Drupal 7 verwenden standardmäßig SHA512 mit einem Salt. Sie führen den Hash durch die Funktion hash von PHP mehrmals aus, um den Rechenaufwand für das Generieren des endgültigen Hash eines Kennworts zu erhöhen (eine Sicherheitstechnik mit dem Namen stretching ).

Bei Drupal 8 ist die Implementierung objektorientiert. Es gibt ein PasswordInterface , das eine Hash-Methode definiert. Die Standardimplementierung dieser Schnittstelle befindet sich in der Klasse PhpassHashedPassword . Diese Klasse ' hash -Methode ruft die crypt -Methode auf, die SHA512 als Hash-Algorithmus übergibt, ein Kennwort und ein generiertes Salt. Die Crypt-Methode der Klasse ist nahezu identisch mit der Methode _password_crypt () von Drupal 7.

Bei Drupal 7 ist die Implementierung in einige globale Funktionen aufgeteilt: user_hash_password () und _password_crypt () .

Drupal 6 verwendet MD5 ohne Salz. Die relevante Funktion ist user_save () .

66
CalebD

Hier ist ein Beispiel-Hash von Drupal 7: 

  • "pass": "$ S $ Dxl65W9p07LfQU7jvy5CnsyDpMoLujiAgzy123khcg1OJi/P9pKS"

  • Die Zeichen 0-2 sind der Typ ($ S $ ist Drupal 7)

  • Das Zeichen 3 ist die Anzahl der log2 Runden (X), die auf der Position des Zeichens in dieser Liste basiert: './0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz' Also würde 'D' 15 zuordnen
  • Die Zeichen 4-11 sind das SALT
  • Der Rest ist ein SHA512-Hash mit 2 ^ X-Runden.
  • Das binäre Ergebnis wird dann mit base64 in einen String umgewandelt.

    $ count = 1 << $ count_log2;
    $ hash = hash ($ algo, $ salt. $ password, TRUE);
    do {$ hash = hash ($ algo, $ hash. $ password, TRUE);
    } while (- $ count);

Den gesamten Prozess finden Sie in: Mydrupalsite\includes\password.inc

28
Ray Hulha

Es kann in www\includes\password.inc überprüft werden

function user_check_password($password, $account) {
  if (substr($account->pass, 0, 2) == 'U$') {
    // This may be an updated password from user_update_7000(). Such hashes
    // have 'U' added as the first character and need an extra md5().
    $stored_hash = substr($account->pass, 1);
    $password = md5($password);
  }
  else {
    $stored_hash = $account->pass;
  }

  $type = substr($stored_hash, 0, 3);
  switch ($type) {
    case '$S$':
      // A normal Drupal 7 password using sha512.
      $hash = _password_crypt('sha512', $password, $stored_hash);
      break;
    case '$H$':
      // phpBB3 uses "$H$" for the same thing as "$P$".
    case '$P$':
      // A phpass password generated using md5.  This is an
      // imported password or from an earlier Drupal version.
      $hash = _password_crypt('md5', $password, $stored_hash);
      break;
    default:
      return FALSE;
  }
  return ($hash && $stored_hash == $hash);
}

Es wurde eindeutig geschrieben, dass "// ein normales Drupal 7-Passwort unter Verwendung von sha512".

11
Tarun Gupta

Es ist MD5 und wenn ich es verstehe, wird kein Salz verwendet. Edit - das ist Drupal 6. Für Drupal 7 wird etwas mehr fortgeschrittenes Hashing verwendet. Ein guter Artikel dazu hier - http://joncave.co.uk/2011/01/password-storage-in-drupal-and-wordpress/

5
David Gillen

drupal 8 verwendet Phpass (modifizierte Version)

drupal 7 verwendet SHA-512 + Salz

drupal 6 und frühere Version verwendeten MD5 ohne Salz

0
user889030