Mise à niveau de la stratégie de hachage
Examinez à quoi ressemble le mécanisme de mise à niveau de hachage. Supposons qu’à l’origine, un mot de passe ait été haché avec MD5
, puis que l’algorithme ait été mis à jour plusieurs fois avec l’Argon 2ID13. Le diagramme suivant illustre le flux de mise à niveau de hachage.
Chaque algorithme de hachage utilise le hachage précédent du mot de passe pour générer un nouveau hachage. Commerce ne stocke pas le mot de passe d’origine brut.
Comme mentionné ci-dessus, plusieurs versions de hachage du mot de passe peuvent être appliquées au mot de passe d’origine.
Voici comment fonctionne le mécanisme de vérification du mot de passe lors de l’authentification d’un client.
def verify(password, hash):
restored = password
hash_map = extract(hash)
# iterate through all versions specified in the received hash [md5, sha256, argon2id13]
for version in hash_map.get_versions():
# generate new hash based on password/previous hash, salt and version
restored = hash_func(salt . restored, version)
# extract only password hash from the hash:salt:version chain
hash = hash_map.get_hash()
return compare(restored, hash)
Comme Commerce stocke toutes les versions de hachage de mot de passe utilisées avec le hachage de mot de passe, nous pouvons restaurer la chaîne de hachage entière pendant la vérification du mot de passe. Le mécanisme de vérification de hachage est similaire à la stratégie de mise à niveau de hachage : selon les versions stockées avec le hachage du mot de passe, l’algorithme génère des hachages à partir du mot de passe fourni et renvoie le résultat de comparaison entre le mot de passe haché et le hachage stocké dans la base de données.