Impossible de devenir cohérent TZ2 (SECP256PK1) Signature
2 réponses
- votes
-
- 2019-05-05
Leproblèmeimmédiat semble être que vousn'obtenezpas de signatures dans laforme "inférieure".Cela semblemieux:
sk.sign_digest(digest, sigencode=ecdsa.util.sigencode_string_canonize)
Jene peuxpasgarantir l'exactitude du codegénéralement.
The immediate problem seems to be that you are not getting signatures in "lower S" form. This seems better:
sk.sign_digest(digest, sigencode=ecdsa.util.sigencode_string_canonize)
I cannot vouch for the correctness of the code generally.
-
- 2019-05-06
Pas une réponse directe,mais Solution de contournement
Python-ECDSA LIBgénère des signaturesnon déterministespar défaut (voirplus sur HTTPS://tools.ietf.org/html/rfc6979#section-3.2 ).Chaquefois que vousexécutez votre code,vous obtenez unnouveau résultat. J'ai vécu ceproblèmeet éventuellementpasser aupaquet SECP256K1 (il y avaitplusieurs raisons supplémentaires de cela): https://github.com/baking-bad/Pytezos/BLOB/41F983C40CDB2A4445A88ECCF86A2EDDAA24E555/PYTEZOS/CRYPTO.PY # L213
Not a direct answer, but workaround
python-ecdsa lib generates non-deterministic signatures by default (see more at https://tools.ietf.org/html/rfc6979#section-3.2). Each time you run your code you get a new result. I've experienced this issue and eventually switched to secp256k1 package (there were several extra reasons for that): https://github.com/baking-bad/pytezos/blob/41f983c40cdb2a4445a88eccf86a2eddaa24e555/pytezos/crypto.py#L213
-
Merci de votre réponse,Michael,demesexpériences,Tezosn'exigepas de signature déterministe (il semblegénérer des signatures déterministes).Quelles sont les autres raisonspour lesquelles vous avez changé de signatures déterministes?Thanks for your answer Michael, from my experiments Tezos do not require deterministic signature (It seems to generate deterministic signatures though). What are the other reasons you switched to deterministic signatures?
- 1
- 2019-05-06
- Simon B.Robert
-
C'est vrai,j'aiessayé d'émuler lenœud CLIet que c'était le seulmoyen de vous assurer quetoutfonctionne commeprévu via desinformations) L'autremotif quej'aipassée de Python-ECDSA à SECP256K1est que la vérification de la vérificationne peut être construite qu'àpartir de la clépublique dans saforme complète X + Y,tandis qu'uneforme compacteest utilisée dans Tezos.Il suffit d'éviter lamiseen œuvrepersonnalisée de la dérivation y,bien que cene soitpas si compliqué :)That's right, I tried to emulate node cli and that was the only way to make sure everything works as expected via unittests) The other reason I switched from python-ecdsa to secp256k1 is that VerifyingKey can only be constructed from the public key in its full form X+Y, while a compact form is used in Tezos. Just avoiding custom implementation of Y derivation, although it's not that complicated :)
- 0
- 2019-05-07
- Michael Zaikin
-
Pas une réponse directe à votre question cependant,monmauvais.Not a direct answer to your question though, my bad.
- 0
- 2019-05-07
- Michael Zaikin
J'essaie de reproduire l'algorithme de signature utilisépour l'adresse TZ2 qui utilise la courbeelliptique SECP256PK1.
Monproblèmeest que lorsquej'essaie de vérifier si la signatureest valide avec le Tezos CLI,j'ai des résultats queje nepeuxpasexpliquer. Je remarqueenviron lamoitié de la signatureest valideet l'autremoitién'estpas valide.
Voicimamiseen œuvre de Python:
exemple de sortie d'échec:
exemple de sortie réussie:
Voici le détail de la clé de débogage quej'utilise dans le script:
clé secrète:
spsk31ng6k6thtilpbt91ywswwspn4qejv4w3tn67hfkpnwnztrdtg
clépublique:
sppk7b4turq2t9rhplfasz6mkbczkzfibjctqsmorvld5gsgcduvkuf
clépublique hachage:
tz2bftypeyrzxd5aibchbxn3wczhx7bqbmbmbQ
commande queje fonctionnepour vérifier la validité demes signatures
Quelqu'unpeut-ilm'expliquer ce quine vapas avec lamiseen œuvre ci-dessus?