Depuis quelques années Dotclear utilise la méthode sha1 par défaut pour hasher les mots de passe. Depuis la 2.10 de Dotclear il est possible de définir un autre algorithme de hashage, parmi ceux disponibles en fonction de la version de PHP installée, pour peu que la longueur du hashage du mot de passe soit d’une longueur supérieure ou égale à 40 caractères.
J’en avais un peu parlé ici-même avant de l’implémenter dans Clearbricks et Dotclear.
Il se trouve que Google vient de publier un article qui annonce qu’ils ont découvert une collision avec le hashage sha1, ou dit autrement ils ont réussi à trouver deux documents PDF, dont le contenu diffère, et qui une fois hashés donnent le même résultat, ce qu’on appelle la collision. Or obtenir un même résultat à partir de deux contenus différents est pour le moins ennuyeux, ça voudrait dire que deux mots de passe différents seraient susceptible d’être enregistrés sous la même forme dans la base de données et les deux permettraient indifféremment la connexion au compte associé !
Bref pas glop.
Je pense qu’il est donc sage, de prévoir dès maintenant, de « renforcer » la sécurité côté mot de passe en sélectionnant un autre algorithme et tant qu’à faire autant en prendre un qui soit le plus long possible parmi ceux proposés par PHP : sha512 (il est disponible dans la version 5.3 et suivantes de PHP).
Pour faire ça, il suffit d’ajouter ce réglage dans le fichier inc/config.php :
// Cryptographic algorithm (default = sha1)
define('DC_CRYPT_ALGO','sha512');
Mais attention ! Modifier cet algorithme rend caduque les mots de passe enregistrés dans la base de données pour les utilisateurs enregistrés.
Il va falloir, une fois cette modification effectuée, se déconnecter (si ce n’était pas déjà fait), puis passer par l’option « J’ai oublié mon mot de passe » accessible sur l’écran de connexion en cliquant une première fois sur « Problème de connexion ? ».
Il vous faudra fournir votre identifiant et l’adresse email associée (celle utilisée à la création du compte, ou celle modifiée ensuite dans vos préférences utilisateur) et attendre de recevoir un premier mail qui vous fournira une adresse temporaire qu’il faut visiter[1] pour recevoir un deuxième mail contenant le nouveau mot de passe.
Ce nouveau mot de passe vous permettra alors de vous connecter à l’administration de Dotclear et d’aller dans la foulée modifier ce mot de passe par un de votre choix.
À noter que la prochaine version 2.12 de Dotclear positionnera l’algorithme à sha512 (ça sera valable pour les nouvelles installations).
Je récapitule la procédure :
- Déconnexion
- Ajout (ou modification) dans inc/config.php pour définir l’algorithme
define('DC_CRYPT_ALGO','sha512');
- Déplier Problème de connexion ?
- Cliquer sur J’ai oublié mon mot de passe, fournir les infos (login et email), attendre le 1er mail
- Cliquer sur le lien fourni dans le mail et attendre le 2e mail
- Utiliser le mot de passe fourni dans le 2e mail pour se connecter puis changer son mot de passe dans « Mes préférences ».
À faire pour chaque utilisateur de l’installation (quel que soit le nombre de blogs auxquels il a accès).
PS : C’est une première étape pour le renforcement de la sécurité des mots de passe car j’ai prévu d’utiliser des fonctions un peu plus robustes dès qu’on imposera la version PHP 5.5 ou supérieure pour faire tourner Dotclear ; voir le ticket 2182 à ce sujet.
Note
[1] Cette étape permet de « valider » l’adresse email fournie.
1 De Cunégonde -
Je vais attendre la 2.12.
2 De Franck -
Ce qui pour toi ne changera absolument rien, la modif. dont je parle ne concernera que les nouvelles installations, pas celles déjà existantes.
3 De Cunégonde -
Mais je crois que je vais atrêter autour du tram à Paris est ne le recommencer que quad je ferais à nouveau des photos. Un jour, cela concernera.
4 De Nicolas -
Le procédure n’est-elle pas un peu complexe ? Pourquoi ne pas changer les mots de passe au fur et à mesure des nouvelles connexions en ajoutant un peu de code pour vérifier que le mot de passe est dans la nouvelle forme.
Pour encore améliorer le truc je verrais bien un gros avertissement côté admin lors de la mise à jour pour signifier que cette mise à jour devrait être faite.
L’avantage est qu’on a pas besoin d’envoyer les mails.
5 De Franck -
Nicolas pour la simple et bonne raison que j’ai prévu des changements de ce côté et j’ai pas envie de passer du temps à coder un truc intermédiaire qui ne servira pas longtemps.
Le seul point bloquant pour ce que j’ai en projet c’est la version min de PHP (5.5) ou alors utiliser une lib polyfill (mais j’ai moyen envie).
Sinon pour la procédure, c’est celle qui prévaut depuis des années, et je n’ai pas entendu qu’elle soit franchement complexe, par rapport à la « concurrence » quand on oublie son mot de passe.
Bien sûr tout ça n’est que mon humble avis, hein ? :-)
6 De Sylvain -
On peut supposer que c’est embêtant lorsque l’on a beaucoup d’utilisateurs sur une installation, comme une ferme de blog. Les obliger à récupérer un mot de passe qui pourtant est valide, c’est sans doute ennuyant.
Maintenant ce n’est en effet pas très compliqué non plus. Je vais probablement le mettre en place chez Kynä.
7 De Franck -
Sylvain tout à fait et d’ailleurs ce n’est en rien une obligation de changer de méthode de hashage aujourd’hui ; ça reste de l’ordre de la précaution.
Je pense que la version 2.13 de Dotclear intègrera l’usage des nouvelles fonctions prévues pour ça à partir de PHP 5.5 et dans ce cas là la transition sera plus « douce » puisqu’a priori il n’y aura pas besoin de passer par cette procédure.