TXIDからビットコインRSZ値を生成
ビットコインのトランザクションに含まれるECDSA署名からR、S、Zの値を抽出し、暗号学的分析、ノンスの再利用検出、および署名のセキュリティ検証に利用できます。
BTC RSZ署名ツールについて:特定のビットコイントランザクションに関連付けられたECDSA署名から、暗号学的なR、S、Zの値を抽出します。RとSは署名の構成要素を表し、Zはトランザクションデータのハッシュ値を表します。
3810fff25892ef25f6b173a9b1d4b2ca790a76d37a1f7a7043bfdb6196e6754b
ビットコイントランザクションにおけるR、S、Zの値について
ECDSA署名の仕組み、ノンスの安全性、およびsecp256k1鍵のセキュリティに関する数学的原理を解説する教育用ガイドです。
1. R、S、Zとは?
ビットコインでは、楕円曲線デジタル署名アルゴリズム(ECDSA)をsecp256k1曲線上で使用してトランザクションを保護しています。ユーザーがビットコインを使用すると、ウォレットは秘密鍵そのものを公開することなく、その秘密鍵の所有権を証明するための暗号学的署名を生成します。
この署名は主にRとSという2つのパラメータで構成され、メッセージハッシュZとともにブロックチェーン台帳上で公開されます:
- Z(メッセージハッシュ):署名対象となるトランザクションデータ(入力、出力、金額、ロックタイムなど)のダブルSHA-256ハッシュです。何に対して署名しているのかを表します。
- R(一時公開値):楕円曲線上の一時的な点のx座標です。ノンス(k)と呼ばれる一意かつ一時的な秘密値を使用して生成されます。
- S(署名証明値):秘密鍵(d)、ノンス(k)、メッセージハッシュ(Z)、およびRの値を使用して数学的に計算される署名値です。
2. ECDSA署名の計算式
数学的には、ビットコイン署名のS成分は次の式によって計算されます:
各記号の意味:
- d = ユーザーの秘密鍵
- k = この1回の署名のために選択される秘密のランダムノンス
- n = secp256k1楕円曲線の位数
- R = 点k × Gのx座標(Gは生成元点)
3. ノンスの再利用(R値の衝突)の危険性
ECDSA署名の安全性は、一時的なノンスkが秘密に保たれ、かつ各トランザクションごとに完全に一意であることに大きく依存します。
ウォレットソフトウェアの乱数生成器(RNG)に問題があり、同じ秘密鍵(d)を使用して異なる2つのトランザクション(Z1とZ2)に同じノンスkを再利用すると、両方のトランザクションでまったく同じR値が生成されます。
攻撃者が秘密鍵を復元する仕組み:
2つの公開トランザクションにおいて、署名(R, S1)と(R, S2)が、それぞれメッセージZ1とZ2に署名しているとします:
-
2つの署名方程式を減算して、秘密のノンスkを分離します:
k = (Z1 - Z2) / (S1 - S2) mod n
-
ノンスkを計算した後、秘密鍵dを直接計算します:
d = ((S1 × k) - Z1) / R mod n
すべての変数(R、S1、S2、Z1、Z2)はビットコインブロックチェーン上で公開されているため、攻撃者がネットワークを監視している場合、秘密鍵dを数ミリ秒で計算し、ウォレットから資金を抜き取る可能性があります。
4. 実際の攻撃事例と対策
- 過去の脆弱性:初期のAndroid向けビットコインウォレット(2013年)やSony PlayStation 3のセキュリティシステムでは、脆弱なJava擬似乱数生成器によってR値が繰り返し生成される問題が発生し、研究者が秘密鍵を復元して、影響を受けたアドレスから資金を盗み出すことが可能になりました。
- 現代的な対策(RFC 6979 / 決定論的ノンス):現在のビットコインウォレットでは、kの選択をハードウェアの乱数生成器だけに依存することは一般的ではありません。その代わりにRFC 6979を実装し、秘密鍵dとトランザクションデータZをハッシュ化することでノンスkを決定論的に導出します:
k = HMAC-SHA256(d, Z)これにより、第三者から見てkを予測することが困難でありながら、異なるトランザクションハッシュZごとにkが一意となるよう設計できます。
- Schnorr署名(BIP 340 / Taproot):新しいビットコインアドレス形式であるTaprootでは、ECDSAの代わりにSchnorr署名が使用されます。これにより、R値に関連する可変性の問題をネイティブに回避し、複雑なマルチシグトランザクションにおける署名検証を効率化できます。