私のECDSA署名は常に一意ですか?

Dec 01 2020

P2PKHでは、検証スクリプトは次のとおりです。

<sig> <pubKey> OP_DUP OP_HASH160 <pubKeyHash> OP_EQUALVERIFY OP_CHECKSIG

常にまったく同じ秘密鍵を使用し、それを使用して常にまったく同じメッセージに署名する場合、<sig>すべてのトランザクションの中で私の一意性はありますか?

さらに、<sig>私のすべての取引で常に同じだったとしたら、それは私を知っているすべての人が私に<sig>なりすますことができるということですか?

回答

2 Murch Dec 01 2020 at 12:39

デジタル署名は、実際には誰かのジョン・ハンコックとあまり似ていません。デジタル署名は、暗号で1つのメッセージにコミットし、他のメッセージでは無効として解決します。誰かの3つの十字架とは異なり、ある文書から別の文書に持ち上げたり、簡単に模倣したりすることはできません。

ECDSAの署名アルゴリズムは、秘密鍵と署名がコミットするメッセージの2つの入力を使用します。ビットコインの場合、「メッセージ」はあなたがコミットしようとしているビットコイントランザクションです。

署名は、メッセージ、秘密鍵、および署名中に生成されたランダムなコンポーネントから数学的に導出されます。署名の作成には秘密鍵の知識が必要ですが、署名は、メッセージ、署名、および対応する公開鍵を知っている人なら誰でも検証できます。署名は、その特定のトランザクションにのみ適合します。他のトランザクションでは、別の「メッセージ」にコミットするために署名が必要であり、そのような署名は秘密鍵の知識がないと作成できませんでした。

トランザクションは少なくとも1つの未使用トランザクション出力(UTXO)を消費し、各UTXOは一意である¹ため、「同じメッセージに署名する」という前提は「すべてのトランザクションで同じ」と矛盾します。各トランザクションは一意である必要があるため、トランザクションが同じ秘密鍵に関連付けられた入力を使用した場合でも、署名は転送されません。したがって、はい、すべての署名は一意です。

さらに、<sig>私のすべての取引で常に同じだったとしたら、それは私を知っているすべての人が私に<sig>なりすますことができるということですか?

いいえ、それは署名の仕組みではありません。署名がすべてのトランザクションで常に同じである場合、それらは役に立ちません。そのような「署名」は、あなたが特定の何かにコミットしたことを証明するものではなく、したがって支払いを承認する手段にはなり得ません。


¹UTXOは、UTXOを作成したアウトポイントtxid、そのトランザクションの出力リスト内の出力の位置で構成されるアウトポイントによって一意に識別できます。txidトランザクションデータのSHA256Dダイジェストです。BIP34ではCoinbaseトランザクションにブロックの高さを含める必要があるため、これは事実上一意です。したがって、誘導により、トランザクションが同じデータで構成されることはありません。