Source : Site officiel.
crack est un module Python qui propose une interface simple pour tester la solidité de mots de passes donnés.
Il utilise la bibliothèque standard cracklib2 pour regarder si les mots de passes sont basés sur des mots du dictionnaires, ou sont trop simples.
D'autres tests, comme la vérification qu'un nombre minimum de caractères ont été changés dans le remplacement d'un vieux mot de passe, ont été écrits, en prenant pour modèle la bibliothèque (réputée) PAM.
Ces tests, paramétrables, peuvent être très sévères.
Récupérer le fichier sur le site officiel.
Installer la dépendance cracklib2-dev :
$ sudo aptitude install cracklib2-dev
Enfin, décompresser, puis installer le module :
tar zxvf python-crack-0.5.1.tar.gz cd python-crack-0.5.1/ ./configure make sudo make install
Pour tester un mot de passe, on utilise la méthode FascistCheck
>>> import crack >>> crack.FascistCheck("fdseqs") 'fdseqs'
Quand aucune exception n'est levée, comme ci-dessus, c'est que le mot de passe proposé peut convenir.
La méthode VeryFascistCheck, comme son nom l'indique, est plus exigeante que la précédente : le mot de passe fdseqs ne passe plus...
>>> crack.VeryFascistCheck("fdseqs") Traceback (most recent call last): File "<stdin>", line 1, in <module> File "/usr/local/lib/python2.5/site-packages/crack.py", line 191, in VeryFascistCheck raise ValueError, "is too simple" ValueError: is too simple
Un mot de passe peut ne pas convenir pour diverses raisons. Nous donnons ci-dessous quelques exemples...
>>> crack.FascistCheck("fdsess") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: it does not contain enough DIFFERENT characters
On importe le module, puis on teste le mot de passe 1234 :
>>> import crack >>> crack.FascistCheck("1234") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: it is too short
Une exception est levée : le mot de passe est trop court.
On essaye alors avec 123456 :
>>> crack.FascistCheck("123456") Traceback (most recent call last): File "<stdin>", line 1, in <module> ValueError: it is too simplistic/systematic
Cette fois-ci, le mot de passe est trop simple, "systématique". Le mot de passe abcdefghilmn donnerait le même résultat, par exemple.
Certains mots de passes sont trop proches de ce que l'on pourrait trouver dans un dictionnaire :
>>> crack.FascistCheck("secret") Traceback (most recent call last): File "<stdin>", line 1, in ? ValueError: it is based on a dictionary word
>>> crack.VeryFascistCheck("secret", "scrt") Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.2/site-packages/crack.py", line 187, in VeryFascistCheck raise ValueError, "is too similar to the old one" ValueError: is too similar to the old one >>> crack.VeryFascistCheck("secret", "cretse") Traceback (most recent call last): File "<stdin>", line 1, in ? File "/usr/lib/python2.2/site-packages/crack.py", line 185, in VeryFascistCheck raise ValueError, "is rotated" ValueError: is rotated >>> crack.FascistCheck("this is a really secure secret but do not use it!!") 'this is a really secure secret but do not use it!!'
If the optional old_password is provided additional checks for minimum distance between the two passwords, for similarity, for change of case only and for rotation are performed. Exception ValueError is raised in case of weak password.
dictpath parameter is used only for the inner call to FascistCheck, hence it has the same signification it has for FascistCheck.
It is used automatically if dictpath parameter is not specified when calling FascistCheck or VeryFascistCheck.
Python ne permet pas de gérer directement la mémoire, à la main. Les objets, tels que les chaînes de caractères (donc les mots de passe) sont vidés de la mémoire à l'aide d'un garbage collector géré par python, de manière automatique, et transparente pour le programmeur.
Cela signifie que les responsables du module cracklib n'ont pas la possibilité de nettoyer la mémoire après le test d'un quelconque mot de passe.
On peut considéré ce fait comme une faille de sécurité : des personnes ayant accès à la mémoire pourraient, éventuellement, y retrouver le mot de passe, au moins en partie.
Cette éventualité est à prendre en compte, et python peut s'avérer pas suffisament sûr, si vous ne pouvez garantir que nul n'a accès à la mémoire de votre ordinateur.