R / S / Z / K 計算ツール - Bitcoin ECDSA R、S、Z、K アナライザー
既知のR、S、Z、K値を使用し、既知のECDSAトランザクション署名からBitcoinの秘密鍵を計算します。計算にはJavaScriptのBigIntを使用します。
Bitcoin ECDSA 署名サンプル
このサンプルデータセットは、secp256k1を使用した教育的な コンテキストにおいて、パズル番号、ECDSA署名の各要素、 公開鍵、秘密鍵の値、およびノンス値の関係を示したものです。
| No. | R Value | S Value | Z Value | Pubkey | Private Key | K Value (secret nonce) |
|---|---|---|---|---|---|---|
| 1 | 5546e2ea6259151ce2bc9040efd94f8019cc08c5524ca18a77f26dcd74deb10a | 3e94a32386348f863f6ec148077eb3ebddfd4c0333c5b2030187f6b8686fe98d | 339207a21f02059dcc8bfc47f62c9ec289f3c3037bdc24c8fee9174280f182a2 | 0230210c23b1a047bc9bdbb13448e67deddc108946de6de639bcc75d47c0216b1b | 1A838B13505B26867 | 68592d1aa72720ae7333beb3bd9d6a8e69c0567fb91720318c6289d48227c05d |
| 2 | 36729851ae5082e0d70786af455cd47fa29162c459f73c1041f2663c783842be | 39ecf6abb2c43d62bce1d9cf77d3bbabb5ccad0f87399990f6ba2a568236330c | fb3fbd8f0f59ee460024db999b97f475d9cc8cdbce21b3ee749810cd266b2c31 | 0290e6900a58d33393bc1097b5aed31f2e4e7cbd3e5466af958665bc0121248483 | 349B84B6431A6C4EF1 | 79577177c7a329a48d26bcf81b5db9e88b458bf8e76665f3a9ff4ab4f0cad08e |
| 3 | 1a35a0409ba510b8055ab7767a06952783f3ec175c7f089cbad402a682b0852d | 3ee9d3f06eeadc7ccae821ac4d9f16c0df1ac5e977c9d1bceac968ed9f05bcc4 | f88b9f85f645b62635765fc550ae8d29ec28737bff088baa33d34719fce25447 | 03726b574f193e374686d8e12bc6e4142adeb06770e0a2856f5e4ad89f66044755 | 4C5CE114686A1336E07 | 123503c481722a0b4161fc681b8c786425664c102101a649d665ca788da72e7f |
| 4 | 8317c7f43d629fbe025e8e05dbbe6946d5a490115fd2718b282b693ff5809d40 | 2a7c06856091c28f49f1dd3a5bf405cc6c5743eb7aa0b66c150336b48215b2d4 | 42b44688c7e5aa10eff0ec27922238d4f3e4cda094bb7a61bea7849caa7b39d9 | 037e1238f7b1ce757df94faa9a2eb261bf0aeb9f84dbf81212104e78931c2a19dc | EA1A5C66DCC11B5AD180 | 93c7e4ce32301e1676eeef686e851d3b84a0174f7e9f0c523df966c96a24e886 |
| 5 | 0d0272274f0778f4242d4ada44d4c9ca1959238336c4754111da12adaf71a427 | 766b5813b8f194a228331282914238b30fe7ca34afad27eecb01e602ae5ea4e7 | 4b0269284f3a12c5a0fe6fd247d116e777470de4d5762a2c6318273cc0a2e8a0 | 0329c4574a4fd8c810b7e42a4b398882b381bcd85e40c6883712912d167c83e73a | 11720C4F018D51B8CEBBA8 | 18fbd62747eb6a108af69ae775878af10075590fc534036710c2cb6121a24710 |
| 6 | 089214e780b1be83aca76593293e871159eb392090135759dc110667bfd72e36 | 73eb3423c444d9248d682de9670a1c48343e3554bd3eda0da070a8cd3f2ff7cc | b79f283cae2b07b53adb9773dde9b93edf91a99b9fdda83ba9c7f4e50d7c5c11 | 035c38bd9ae4b10e8a250857006f3cfd98ab15a6196d9f4dfd25bc7ecc77d788d5 | 2CE00BB2136A445C71E85BF | 0640c641a09b8b28b721f3c861916de8eb1fab230ad5fa33dd0e03739b4936c9 |
| 7 | df359e57f5e14b8dccf09daf6ec634f48cfc105658e0fc1bf53926af5494498a | 392816fdecd0122f306b96b68a863f338abb0e874657adf22bb685b2e38826ce | 6c44185598b9fd22ac7c8bd8349f5a5894c4e02da9bbd672fd59cd67ce2cfb8f | 02967a5905d6f3b420959a02789f96ab4c3223a2c4d2762f817b7895c5bc88a045 | 527A792B183C7F64A0E8B1F4 | b3591ed9fac56c96f20f13646c6d4a4371c1c34db9126ee203d9ecb823c46930 |
| 8 | 537b3babb66402cc0cbe8b4856e0172c087bd98ddfb43e293219c8cccf6c7fdc | 4fb4d9eecf4c6cd0efb567612993a085cfbeca1163633047e6dd0c4059b06d0c | 1ced6233a635419d1b20077c0e114510b00c3510baf322b1a236dccca3c13c82 | 03d2063d40402f030d4cc71331468827aa41a8a09bd6fd801ba77fb64f8e67e617 | AF55FC59C335C8EC67ED24826 | 1ac46997d73e24a7167fa8b9825927cb59d23528c69328ce71de3087a8c79c1f |
| 9 | 1e8ad3749c24db4ae05de85ee2ec33277688630f97f8ce4f883fa36c6e193d3a | 2f66ac26be1b44df871473a42c5e8e2cbc703465e415b064dc4854b1d8b3c99f | 9c4c95b28b34558365fbcc4168debafa430c0238a27d9185d4cea23f69cddb18 | 03bcf7ce887ffca5e62c9cabbdb7ffa71dc183c52c04ff4ee5ee82e0c55c39d77b | 16F14FC2054CD87EE6396B33DF3 | 0129543698812c5d61918bddd6b24712b0d757aecba20a21c7971a3b652142af |
| 10 | 2ce84174d77df3974453ed9ea7075a94adc333068e2b82427cf3bf685a99b860 | 3329eb238537ec29814802e5d19f1a34a25faac8092d41b431f10bbfa05717ed | 0573b73c3fe704730cee74e1878253b2cbd253650d10dcd2a418b98e8c04ae17 | 0309976ba5570966bf889196b7fdf5a0f9a1e9ab340556ec29f8bb60599616167d | 35C0D7234DF7DEB0F20CF7062444 | caf9bf64e2440011a0c52746068da91cb7f9b1e20b0a4ac0816babbb85c4bcba |
| 11 | 988f9aeafa9acd319281e757deffeb3e52160baf1096b73bababd55deb31f3f2 | 10c209729f42f3b531116c5650df090cbe934bd5a4fc556d60f143227b54c69a | 016cc9c96952b3460a847c7a831cc695ffe9289a41d5ded5aa9cb6ff3ab67f6b | 0248d313b0398d4923cdca73b8cfa6532b91b96703902fc8b32fd438a3b7cd7f55 | 60F4D11574F5DEEE49961D9609AC6 | 9dd8dc8f8073f11e60ac3dd7a371313c847366b5dff74f46c9fac279eb3a2fea |
BitcoinトランザクションにおけるR、S、Z、Kを理解する
BitcoinのECDSA署名、署名を構成する各要素の役割、 そして暗号学的に弱いノンスが秘密鍵を危険にさらす可能性について解説します。
なぜBitcoinのトランザクションにはデジタル署名が必要なのか?
Bitcoinでは、ユーザー名やパスワードを使用してトランザクションを 承認する仕組みを採用していません。その代わりに、 暗号学的な署名によって所有権を証明します。
秘密鍵によって管理されているコインを使用する場合、 トランザクションにはElliptic Curve Digital Signature Algorithm、 一般的にECDSAと呼ばれるアルゴリズムによる署名が行われます。
Bitcoinでは歴史的に、ECDSA署名に secp256k1という楕円曲線が使用されています。
4つの重要な値
署名構成要素 R
RはECDSA署名を構成する2つの数学的要素のうちの1つです。 一時ノンスKと、署名処理中に実行される楕円曲線上の演算から 導出されます。
署名構成要素 S
Sは署名を構成する2つ目の要素です。 ECDSAの署名方程式に従って、メッセージハッシュ、 秘密鍵、ノンスを組み合わせて計算されます。
メッセージハッシュ Z
ZはECDSAの署名処理で使用されるメッセージハッシュを表します。 Bitcoinでは、適用される署名ハッシュ規則に従って トランザクションデータから導出されます。
一時ノンス K
Kは署名ごとに使用される秘密の一時ノンスです。 通常のBitcoin署名の一部として公開されることを 意図した値ではありません。 その安全性は非常に重要です。
R、S、Z、Kはどのように関連しているのか?
ECDSA署名の基本的な関係は、概念的には次のように表すことができます。
ここでdは秘密鍵を表し、 nは楕円曲線群の位数を表します。
この方程式を変形すると、次のようになります。
KはBitcoinトランザクションに公開されるのか?
通常は、公開されません。
標準的なECDSA署名には、署名処理から導出された 署名構成要素が含まれますが、一時ノンスそのものは 秘密の値としてトランザクションに含まれるものではありません。
ここで重要な違いが生まれます。
| 値 | 通常は確認可能? | 役割 |
|---|---|---|
| R | はい | ECDSA署名の構成要素 |
| S | はい | ECDSA署名の構成要素 |
| Z | 導出可能 | トランザクションのメッセージハッシュ |
| K | いいえ | 秘密の一時ノンス |
| D | いいえ | 秘密の署名鍵 |
なぜ弱いKは危険なのか?
ECDSAでは、ノンスKが安全に生成されることが重要です。 必要なのは、単にKが推測しにくいということだけではありません。 適切な統計的特性を持ち、署名間で偶然再利用されないことも重要です。
実装がKを正しく生成できない場合、 複数の署名間に存在する数学的な関係から、 秘密鍵に関する情報が漏洩する可能性があります。
秘密鍵そのものがブロックチェーン上のどこかに 登場する必要はありません。 ノンス生成の脆弱性によって、場合によっては 秘密鍵を再構築するのに十分な数学的情報が 得られる可能性があります。
ノンスの再利用:典型的なECDSAの失敗
最もよく知られているECDSAの問題の1つは、 同じノンスKが誤って異なる2つのメッセージへの 署名に使用されるケースです。
同じノンスを使用して作成された2つの署名を考えてみましょう。
両方の方程式に同じKが含まれているため、 2つの署名には数学的な関係が生じます。 関連する条件が成立する場合、方程式の差からKを導出でき、 その後、秘密鍵を復元できる可能性があります。
そのため、ECDSAの実装においては、 決定論的、または暗号学的に安全なノンス生成が 非常に重要となります。
ノンス生成が失敗するその他の原因
同じKを再利用することだけが問題ではありません。 ECDSAのノンスを弱体化させる可能性のある 実装上の問題には、いくつかの種類があります。
- ノンスの再利用: 複数の署名で同じKが使用される。
- 予測可能な生成: 予測可能な情報源からKが生成される。
- 不十分な乱数: 乱数生成器が十分なエントロピーを提供していない。
- ノンスの偏り: Kの一部のビットに統計的な偏りがある、 または十分なランダム性がない。
- 実装上のバグ: ノンス生成、シリアライズ、または モジュラー演算の処理が正しく行われていない。
- サイドチャネルによる漏洩: タイミング、消費電力、電磁波の放射、 またはその他の実装依存チャネルを通じて、 ノンスに関する情報が漏洩する可能性がある。
R、S、Zだけで秘密鍵を明らかにできるのか?
通常のECDSAの前提においては、R、S、Zを知っているだけでは 秘密鍵を取得することはできません。
ECDSAの安全性は、その基盤となる楕円曲線離散対数問題を 解くことの困難さに基づいています。
しかし、Kに関する追加情報が利用可能になると状況が変わります。 例えば、ノンスの再利用や十分に弱いノンス生成によって、 適切に生成された署名には存在しない数学的な関係が 生じる可能性があります。
R、S、Zは通常、公開されているか、公開データから導出可能です。 一方、Kは秘密に保たれる必要があります。 ECDSAの安全性は、主にKが予測不可能であり、 適切に生成されることによって成り立っています。
Bitcoinの署名システムはなぜ興味深いのか?
Bitcoinはトランザクションデータを公開で検証できるため、 暗号学的な署名を研究するうえで独特な環境を提供しています。
研究者は過去の署名を調査し、適切なメッセージハッシュを計算し、 署名の構成要素を確認するとともに、安全なノンス生成であれば 予想されないような数学的関係が署名に存在するかどうかを 調査することができます。
ただし、署名間に数学的な関係が見つかったからといって、 必ずしも秘密鍵を復元できるという意味ではありません。 正確な署名方式、トランザクションのシリアライズ方法、 ハッシュタイプ、署名エンコーディング、 そして数学的な前提条件をすべて正しく考慮する必要があります。
図解で理解するECDSAの安全性
ウォレット開発者はどのようにKを保護するのか?
安全なウォレット実装では、ノンス生成を 重要な暗号処理として扱う必要があります。
- 十分にレビューされた暗号ライブラリを使用する。
- 安全な乱数、または適切に実装された 決定論的ノンス生成方式を使用する。
- 異なるメッセージ間でECDSAノンスを再利用しない。
- 強い暗号工学上の理由がない限り、 楕円曲線演算をゼロから実装することを避ける。
- 秘密鍵や一時的な秘密情報を、 ログ、デバッグ出力、意図しない情報公開から保護する。
- 確立された暗号学的テストベクトルを使用して 実装をテストする。
まとめ
R、S、Z、Kは、BitcoinにおけるECDSA署名の仕組みを理解するうえで 重要な4つの概念です。
RとSは署名を構成し、 Zは署名処理で使用されるメッセージハッシュを表します。 Kは一時的な秘密ノンスであり、 予測不可能であること、そして不適切に再利用されないことが重要です。
最も重要なポイントは、ECDSAの安全性が秘密鍵だけに 依存しているわけではないということです。 署名処理で使用される一時的な値にも、 厳格なセキュリティ要件があります。