一貫したtz2(secp256pk1)署名を取得できません
2 回答
- 投票
-
- 2019-05-05
当面の問題は、「下位S」形式の署名を取得していないことのようです.これは良いようです:
sk.sign_digest(digest, sigencode=ecdsa.util.sigencode_string_canonize)
一般的にコードの正確さを保証することはできません.
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
直接的な答えではありませんが、回避策
python-ecdsa libは、デフォルトで非決定論的署名を生成します( httpsを参照してください://tools.ietf.org/html/rfc6979#section-3.2 ).コードを実行するたびに、新しい結果が得られます. 私はこの問題を経験し、最終的にsecp256k1パッケージに切り替えました(それにはいくつかの追加の理由がありました): 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
-
あなたの答えに感謝しますマイケル、私の実験から、テゾスは決定論的署名を必要としません(しかしそれは決定論的署名を生成するようです).決定論的署名に切り替えた他の理由は何ですか?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
-
そうです、私はノードCLIをエミュレートしようとしましたが、それがユニットテストですべてが期待どおりに機能することを確認する唯一の方法でした) python-ecdsaからsecp256k1に切り替えたもう1つの理由は、VerifyingKeyは完全な形式のX + Yの公開鍵からのみ構築できるのに対し、Tezosではコンパクトな形式が使用されているためです.それほど複雑ではありませんが、Y派生のカスタム実装を回避するだけです:)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
-
しかし、あなたの質問に対する直接の答えではありません、私の悪いです.Not a direct answer to your question though, my bad.
- 0
- 2019-05-07
- Michael Zaikin
secp256pk1楕円曲線を使用するtz2アドレスに使用される署名アルゴリズムを再現しようとしています.
私の問題は、署名がtezos cliで有効かどうかを確認しようとすると、説明できない結果が得られることです.署名の約半分が有効で、残りの半分が無効であることに気付きました.
これが私のPython実装です:
失敗した出力の例:
成功した出力の例:
スクリプトで使用しているデバッグキーの詳細は次のとおりです.
シークレットキー:
spsk31nG6K6tHTiLPbT91YWSwwSPn4Qejv4w3Tn67hfKPNWNztRDTg
公開鍵:
sppk7b4TURq2T9rhPLFaSz6mkBCzKzfiBjctQSMorvLD5GSgCduvKuf
公開鍵ハッシュ:
tz2BFTyPeYRzxd5aiBchbXN3WCZhx7BqbMBq
署名の有効性を確認するために実行するコマンド
誰かが上記の実装の何が問題になっているのか説明してもらえますか?