web-dev-qa-db-fra.com

Quelle est la méthode de cryptage de mot de passe par défaut de Drupal?

J'essaie de déterminer quelle est la sécurité utilisée par défaut par Drupal 6/7 pour stocker les mots de passe. Est-ce MD5, AES, SHA? J'ai été incapable de trouver quoi que ce soit.

41
Chris Abrams

Drupal 8 et Drupal 7 utilisent SHA512 par défaut avec un sel. Ils exécutent le hachage via la fonction hash de PHP à plusieurs reprises pour augmenter le coût de calcul de la génération du hachage final d'un mot de passe (technique de sécurité appelée stretching ).

Avec Drupal 8, la mise en œuvre est orientée objet. Il existe un PasswordInterface qui définit une méthode de hachage. L'implémentation par défaut de cette interface est dans la classe PhpassHashedPassword . La méthode hash de cette classe appelle la méthode crypt en transmettant SHA512 en tant qu'algorithme de hachage, mot de passe et sel généré. La méthode crypt de la classe est presque identique à la méthode _password_crypt () de Drupal 7.

Avec Drupal 7, l’implémentation est divisée en deux fonctions globales: user_hash_password () et _password_crypt () .

Drupal 6 utilise MD5 sans sel. La fonction pertinente est user_save () .

66
CalebD

Voici un exemple de hash de Drupal 7: 

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

  • Les caractères 0-2 sont le type ($ S $ est Drupal 7)

  • Le caractère 3 est le nombre de tours log2 (X) basé sur la position du caractère dans cette liste:
  • Les caractères 4-11 sont le sel
  • Le reste est un hachage SHA512 utilisant 2 ^ X tours.
  • Le résultat binaire est ensuite converti en chaîne à l'aide de base64.

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

L'ensemble du processus se trouve dans: Mydrupalsite\includes\password.inc

28
Ray Hulha

Il peut être vérifié dans www\includes\password.inc

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);
}

Il a été clairement écrit que "// Un mot de passe Drupal 7 normal utilisant sha512."

11
Tarun Gupta

C'est MD5 et si je comprends bien, aucun salage n'est utilisé. Edit - c'est drupal 6. Pour drupal 7, un hachage plus avancé est utilisé. Un bon article à ce sujet ici - http://joncave.co.uk/2011/01/password-storage-in-drupal-and-wordpress/

5
David Gillen

drupal 8 utilise Phpass (version modifiée)

drupal 7 utiliser SHA-512 + sel

drupal 6 et la version précédente utilisaient md5 sans sel

0
user889030