Je ne faisais que m'intéresser à la mise en place de l'extension de signature cryptographique pour l'express qui permet la création de cookies signés.Pourquoi cookie-signature dans nodejs/express compare-t-il des signatures en utilisant sha1-hashing?
Le mac dans la fonction de signature est calculée comme décrit ici:
- créer une instance de SHA256
- hachage de la valeur de données
- créer un base64 codé digérer
- supprimer les caractères égaux de fuite ('=')
Le résultat est une concaténation de la valeur d'origine et du mac calculé.
Lors de la vérification de la signature, la valeur est à nouveau signée. Mais pas les signatures sont testées sur l'égalité, mais les chaînes globales consistant de la valeur initiale et le Mac en annexe sont comparés:
return sha1(mac) == sha1(val) ? str : false;
Ici « mac » contient la valeur originale concaténé avec un mac fraîchement calculé, « val "contient la chaîne d'entrée telle que passée à la méthode de vérification (constituée de la valeur d'origine concaténée avec un ancien mac) et" str "est la valeur signée elle-même.
Voir: https://github.com/tj/node-cookie-signature/blob/master/index.js
Je me serais attendu à ce que seraient comparés que les macs. Mais ce n'est pas le cas. Pourquoi les auteurs ont-ils choisi cette manière de mettre en œuvre la vérification? Quelle est la raison pour ça? Et surtout: Pourquoi ne comparent-ils pas char par char mais un hachage de sha1?
Cela l'explique. C'est un détail important auquel je n'ai pas pensé. Merci beaucoup pour votre réponse! –
C'est la raison pour laquelle ils ont choisi de comparer les hachages, mais pourquoi n'ont-ils pas choisi de faire une comparaison des signatures en temps constant, ce qui serait beaucoup plus rapide que de générer deux hachages SHA1? 160 bits, tandis que les signatures SHA256 sont de 256 bits (les deux sont cryptographiquement aléatoires)? –