Générer des mots de passe avec Perl

Date de publication:
Durée de lecture estimée:

Produire de bons mots de passe est indispensable pour sécuriser les accès à des outils informatiques mais ce n'est pas forcément une chose facile. Laissons faire Perl à notre place à l'aide du module String::MkPasswd.

Le module String::MkPasswd est disponible à l’adresse https://metacpan.org/pod/String::MkPasswd. Développé par Christopher Grau, sa finalité est de générer des mots de passe aléatoires à partir des spécifications que vous lui indiquez.

Pour le tester, commençons à l’installer à l’aide Carton. Le fichier cpanfile ne spécifie qu’une seule dépendance pour notre essai :

requires 'String::MkPasswd' => '== 0.05';

Commençons par un script simple qui produit dix mots de passe à partir de la configuration standard de String::MkPasswd :

use strict;
use warnings;
use 5.010;
use String::MkPasswd qw(mkpasswd);

for(my $i=0;$i<10;$i++) {
    say mkpasswd();
}

Génération de mot de passe

La régle standard utilisée est la suivante :

  • les mots de passe ont une longueur de 9 caractères,
  • 4 caractères sont des lettres minuscules aléatoires,
  • 2 caractères sont des lettres majuscules aléatoires,
  • le mot de passe contient 2 nombres aléatoires en 0 et 9,
  • un caractère est un caractère spécial (ni un nombre, ni une lettre).

Cette configuration par défaut est bien pratique mais dans de nombreux cas, il est nécessaire de respecter une normalisation du format des mots de passe qui peut être imposée par le responsable sécurité de votre organisation. Pour faire cela avec String::MkPasswd, il vous suffit de passer des paramètres de configuration à la fonction mkpassword().

mkpasswd(
    -length     => 12,
    -minnum     => 2,
    -minlower   => 1,
    -minupper   => 1,
    -minspecial => 1
);

Cet exemple impose la génération d’un mot de passe qui :

  • a une longueur de 12 caractères,
  • contient au moins 2 nombres,
  • contient au moins une lettre minuscule,
  • contient au moins une lettre majuscule,
  • contient au moins un caractère spécial.

D’autres options sont également disponibles telles que -distribute qui répartie les caractères utilisés en fonction de leur position sur votre clavier et -noambiguous qui évite l’utilisation de caractères pouvant être confondus par les utilisateurs. Dans les deux cas, ces options recoivent une valeur booléenne en tant qu’argument.

Vous savez maintenant comment générer rapidement et efficacement des mots de passe pour vos utilisateurs. Ce type de librairie est parfaite pour initialiser un mot de passe temporaire au sein d’une base de données ou d’un annuaire LDAP.