web-dev-qa-db-fra.com

Comment le hachage / cryptage des mots de passe est-il effectué?

Je réponds à une question pour un projet qui demande si nous utilisons la crypte Blowfish dans Drupal, ou si nous le pouvons.

La classe qui effectue le hachage de mot de passe en 8 est PhpassHashedPassword, basée sur https://www.openwall.com/phpass/ . Sur ce site, il déclare:

À l'heure actuelle, si votre nouveau projet peut se permettre d'exiger PHP 5.5+, ce qu'il devrait faire, veuillez utiliser l'API native password_hash ()/password_verify () de PHP au lieu de phpass. Cette nouvelle API se produit également pour prendre en charge les hachages CRYPT_BLOWFISH et CRYPT_EXT_DES utilisés par phpass, mais malheureusement il ne prend pas en charge les hachages portables phpass (qui sont portables dans toutes les versions de PHP tant que vous utilisez phpass).

Il ajoute:

La méthode de hachage préférée (la plus sécurisée) prise en charge par phpass est le bcrypt basé sur Blowfish de style OpenBSD, également pris en charge avec notre package crypt_blowfish du domaine public (pour les applications C), et connu dans PHP comme CRYPT_BLOWFISH , avec un repli sur les hachages de mot de passe salés et à nombre d'itérations variable basés sur MD5 implémentés dans phpass lui-même (également appelés hachages portables). in PHP as CRYPT_EXT_DES, mais cela a depuis été supprimé, sauf pour l'authentification par rapport aux hachages préexistants de ce type.)

Lors de l'examen de la classe dans Drupal 8, il n'utilise pas password_hash, ou password_verify. Il semble également utiliser sha512 comme l'algo. Je ne trouve nulle part si bcrypt ou Blowfish ou CRYPT_BLOWFISH est utilisé.

J'ai trouvé ce problème concernant la prise en charge des mots de passe de style Blowfish mais pas un pour les créer. Je suppose que si je voulais importer leur base d'utilisateurs actuelle avec des mots de passe de style Blowfish, j'aurais besoin de ce patch.

Serait-il difficile d'implémenter ma propre classe pour ce faire en utilisant Blowfish? Y a-t-il des implications dans Drupal de faire cela? Pourquoi la version 8 a-t-elle choisi de s'en tenir à SHA-512? Ce projet sera sur PHP 7.2, donc je me fiche de PHP 5.x BC/raisons/etc.

Potentiellement lié: https://stackoverflow.com/questions/16014282/why-crypt-blowfish-in-php-is-considered-better-when-it-produces-shorter-hashes

5
Kevin

Pourquoi Drupal 8 utilise PHPass/sha-512?

  • PHPass a été initialement implémenté dans Drupal 7, avec du code personnalisé afin d'utiliser sha-512 au lieu de md5 qui était utilisé par d'autres implémentations à l'époque, puis porté sur Drupal 8.
  • Drupal 8 supportait à l'origine les anciennes versions de PHP où les fonctions de mot de passe n'étaient pas disponibles et n'utilisaient pas encore composer pour adopter un polyfill existant).
  • La mise à jour du service de hachage était (et est toujours) de faible priorité après son portage initial depuis Drupal 7.

Serait-il difficile d'utiliser Blowfish à la place?

Il y a un module pour cela - comme mentionné dans le problème que vous avez lié le module PHP Password remplace le service principal par un qui comprend les hachages hérités, mais les mettra à niveau vers bcrypt lorsque cela sera possible.

2
gapple