$cipher.genPassword¶
Description¶
Génère un mot de passe en vue d'une utilisation avec les méthodes
$cipher.encrypt et $cipher.decrypt.
Le mot de passe généré inclut les paramètres de chiffrement. Cela permet de garantir que le déchiffrement pourra se faire, même si les paramètres standards de chiffrement (itérations, taille de clé, etc.) doivent être revus à la hausse avec le temps. La note ci-dessous détaille cela de façon plus précise.
Pourquoi cette méthode ?
La robustesse de chiffrement repose sur différents éléments, dont le type d'algorithme de chiffrement choisi, la taille de clé, la taille du sel ajouté à la clé et le nombre d'itérations réalisées pour générer la clé.
Les valeurs de ces paramètres doivent régulièrement être révisées afin de contre-balancer l'augmentation des performances du matériel qu'un attaquant peut avoir à disposition (CPU, GPU, etc.). Les paramètres de chiffrement ne peuvent pas être inscrits "en dur" dans le moteur, car en cas de révision des valeurs, les données chiffrées avec une version précédente du moteur ne seraient plus exploitables.
La solution consiste donc à regrouper en une unique valeur tous les
paramètres de chiffrement, ainsi que le mot de passe lui-même. C'est
précisément ce que fait la méthode $cipher.genPassword. Ainsi, chaque
mot de passe embarque les paramètres de chiffrement : les nouveaux mots
de passe sont ainsi construits avec des paramètres à jour, alors que les
anciens mots de passe restent fonctionnels car ils contiennent les
paramètres utiles au déchiffrement.
En pratique, la méthode construit le mot de passe de la manière suivante:
où VERSION est la version de la méthode, SIZE, SALTLENGTH et
ITERATIONS sont les paramètres de chiffrement et PASSWORD est le
mot de passe à proprement parler. La chaîne de caractères produite est
traitée via un XOR afin de modifier les valeurs de bytes, puis le tout
est encodé en base64. L'opération XOR ne joue aucun rôle particulier si
ce n'est un rôle cosmétique afin de générer des mots de passe qui
diffèrent les uns des autres. Sans cela, tous les mots de passe
utilisant des paramètres de chiffrement semblables commenceraient par la
même séquence base64.
Syntaxe¶
$cipher.genPassword( [ options ] )
Paramètres¶
optionsmap-
Map d'options décrivant les propriétés à utiliser pour le mot de passe et le chiffrement auquel il servira. Les options reconnues sont:
passwordstring-
Mot de passe à utiliser. La valeur servira de base pour la génération du mot de passe. Elle sera complétée avec les autres propriétés relatives au chiffrement.
Si non défini, le moteur génère un mot de passe aléatoire d'une longueur équivalente à la propriété
length lengthnumber-
Longueur du mot de passe aléatoire à générer. Cette propriété n'est prise en compte que si
passwordest vide ou non défini.Attention, cette propriété indique la longueur du mot de passe servant de base pour la génération. La valeur de retour de la fonction sera toujours plus longue que la valeur de
length. keySizenumber-
Taille de la clé de chiffrement
La valeur par défaut peut varier selon la version du moteur.
saltLengthnumber-
Taille du sel
La valeur par défaut peut varier selon la version du moteur.
iterationsnumber-
Nombre d'itérations
La valeur par défaut peut varier selon la version du moteur.
Retour¶
Valeur base64 correspondant au mot de passe généré. La valeur contient le mot de passe en lui-même, ainsi que les paramètres de chiffrement associés.
Exemple¶
Voir $cipher.encrypt