Aller au contenu

$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:

BASE64( XOR( "$ewt_pwd$v=VERSION$s=SIZE$l=SALTLENGTH$i=ITERATIONS$PASSWORD" ) )

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

options map

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:

password string

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

length number

Longueur du mot de passe aléatoire à générer. Cette propriété n'est prise en compte que si password est 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.

keySize number

Taille de la clé de chiffrement

La valeur par défaut peut varier selon la version du moteur.

saltLength number

Taille du sel

La valeur par défaut peut varier selon la version du moteur.

iterations number

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