développement du noyau bitcoin : Comment modifier les vecteurs de test bip340 pour vérifier que la vérification de la signature échoue pour les autres vecteurs de test  ?


Avis de non-responsabilité  : il s’agit d’un exercice pédagogique. Ce code Python est destiné aux tests et ne doit pas être utilisé en production ou avec le réseau principal Bitcoin. Une clé privée de 3 est absolument non sécurisée.

Il existe deux fichiers Python dans le référentiel BIPs reference.py que vous pouvez afficher en clonant le référentiel BIPs.

///bitcoin/bips.git

développement du noyau bitcoin : Comment modifier les vecteurs de test bip340 pour vérifier que la vérification de la signature échoue pour les autres vecteurs de test  ?

Ces deux fichiers se trouvent dans /bitcoin/bips/tree/master/bip-0340.

Si vous exécutez python3 test-vectors.py à partir du répertoire bip-0340, vous obtiendrez les messages de sortie et d’erreur qui se trouvent dans le fichier CSV test-vectors.csv.

py avec votre éditeur de texte, par exemple vim test-vectors.py

vous pouvez modifier la clé secrète (clé privée), le message, le caractère aléatoire auxiliaire de n’importe quel vecteur de test.

Par exemple vector0 a la clé secrète 3.

Vous pouvez changer le secret de 3 à 4.

Enregistrez et fermez votre éditeur de texte, puis exécutez à nouveau python3 test-vectors.py.

Cela générera une AssertionError.

Traceback (appel le plus récent en dernier)  : Fichier « test-vectors.py », ligne 253, dans vector0(), Fichier « test-vectors.py », ligne 31,

Il existe une assertion qui vérifie que pour une clé publique particulière (X, Y) (calculée à partir de la clé secrète (privée)), la coordonnée Y n’est pas carrée. Il s’agit d’une vérification mise en œuvre en raison d’une décision de conception antérieure d’utiliser l’équerrage comme critère de départage pour deux coordonnées Y. Le bris d’égalité est maintenant la régularité plutôt que l’équerrage. Ce test est inclus pour détecter lorsqu’un implémenteur utilise par erreur la quadrature plutôt que la régularité. Dans ce cas, la clé publique a une coordonnée carrée Y.

Chaque clé privée (scalaire) correspond à une seule clé publique correspondante (point). Dans BIP 340. Cela pourrait conduire à ce que seulement la moitié des clés publiques soient valides et donc que seulement la moitié des clés privées soient également valides. Au lieu de cela.

Nié signifie prendre le complément avec l’ordre de groupe n

  • m = nm (mod n)
  • Avec ce changement, vous pourriez dire que chaque scalaire est une clé privée valide, mais il existe deux clés privées qui correspondent à la même clé publique. Cependant, une seule clé privée correspond à une clé publique avec une coordonnée Y paire. (Une seule clé privée BIP 340 correspond à une clé publique BIP 340.)

    N’oubliez pas que lorsque vous avez fini d’expérimenter, vous pouvez l’utiliser pour réinitialiser  :

    git reset –tête dure

    Cela annulera les modifications que vous avez apportées et reviendra à l’état du code avant que vous ne commenciez à expérimenter.

    Merci à Pieter Wuille sur IRC pour quelques ajouts.