Passphrase - Générer des phrases secrètes en PHP
Récemment, un comic de XKCD sur la résistance des mots de passe a fait parler de lui en faisant revenir au goût du jour l'idée de Diceware, c'est-à-dire que plutôt que d'utiliser un mot de passe comme Gl0ubiBoulg4, il est probablement plus simple de tirer au hasard plusieurs mots du dictionnaire. Dans le comic de XKCD l'exemple donné est corriger cheval batterie agrafe, et effectivement ça semble plus simple.
Mais d'un point de vue sécurité qu'en est-il ? Et bien c'est beaucoup mieux. Par exemple si on dit que notre premier mot de passe ne peut contenir que des lettres et des chiffres, ainsi que par exemple des points et des virgules, cela fait que chaque caractère peut avoir 64 possibilités différentes, et 64 possibilités, ça fait 6 bits (26 lettres majuscules + 26 lettres minuscules + 10 chiffres + 2 signes de ponctuation = 64). Si le mot de passe fait 8 caractères cela donne donc 6 x 8 = 48 donc 48 bits d'entropie.
Revenons à notre phrase secrète (passphrase en anglais), elle est composée de mots issus d'une liste de 3.725 mots du dictionnaire du français fondamental. Ce qui donne presque 12 bits pour chaque mot. Une phrase au hasard de quatre mots donnera ainsi 12 x 4 = 48 donc également 48 bits d'entropie. Alors pourquoi prétendre que c'est mieux ?
Et bien très simplement nous n'utilisons quasiment jamais des mots de passe qui correspondent aux 48 bits décrits précédemment (par exemple Znq3HvGD), mais des mots de passe lisibles, avec des voyelles qui suivent des consonnes, et souvent un ou plusieurs chiffres à la fin. Par exemple Bohwaz95 correspond à cette description, tout comme ChaCho32, et cela réduit l'entropie réelle d'autant, par exemple à 28 bits. Le passage aux phrases secrètes donne donc directement une entropie 20 bits supérieure, avec une simplicité de mémorisation sans commune mesure.
Passphrase est une simple implémentation de cette idée de phrase secrète, en PHP, en un seul fichier qui comprends le dictionnaire de 3.725 mots. La bibliothèque est très simple à utiliser et est sous licence WTFPL pour pouvoir être réutilisée n'importe où.
Exemple :
<?php require __DIR__ . '/lib.passphrase.french.php'; echo Passphrase::generate(4); // Nombre de mots à générer ?>
À télécharger ici : http://svn.kd2.org/svn/misc/libs/i18n/passphrase/
À noter que Passphrase est utilisé pour suggérer des mots de passe par défaut dans Garradin.