原作者:Fu Shaoqing、SatoshiLab、Wanwudao BTC Studio
1.知識を準備する
様々なデジタル通貨ウォレットアドレスを完全に理解するには、いくつかの基礎知識が必要です。具体的には、非対称暗号化における公開鍵と秘密鍵、ハッシュアルゴリズム、一般的なエンコードの概念、そしてアドレス生成の基本原則に関する知識です。ビットコインウォレットアドレスはBIPプロトコルに基づいて設計されており、ビットコイン以外のウォレットアドレスのほとんどもBIP関連プロトコルに基づいて設計されています。ビットコインアドレスに関する関連知識を復習するとともに、他の種類のウォレットアドレスについても紹介します。
1.1.非対称暗号化の知識と公開鍵と秘密鍵
非対称暗号化は現代暗号の礎であり、1976年にホイットフィールド・ディフィーとマーティン・ヘルマンによって初めて提唱されました。その中核となる特徴は、数学的に関連する2つの鍵、すなわち公開される公開鍵と秘密に保持される秘密鍵を用いることです。重要な特徴は、暗号化と復号化が異なる鍵を用いて行われることです。公開鍵で暗号化された情報は、対応する秘密鍵でのみ復号化できます。一方、秘密鍵で署名された情報は、対応する公開鍵を用いて真正性を検証できます。これにより、対称暗号化における鍵配布問題が完全に解決され、事前共有秘密を必要とせずに安全な通信が可能になります。
現在、デジタル通貨分野で最も一般的に使用されている非対称暗号化アルゴリズムは楕円曲線デジタル署名アルゴリズム(ECDSA)であり、特にビットコインなどの通貨で使用されているsecp 256k1曲線が注目されています。このアルゴリズムは、従来のRSAアルゴリズムと同等のセキュリティレベルを維持しながら、鍵長が短く、より効率的です。ビットコインのTaproot技術に続き、Schnorrデジタル署名アルゴリズムも暗号通貨分野で利用され始めています。ECDSAと比較して、Schnorrにはいくつかの利点があります。
公開鍵と秘密鍵のアルゴリズム原理と機能(この記事では主にデジタル通貨の分野について説明します)
デジタル通貨において、秘密鍵はランダムに生成される大きな数値であり、資産に対する唯一の支配権の証明として機能します。公開鍵は、秘密鍵から一方向性楕円曲線乗算によって導出されます(つまり、秘密鍵から公開鍵を導出することは容易ですが、その逆はほぼ不可能です)。ウォレットアドレスは通常、公開鍵のハッシュです。
その機能は次のとおりです。
秘密鍵:対応する資金を使用する権限を証明するためのトランザクション署名を生成するために使用されます。厳重に保管する必要があります。
公開鍵:トランザクション署名の有効性を検証し、署名が対応する秘密鍵によって生成されたことを確認するために使用されます。また、誰とでも安全に共有できる公開決済アドレスを生成するためにも使用されます。
つまり、秘密鍵は署名に使用され、公開鍵は検証とアドレス生成に使用されます。この2つを組み合わせることで、資産所有権移転の安全性と信頼性が確保されます。
ビットコインでは、公開鍵は非圧縮と圧縮に分かれています。非圧縮の公開鍵は04で始まり、65バイトの長さです。圧縮された公開鍵は02(偶数)または03(奇数)で始まり、33バイトの長さです。
次に例を示します。
公開鍵(非圧縮): 04 b 4632 d 08485 ff 1 df 2 db 55 b 9 dafd 23347 d 1 c 47 a 457072 a 1 e 87 be 26896549 a 87378 ec 38 ff 91 d 43 e 8 c 2092 ebda 601780485263 da 089465619 e 0358 a 5 c 1 be 7 ac 91 f 4
公開鍵(圧縮):
02 b 4632 d 08485 ff 1 df 2 db 55 b 9 dafd 23347 d 1 c 47 a 457072 a 1 e 87 be 26896549 a 8737
従来の非圧縮公開鍵の図
圧縮公開鍵の概略図
デジタル通貨に関連する公開鍵と秘密鍵の知識には、WIF(ウォレットインポート)秘密鍵という一般的な用語もあり、そのエンコード形式は次のとおりです。
具体的なデータサンプルは次のとおりです。
1.2.ビットコインでよく使われるハッシュアルゴリズム
公開鍵と秘密鍵の知識に加えて、ハッシュ アルゴリズムについても理解する必要があります。
一方向ハッシュ関数は、メッセージと呼ばれる1つの入力と、ハッシュ値と呼ばれる1つの出力を持ちます。一方向ハッシュ関数は、メッセージの内容に基づいてハッシュ値を計算し、メッセージの整合性を確認するために使用できます。ハッシュ関数は、任意の長さの情報を固定長の出力値に変換できます。
1. 一般的に使用されているSHA-256とRIPEMD-160を紹介します。
SHA-256はSecure Hash Algorithm 256-bitの略です。任意のサイズの入力データを受け取り、一連の複雑な数学的計算を経て、ランダムな意味不明な文字列のように見える固定長(256ビット、つまり32バイト)の文字列を生成します。この文字列は通常、64桁の16進数(0~9、A~F)で表されます。
たとえば、「hello world」と入力すると、SHA-256 計算の結果は次のようになります。
b 94 d 27 b 9934 d 3 e 08 a 52 e 52 d 7 da 7 dabfac 484 efe 37 a 5380 ee 9088 f 7 ace 2 efcde 9
RIPEMD-160は、RACE Raw Integrity Check Message Digest-160の略です。これは、より短いデジタル指紋を生成するために特別に設計された生成器です。SHA-256と同様に、一方向ハッシュ関数です。入力を受け取り、通常40桁の16進数で表される固定長(160ビット、または20バイト)の出力を生成します。
たとえば、hello world と入力すると、RIPEMD-160 の計算後に次の結果が出力されます。
d 7 d 56920283 f 17 ab 4 d 7 e 10 d 4 a 5 d 6 df 50 e 594 a 9 c 3
2. ビットコインで使われる一般的なハッシュアルゴリズムは
HASH 256(ダブルSHA-256が最も一般的に使用されます)
ハッシュ 160 (SHA-256 + RIPEMD-160)
SHA-256(シングルSHA-256)
HMAC-SHA 512 (SHA-512 を使用した HMAC)
3. 使用シナリオ
(1)ビットコインのマイニングではHASH 256が使われます。これは2倍のハッシュ値です。つまり、ブロックヘッダーのハッシュ値はHASH 256です。SHA-256
(2)トランザクションID - TXIDはHASH 256を使用します。
(3)トランザクションのマークルルートはHASH 256を使用する
(4)公開鍵ハッシュにはHASH 160を使用します。これは単一のSHA 256 + 単一のRIPE-160です。
(5)拡張鍵はHMAC(SHA-512)を使用する
(6)HASH 256は署名トランザクションに使用されます。
1.3.共通エンコーディング知識 Base 64、Base 58、Bench 32
Bitcoin ウォレット アドレスには、Base 64、Base 58、および Bench 32 など、知っておく必要があるエンコードがいくつかあります。
1. Base 64エンコーディング(ビットコインでは使用されていないが、初期の共通エンコーディングとして一緒に導入されている)
設計目標: テキストのみのメディア (電子メール、HTML、XML など) でバイナリ データを安全かつ確実に送信し、送信中にデータが変更されないようにします (改行文字など、一部の文字はプロトコルで特別な意味を持つため)。
原理:
l バイナリ データの 3 バイト (24 ビット) をそれぞれ 6 ビットの 4 つのグループに分割します。
6ビットの値(0~63)はそれぞれ印刷可能な文字に対応します。2^6 = 64なので、64文字あります。
入力データが 3 の倍数でない場合は、= 文字で埋められます。
文字セット:
(合計64文字)A~Z、a~z、0~9、+、/
主な特徴:
l 高いコーディング効率: 各文字は 6 ビットの情報を伝え、これは 3 つのコーディング方法の中で最も効率的です。
l 高い汎用性: MIME 電子メール、データ URL (Web ページ内の data:image/png;base 64 など)、暗号化キーや証明書の保存に広く使用されます。
l 英数字以外の文字が含まれている場合:+と/を使用します。これらの文字は、コマンドラインまたはURLでエスケープする必要がある場合があります。
l チェックサム機能なし: 標準 Base 64 エンコーディング自体はエラー検出機能を提供しません。
2. Base 58エンコード
設計目標:手作業による処理を最適化し、視覚的な曖昧さを回避し、手作業による入力と校正を容易にする。主にビットコインのオリジナルアドレス形式で使用されます。
原理:
l は Base 64 から派生していますが、紛らわしい文字は削除されています。
データを大きな整数として扱い、それを 58 で連続的に割り、残りを文字セットにマッピングします。
先頭のゼロ (0 x 00) バイトは文字 '1' としてエンコードされます。
文字セット:
123456789 ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz
(削除された文字は0(ゼロ)、O(大文字のオー)、I(大文字のアイ)、l(小文字のエル)、+、/の合計58文字)
主な特徴:
l 人間化: 文字セットにより混同しやすい文字が削除され、転記や入力エラーが大幅に削減されます。
純粋な英数字: 生成された文字列は非常に「クリーン」で、記号が含まれていないため、どの環境でも簡単にコピーして貼り付けることができます。
l やや効率が低い: 各文字は約 5.857 ビットの情報を伝えますが、これは Base 64 よりもやや効率が低くなります。
l チェックサムと組み合わせられることが多い: Base 58 チェックは実際にビットコインで使用されており、エンコード前にバージョン プレフィックスと 4 バイトのチェックサムを追加することで、入力エラーを効果的に検出できます。
用途: ビットコインのレガシー アドレス (P 2 PKH、1 から始まる)、ビットコインの秘密鍵 (WIF 形式)、ライトコインなどの他の暗号通貨のアドレス。
3. Bech 32エンコーディング
設計目標: Bitcoin SegWit (Segregated Witness) アドレス向けに設計され、より強力なエラー検出および修正機能を備え、大文字と小文字を区別せず、効率的な大文字変換をサポートします。
関連する BIP プロトコルは次のとおりです。
BIP-173 ネイティブ v0-16 ウィットネス出力の Base 32 アドレス形式
BIP-350 Bech 32 m フォーマット(v1+ 証人アドレス用)
Bech 32 m は、チェックサム アルゴリズムに若干の調整が加えられた Bech 32 の V 1 バージョンです。
原理:
l 複数のエラーを検出して訂正できるエラー訂正コードである BCH (Bose-Chaudhuri-Hocquenghem) コードに基づいて構築されています。
構造は、HRP(bc 1などの人間が読める部分)+セパレーター(1)+データ部分(Base 32エンコード)+チェックサムです。
l 最適化された 32 文字のサブセットを使用します。
文字セット: (すべての文字は小文字ですが、エンコードでは大文字と小文字は区別されません) qpzry 9 x 8 gf 2 tvdw 0 s 3 jn 54 khce 6 mua 7 l
主な特徴:
強力なエラー検出:ほとんどのエラーの組み合わせを検出し、検出された少数のエラーを自動的に修正します。これは、エラーの検出のみで修正はできないBase58チェックサムよりも高度な機能です。
l 大文字と小文字の区別なし: アドレスは大文字と小文字のどちらで入力しても有効であり、ユーザー エクスペリエンスが向上します。
l コンパクトで効率的: データ部分は Base 32 (文字あたり 5 ビット) を使用し、SegWit データとしてはよりコンパクトです。
人間が読める部分 (HRP): アドレスの先頭の bc 1 (Bitcoin メインネット) または tb 1 (Bitcoin テストネット) は、ネットワークの種類を明確に識別し、簡単に混同されることはありません。
コストが高い: エンコードとデコードの計算の複雑さは Base 58 よりも高くなります。
用途: Bitcoin ネイティブ SegWit アドレス (P 2 WPKH、bc 1 q... で始まる)、Taproot アドレス (P 2 TR、bc 1 p... で始まる)。
関連する内容についてさらに詳しく知りたい場合は、詳細なエンコードとデコード、チェックサムの図、およびステップごとの説明が記載されている次の Web サイトを参照することをお勧めします。
https://learnmeabitcoin.com/technical/keys/bech 32/
まとめと選び方
一般的なデータ転送の場合: Base 64 を選択します。これはネットワーク標準であり、ほぼすべてのプログラミング言語用の既製のライブラリがあり、最も効率的です。
ユーザー向けの識別子(レガシーシステムなど)の場合:「Base 58 Check」を選択します。これにより、読みやすく手動で入力しやすい文字列が生成され、視覚的なエラーを防ぐことができます。
現代の暗号通貨アドレス(特にビットコイン)では、Bech 32(つまり、bc 1で始まるアドレス)が強く推奨されます。これは最高のセキュリティとユーザーエクスペリエンスを提供し、取引手数料も削減できる可能性があります(SegWit技術の原理により、証人フィールドは元の領域の4分の1として計算されます)。これは今後の開発の方向性です。
1.4.デジタル通貨アドレス生成の基本原則
デジタル通貨のアドレスは、公開鍵と秘密鍵の暗号化メカニズムに基づいて公開鍵と秘密鍵のペアを生成することで作成されます。その後、特定のアルゴリズムと標準規格を用いて、公開鍵からデジタル通貨のアドレスが導出されます。また、秘密鍵とそれに対応する公開鍵を生成するためにも、特定のメカニズムが用いられることがよくあります。
秘密鍵の生成については、次の概略図を参照してください。
秘密鍵を導出した後、それに対応する公開鍵を取得できます。次に、アルゴリズムに従ってウォレットアドレスを計算します。以下では、最も一般的なビットコインアドレス生成プロセスを例として挙げます。
このデモ図は、最も一般的なアドレス生成アルゴリズムの原理図を示しています。後ほど、ビットコインアドレスの種類をいくつか紹介します。原理図には若干の違いがあります。各アドレスの種類については、以下の3番目のセクションで詳しく説明します。
2.ビットコインアドレス関連プロトコル
ビットコインアドレスの生成に関連するアルゴリズムとエンコーディングには、特定のプロトコル標準が必要です。これらは主にBIPプロトコルとSLIPプロトコルに由来します。これら2つの用語の略語と意味は次のとおりです。
BIP: ビットコイン改善提案
SLIP: SatoshiLabs改善提案
2.1. 3つのコアプロトコル(BIP-32、39、44)と関連プロトコル
1. BIP-32(階層的決定論的ウォレット)
BIP-32の主な機能は、単一のマスターシードから多数の鍵ペア(秘密鍵と公開鍵)を導出することです。これ以前のウォレットは、無関係な秘密鍵の集合体であったため、バックアップが非常に困難でした。BIP-32では、1つのマスターシード(通常はBIP-39ニーモニックから生成)をバックアップするだけで、ウォレットツリー構造全体のすべてのアドレスと資金を復元できます。これにより、バックアップとリカバリのプロセスが大幅に簡素化されます。
BIP-32プロトコルは、特定の公開鍵および秘密鍵導出アルゴリズムを定義します。子鍵導出(CKD)関数
親の秘密鍵 → 子の秘密鍵
公開親鍵 → 公開子鍵
親の秘密鍵 → 子の公開鍵
公開親鍵 → 秘密子鍵
BIP-32 の階層的決定論的ウォレットの原理を下の図に示します。
2. BIP-39(決定論的鍵を生成するためのニーモニックコード)
BIP-39の主な目的は、BIP-32の乱数マスターシード(0と1の長い文字列)を、人間が記述、バックアップ、記憶しやすい英語の単語列(通常12語または24語)に変換することです。プロトコルでは、英語の文章も使用できると規定されています(ただし、実装されることはほとんどありません)。これは、ウォレット作成時に表示されるニーモニックフレーズです。これにより、ユーザーエクスペリエンスとバックアップの信頼性が大幅に向上します。
https://github.com/Roasbeef/bips/blob/bip-tap/bip-0039/bip-0039-wordlists.md
BIP は、英語、日本語、韓国語、スペイン語、中国語(簡体字)、中国語(繁体字)、フランス語、イタリア語、チェコ語、ポルトガル語の記憶術語ライブラリを公式に提供しています。
3. BIP-44(決定論的ウォレットのマルチアカウント階層) - 複数通貨および複数アカウント階層
BIP 44は、BIP-32で説明されているアルゴリズムとBIP-43で説明されている目的スキームに基づいて、決定論的ウォレットの論理階層を定義します。BIP-32鍵ツリーの標準化された構造を定義し、m/purpose'/coin_type'/account'/change/address_indexのような明確なパス形式を指定します。この標準により、同じHDウォレットシードを使用して、複数の暗号通貨(ビットコイン、ライトコイン、イーサリアムなど)を管理できます。各通貨には複数のアカウントがあり、それぞれに異なる受取アドレスとお釣りアドレスがあります。これにより、異なるウォレットプロバイダー間での互換性が確保され、複数のトークン、複数のアカウント、各アカウント内の外部チェーンと内部チェーン、そしてチェーンあたり数百万のアドレスの処理が可能になります。
標準フォーマット: m/purpose'/coin_type'/account'/change/address_index
m: マスターキー(マスター)
目的': 44 に固定され、BIP 44 標準 (拡張導出) に準拠していることを示します。
'coin_type': 通貨の種類。たとえば、ビットコインは 0'、イーサリアムは 60' (拡張デリバティブ)。
account': アカウント インデックス。ユーザーは 1 つのウォレットに複数のアカウントを作成できます (拡張派生)。
change: 変更チェーン。0 は外部チェーン (受信アドレス) に使用され、1 は内部チェーン (変更アドレス) に使用されます。
address_index: アドレスインデックス。0 から順に生成されます。
例: 最初のビットコインアカウントの最初の受信アドレスのパスは、m/44'/0'/0'/0/0です。
単一のプライムは強化された導出を示す
4. BIP-43(決定論的ウォレットの目的フィールド)目的フィールド
独立したBIP-32プロトコルは実装者に過大な自由度を与えるため、このプロトコルでは目的フィールドについて具体的に規定しています。このプロトコルは、異なるスキームが別々のBIP番号を適用し、同じ目的フィールドを使用することを推奨しています。これにより、重複するBIP-32空間からアドレスが生成されることがなくなります。
セクション 4.2 では、さまざまな BIP によって定義される目的フィールドについて説明します。
使用コード 10001 ~ 19999 は SLIP プロトコル用に予約されています。
5. SLIP-0044(BIP-0044に登録されているコインの種類)
このプロトコルはcoin_type型を定義します。現在主流のcoin_type型は、SLIP-0044の共通デジタル通貨型に数千種類あります。詳細は以下のリンクをご覧ください。
https://github.com/satoshilabs/slips/blob/master/slip-0044.md
2.2.アドレスフォーマットプロトコルとエボリューションプロトコル
1. BIP-11(M-of-N標準トランザクション)M/N標準トランザクション
このプロトコルは、主にビットコイン資産をより安全に使用および管理する方法を提供するために、M/N 署名付きの標準トランザクション タイプを提供します。
命令タイプの例についてはセクション 3.3 で確認できます。
ロックスクリプトは次のとおりです: m {pubkey}...{pubkey} n OP_CHECKMULTISIG
スクリプトのロック解除: OP_0 ...署名...
しかし、このプロトコルは標準的なトランザクションのみを定義しており、特定のアドレスタイプは定義していません。後に、このマルチシグスクリプトはP2SHアドレスタイプとして標準化されました。
2. BIP-13(Pay-to-Script-Hashのアドレスフォーマット) - P 2 SHアドレス
BIP-13の主な目的は、3で始まるアドレスの標準を定義することです。このアドレスは公開鍵に直接対応するものではなく、スクリプトのハッシュ値に対応します。主に以下の目的で使用されます。
マルチ署名ウォレット(資金を使うには複数の署名が必要)。
SegWit との互換性。
重要性: 複雑なスクリプト条件を短いアドレスにハッシュすると、ユーザー エクスペリエンスが簡素化され、複雑なスマート コントラクトが可能になります。
アドレス形式の具体的な定義:
base58エンコード: [1バイトバージョン][20バイトハッシュ][4バイトチェックサム]
3. BIP-16(Pay to Scriptハッシュ)
このプロトコルはスクリプトハッシュ関数への支払いを定義していますが、BIP-13はスクリプトハッシュのアドレスへの支払いを定義しています。BIP-16で定義されているスクリプトは以下のとおりです。
ロックスクリプト: OP_HASH 160 [20バイトのハッシュ値] OP_EQUAL
スクリプトのロック解除: ...署名... {シリアル化されたスクリプト}
具体的な例についてはセクション 3.4 を参照してください。
4. BIP-49(P2WPKHネスト型P2SHベースのアカウントの導出スキーム)
P2WPKHをネストされたP2SH(BIP 141)トランザクションと併用する場合、ユニバーサル導出スキームが必要です。これにより、ユーザーは同じマスターシードまたは単一のアカウントを持つ複数のHDウォレットをシームレスに使用できます。そのため、ユーザーは専用のSegWitアカウントを作成し、このBIPと互換性のあるウォレットのみがアカウントを検出し、適切に処理できるようにする必要があります。
この BIP は、ルート アカウントから公開鍵を導出するために、BIP 44 で定義されているのと同じアカウント構造を使用しますが、異なるトランザクションのシリアル化方法を示すために異なる目的の値のみを使用します。
m/目的'/コインタイプ'/アカウント'/変更/アドレスインデックス
目的パスレベルには「49」を使用します。残りのレベルはBIP 44の定義に従います。
上記で計算した公開鍵からP2SHアドレスを導出するには、BIP 141で定義されているカプセル化を使用します。
証人: <署名> <公開鍵>
scriptSig: <0<20バイトのキーハッシュ>>
(0 x 160014{20バイトのキーハッシュ})
scriptPubKey: HASH 160 <20バイトのスクリプトハッシュ> EQUAL
(0xA 914{20バイトのスクリプトハッシュ}87)
5. BIP-84(P2 WPKHベースのアカウントの導出スキーム)
P2 WPKHトランザクションを使用する場合、ユニバーサルな導出スキームが必要です。これにより、ユーザーは同じマスターシードまたは個々のアカウントを持つ異なるHDウォレットをシームレスに使用できます。したがって、ユーザーは専用のSegWitアカウントを作成し、このBIPと互換性のあるウォレットのみがアカウントを検出し、適切に処理できるようにする必要があります。
ルートアカウントから公開鍵を導出するために、この BIP は BIP 44 および BIP 49 で定義されているのと同じアカウント構造を使用しますが、異なるトランザクションのシリアル化方法を示すために異なる宛先値のみを使用します。
m/目的'/コインタイプ'/アカウント'/変更/アドレスインデックス
目的レベルには84を使用します。残りのレベルはBIP 44またはBIP 49の定義に従います。
上記で計算した公開鍵からP² WPKHアドレスを導出するには、BIP 141で定義されているカプセル化を使用します。
証人: <署名> <公開鍵>
スクリプト署名: (空)
scriptPubKey: 0<20バイトのキーハッシュ>
(0x0014{20バイトのキーハッシュ})
6. BIP-86(単一鍵P 2 TR出力の鍵導出)
このプロトコルは、Taproot内部鍵として単一鍵P2TR(BIP 341)出力を提供します。ルートアカウントから公開鍵を導出するために、このBIPはBIP 44、49、および84で定義されているものと同じアカウント構造を使用しますが、スクリプトタイプの宛先値は異なります。
m/目的'/コインタイプ'/アカウント'/変更/アドレスインデックス
目的パスレベルには86を使用します。残りのレベルはBIP 44、49、および84で定義されているものを使用します。
7. BIP-173(ネイティブv0-16ウィットネス出力用のBase32アドレス形式)
BIP-173 の主な機能: ネイティブ Segregated Witness (ネイティブ SegWit) トランザクション用に設計された新しいアドレス形式を定義します。これは通常、bc 1 q で始まるアドレスです。
利点:
取引手数料の低減: ネイティブ SegWit 取引ではデータ量が少なくなるため、取引手数料が安くなります。
より強力なエラー防止: Bech 32 エンコーディングを使用すると、入力エラー (大文字と小文字の「O」や数字の「0」の混同など) や検出エラーを効果的に防止できます。
より大規模なアップグレードのサポート: Taproot などの将来のアップグレードへの道を開きます。
8. BIP-350 (Bech 32 m の P 2 WPKH と P 2 WSH のアドレス) - タップルートアドレス (Bech 32 m)
BIP-350の主な効果:BIP-173のBech 32形式に小さいながらも重要な調整が加えられ、新しいTaproot決済方法(P 2 TR)をサポートするBech 32 mエンコーディングが作成されました。これはbc 1 pで始まるアドレスです。
新しいフォーマットが必要な理由:Taprootは新しいWitnessバージョン(v 1)を使用しているため、以前のネイティブSegWit(v 0)と区別するためです。Bech 32mは、異なるバージョン間のチェックサム検証ルールが競合しないことを保証します。
9. BIP-141 (Segregated Witness) - Segregated Witness自体
BIP-141の主な目的:BIP-141自体はコアプロトコルですが、従来のP2SHスクリプトでラップされたSegWitトランザクションである互換アドレス(ネストP2SH)を導入します。これらのアドレスは3で始まり、マルチシグネチャアドレスと同じように見えます。
目的:エコシステムのソフトウェアとサービスがネイティブBech 32アドレスに対応していない間に、ユーザーがSegWit手数料割引の恩恵を事前に受けられるようにする手段を提供します。これらのアドレスは現在、ネイティブBech 32アドレスに段階的に置き換えられています。
3.ビットコインアドレスの種類とロックスクリプトの種類
3.1.公開鍵ハッシュP 2 PKへの支払い
P2PK(Pay To Public Key)は、アドレス操作を行わずに公開鍵に支払いを行う、最も初期のアドレス形式です。現在ではほとんど使用されていません。
比較学習については、その原理とサンプル データを次のドキュメントにまとめています。
(1)概略図
(2)サンプルデータ
P 2 PK が使用できるスクリプトを作成するためのサンプル データは次のとおりです。
出力のスクリプトをロックする
OP_PUSHBYTES_65
049464205950188 c 29 d 377 eebca 6535 e 0 f 3699 ce 4069 ecd 77 ffebfbd 0 bcf 95 e 3 c 134 cb 7 d 2742 d 800 a 12 df 41413 a 09 ef 87 a 80516353 a 2 f 0 a 280547 bb 5512 dc 03 da 8
OP_CHECKSIG
入力時のスクリプトのロック解除
OP_PUSHBYTES_72
3045022100 c 219 a 522 e 65 ca 8500 ebe 05 a 70 d 5 a 49 d 840 ccc 15 f 2 afa 4 ee 9 df 783 f 06 b 2 a 322310220489 a 46 c 37 feb 33 f 52 c 586 da 25 c 70113 b 8 eea 41216440 eb 84771 cb 67 a 67 fdb 68 c 01
より詳細なデモについては、次のリンクをご覧ください。
一部のブラウザでは、公開鍵への支払いは、1 から始まる Bitcoin アドレスである公開鍵のハッシュ値への支払いとして表示されます。
このアドレス形式は、1 から始まる長いアドレスです。例:
13 QECtNiFPXijbMZmcgaTom 3 pCXwHvDYTUWGtRxZN 7 fY 24 u 4 fG 5 iiqXaQz 3 TvuQydLrkz 9 L 4 YhcYn 3 khC 44 yQwaZme 6 uoXQ
形成過程
公開鍵(非圧縮) =
04283338 ffd 784 c 198147 f 99 aed 2 cc 16709 c 90 b 1522 e 3 b 3637 b 312 a 6 f 9130 e 0 eda 7081 e 373 a 96 d 36 be 319710 cd 5 c 134 aaffba 81 ff 08650 d 7 de 8 af 332 fe 4 d 8 cde 20
プレフィックス + 公開鍵 + チェックサム =
0004283338 ffd 784 c 198147 f 99 aed 2 cc 16709 c 90 b 1522 e 3 b 3637 b 312 a 6 f 9130 e 0 eda 7081 e 373 a 96 d 36 be 319710 cd 5 c 134 aaffba 81 ff 08650 d 7 de 8 af 332 fe 4 d 8 cde 2067 da 00 eb
58進アドレス =
13 QECtNiFPXijbMZmcgaTom 3 pCXwHvDYTUWGtRxZN 7 fY 24 u 4 fG 5 iiqXaQz 3 TvuQydLrkz 9 L 4 YhcYn 3 khC 44 yQwaZme 6 uoXQ
3.2.公開鍵ハッシュへの支払い(P2PKH)
P2PKH (Pay To Public Key Hash) は、一般的に使用されるトランザクション方法です。
(1)概略図
(2)サンプルデータ
出力のスクリプトをロックする
OP_DUP
OP_HASH 160
OP_PUSHBYTES_20
55 ae 51684 c 43435 da 751 ac 8 d 2173 b 2652 eb 64105
OP_EQUALVERIFY
OP_CHECKSIG
入力中のスクリプトのロック解除
OP_PUSHBYTES_72
3045022100 c 233 c 3 a 8 a 510 e 03 ad 18 b 0 a 24694 ef 00 c 78101 bfd 5 ac 075 b 8 c 1037952 ce 26 e 91 e 02205 aa 5 f 8 f 88 f 29 bb 4 ad 5808 ebc 12 abfd 26 bd 791256 f 367 b 04 c 6 d 955 f 01 f 28 a 772401
OP_PUSHBYTES_33
03 f 0609 c 81 a 45 f 8 cab 67 fc 2 d 050 c 21 b 1 acd 3 d 37 c 7 acfd 54041 be 6601 ab 4 cef 4 f 31
スクリプト実行の図
より詳細なデモについては、次のリンクをご覧ください。
P2PKHアドレス形成の概略図
このアドレス形式は1から始まります。例:1 JBSCVF 6 VM 6 QjFZyTnbpLjoCJTQEqVbepG
形成過程
公開鍵(非圧縮) =
04283338 ffd 784 c 198147 f 99 aed 2 cc 16709 c 90 b 1522 e 3 b 3637 b 312 a 6 f 9130 e 0 eda 7081 e 373 a 96 d 36 be 319710 cd 5 c 134 aaffba 81 ff 08650 d 7 de 8 af 332 fe 4 d 8 cde 20
ハッシュ160(公開鍵) = bc 73550 c 1612 ee 81155 d 29254217 CBD 60084 a 6 d 1
プレフィックス+ハッシュ160(公開鍵)+チェックサム =
00 bc 73550 c 1612 ee 81155 d 29254217 CBD 60084 a 6 d 1691 c 58 b 9
ベース58アドレス = 1 JBSCVF 6 VM 6 QjFZyTnbpLjoCJTQEqVbepG
理論上、圧縮されていない130文字の公開鍵をHash 160で40文字のハッシュ値に圧縮すると、ハッシュ衝突が発生する可能性があり、アドレスが重複する可能性がわずかにあります。これは懸念事項ではないでしょうか?公開鍵ハッシュがアドレスとして使用される理由については、以下をご覧ください。
https://bitcoin.stackexchange.com/questions/3600/why-are-bitcoin-addresses-hashes-of-public-keys
3.3.マルチ署名P2MSへの支払い
P2MS(Pay To Multisig)は、複数の署名への支払いを可能にする支払い方法です。関連する原則の説明については、BIP 11: M-of-N標準トランザクションを参照してください。
(1)概略図
上の図では、2/3 マルチ署名を使用すると次のようになります。
(2)サンプルデータ
出力のスクリプトをロックする
OP_2
OP_PUSHBYTES_65
04 d 81 fd 577272 bbe 73308 c 93009 eec 5 dc 9 fc 319 fc 1 ee 2 e 7066 e 17220 a 5 d 47 a 18314578 be 2 faea 34 b 9 f 1 f 8 ca 078 f 8621 acd 4 bc 22897 b 03 daa 422 b 9 bf 56646 b 342 a 2
OP_PUSHBYTES_65
04 ec 3 afff 0 b 2 b 66 e 8152 e 9018 fe 3 be 3 fc 92 b 30 bf 886 b 3487 a 525997 d 00 fd 9 da 2 d 012 dce 5 d 5275854 adc 3106572 a 5 d 1 e 12 d 4211 b 228429 f 5 a 7 b 2 f 7 ba 92 eb 0475 bb 1
OP_PUSHBYTES_65
04 b 49 b 496684 b 02855 bc 32 f 5 daefa 2 e 2 e 406 db 4418 f 3 b 86 bca 5195600951 c 7 d 918 cdbe 5 e 6 d 3736 ec 2 abf 2 dd 7610995 c 3086976 b 2 c 0 c 7 b 4 e 459 d 10 b 34 a 316 d 5 a 5 e 7
OP_3
OP_CHECKMULTISIG
入力中のスクリプトのロック解除
OP_0
OP_PUSHBYTES_72
3045022100 af 204 ef 91 b 8 dba 5884 df 50 f 87219 ccef 22014 c 21 dd 05 aa 44470 d 4 ed 800 b 7 f 6 e 40220428 fe 058684 db 1 bb 2 bfb 6061 bff 67048592 c 574 effc 217 f 0 d 150 daedcf 36787601
OP_PUSHBYTES_72
3045022100 e 8547 aa 2 c 2 a 2761 a 5 a 28806 d 3 ae 0 d 1 bbf 0 aeff 782 f 9081 dfea 67 b 86 cacb 321340220771 a 166929469 c 34959 daf 726 a 2 ac 0 c 253 f 9 aff 391 e 58 a 3 c 7 cb 46 d 8 b 7 e 0 fdc 4801
スクリプト実行の図
より詳細なデモについては、次のリンクをご覧ください。
https://learnmeabitcoin.com/technical/script/p 2 ミリ秒/
P2MS(マルチ署名による支払い)には、実際にはアドレス形式がありません。最も一般的な方法は、P2MS支払いスクリプトをP2SHまたはP2WSHスクリプトでラップし、そのアドレスが他の2つの類似アドレスを参照するようにすることです。P2MSを直接使用する場合と比較して、以下の利点があります。
P2MSにはアドレスフォーマットがないため、ビットコインを直接ロックしたい場合は、オリジナルのロックスクリプトを自分で作成して送信する必要があります。さらに悪いことに、ほとんどのウォレットはアドレスを使用したトランザクション(生のスクリプトではない)のみを許可しているため、この方法ではトランザクションが生成されない可能性があります。この状況は、このようなUTXOを使用できる入力を構築するのは、専用のツールや開発キットを使用する専門家のみにとって難しい課題であり、一般の人がそのような入力を作成することは困難であることを意味します。
P2MSでは、公開鍵は最大3つまでしか使用できません。すべての公開鍵を含めると、P2MSのロックスクリプトが非常に大きくなり(結果として手数料が高額になるため)、UTXOデータの過度な集中化を防ぐため、公開鍵は3つまでに制限されています。しかし、P2SHでは、マルチシグネチャロックに最大15個の公開鍵を使用できます。
したがって、ユーザーは必要に応じて引き続き P2MS を使用できますが、同じ機能を実現するには P2SH を使用する方が便利です。
3.4.スクリプトハッシュ P 2 SH への支払い
P2SH(Pay To Script Hash)はスクリプトハッシュに対して支払いを行います。スクリプトハッシュへの支払いが可能になって以来、ビットコインのトランザクションパフォーマンスは大幅に向上しました。
(1)概略図
(2)サンプルデータ
出力のスクリプトをロックする
OP_HASH 160
OP_PUSHBYTES_20
748284390 f 9 e 263 a 4 b 766 a 75 d 0633 c 50426 eb 875
OP_EQUAL
入力中のスクリプトのロック解除
OP_0
OP_PUSHBYTES_71
3044022100 d 0 ed 946330182916 da 16 a 6149 cd 313 a 4 b 1 a 7 b 41591 ee 52 fb 3 e 79 d 64 e 36139 d 66021 f 6 ccf 173040 ef 24 cb 45 c 4 db 3 e 9 c 771 c 938 a 1 ba 2 cf 8 d 2404416 f 70886 e 360 af 401
OP_PUSHBYTES_71
5121022 afc 20 bf 379 bc 96 a 2 f 4 e 9 e 63 ffceb 8652 b 2 b 6 a 097 f 63 fbee 6 ecec 2 a 49 a 48010 e 2103 a 767 c 7221 e 9 f 15 f 870 f 1 ad 9311 f 5 ab 937 d 79 fcaeee 15 bb 2 c 722 bca 515581 b 4 c 052 ae
スクリプト実行の図
より詳細なデモについては、次のリンクをご覧ください。
https://learnmeabitcoin.com/technical/script/p 2 sh/
住所原則
公開キーまたはスクリプトのハッシュ 160 をレガシー アドレスにエンコードします。
このアドレス形式は 3 から始まります (テスト ネットワークは 2 から始まります)。例:
3 Nfmmt 78 SUwQTZtr 4 p 9 数量 5 Wgaykt 6 PhoS
形成プロセス:
ユーザーの公開キーまたはスクリプトをハッシュ 160 でエンコードして結果を取得します。
ハッシュ160(公開鍵またはスクリプト)= d 5 ed 76 bbb 243 d 456240014178 ba 5 fbb 37 ada 36 bc
ベース58アドレス = プレフィックス(05) + ハッシュ160(公開鍵またはスクリプト) + チェックサム(32 e 485 ca) = 3 MCAKgGRPTMjYP 3 cD 1 vTeD 7 aQZJPVECAC 1
P2SH の明らかな利点は次のとおりです。
l 複雑なロック解除スクリプトの使用が容易になります (後続の Taproot で MAST ツリーを使用するための基礎も提供されます)。
より安い取引手数料(これにより、出力を使うためにロック解除されたバイトをさらに使用する必要がある支出者にコストが実質的に転嫁されます)
lP 2 SH はより強力なプライバシーを提供します。
出力バイト数が削減されるため、UTXOセット全体が小さくなります。単一のUTXOのサイズが小さくなるため、より多くのUTXOをメモリに格納できます。
注:P2SHでは、償還スクリプトの最大長は520バイトです。つまり、P2SHスクリプトがP2MSの場合、最大15個の公開鍵を含めることができます(圧縮された公開鍵は33バイトで、15個の圧縮された公開鍵は33*15=495バイトとなり、これが520バイト未満の最大値となります)。
3.5.パッケージへの支払いのための公開鍵ハッシュP 2 SH-P 2 WPKHを証人として提出する
2 SHP 2 WPKH を P 2 SH でラップし、証人公開鍵ハッシュ P への支払いをスクリプトハッシュ P 2 SH 方式への支払いにラップします。PP 2 WPKH()2 WPKH
(1)概略図
(2)サンプルデータ
出力のスクリプトをロックする
OP_HASH 160
OP_PUSHBYTES_20
6 d 3 ed 4 cf 55 dc 6752 a 12 d 3091 d 436 ef 8 f 0 f 982 ff 8
OP_EQUAL
入力中のスクリプトのロック解除
OP_PUSHBYTES_22
001402 c 8147 af 586 cace 7589672191 bb 1 c 790 e 9 e 9 a 72
スクリプト実行の図
(3)この支払アドレスの概略図は以下のとおりです。
より詳細なデモについては、次のリンクをご覧ください。
https://learnmeabitcoin.com/technical/script/p 2 sh-p 2 wpkh/
このアドレス形式は3で始まります。例: 3 Beer 3 irc 1 vgs 76 ENA 4 coqsEQpGZeM 5 CTd
3.6.パッケージ証人スクリプトハッシュへの支払い P 2 SH - P 2 WSH
P 2 SH-P 2 WSH (P 2 SH でラップされた P 2 WSH) は、証人スクリプト ハッシュ PS への支払いをスクリプト ハッシュ P 2 SH メソッドへの支払いにラップします。
(1)概略図
(2)サンプルデータ
出力のスクリプトをロックする
OP_HASH 160
OP_PUSHBYTES_20
257014 cec 2 f 75 c 19367 b 2 a 6 a 0 e 08 b 9 f 304108 e 3 b
OP_EQUAL
入力中のスクリプトのロック解除
OP_PUSHBYTES_34
0020973 cfd 44 e 60501 c 38320 ab 1105 fb 3 ee 3916 d 2952702 e 3 c 8 cb 4 cbb 7056 aa 6 b 47 f
スクリプト実行の図
(3)この支払アドレスの概略図は以下のとおりです。
より詳細なデモについては、次のリンクをご覧ください。
https://learnmeabitcoin.com/technical/script/p 2 sh-p 2 wsh/
このアドレス形式は3で始まります。例: 3 NUPJunPTWu 5 ivNHoi 375 bsTiN 7 P 2 MpZC 2
3.7.公開鍵ハッシュ P2 WPKH の証人への支払い
P 2 WPHK (Pay To Witness 公開キーハッシュ) は、Segregated Witness アドレスへの支払いに使用されます。
(1)概略図
(2)サンプルデータ
出力のスクリプトをロックする
OP_0
OP_PUSHBYTES_20
841 b 80 d 2 cc 75 f 5345 c 482 af 96294 d 04 fdd 66 b 2 b 7
入力のロック解除スクリプト(Witnessゾーンデータ)
3044022042 e 5 e 3 ed 2 a 41214 ae 864634 b 6 fde 33 ca 2 ff 312 f 3 d 89 d 6 aa 3 e 14 c 026 d 50 d 8 ed 3202206 c 38 dcd 0432 a 0724490356 fbf 599 cdae 40 e 334 c 3667 a 9253 f 8 f 4 cc 57 cf 3 c 448001
03 f 465315805 ed 271 eb 972 e 43 d 84 d 2 a 9 e 19494 d 10151 d 9 f 6 adb 32 b 8534 bfd 764 ab
スクリプト実行の図
より詳細なデモについては、次のリンクをご覧ください。
https://learnmeabitcoin.com/technical/script/p 2 wpkh/
住所形成図
プレフィックス OP_0 は、Segregated Witness の最初のバージョンを区別するために使用されます (後続の Taproot アドレスは OP_1 を使用して区別します)。その後に 20 バイトの公開キー ハッシュが続き、最後に Bech 32 アドレス エンコード形式が続きます。
このアドレス形式は bc 1 q で始まります。例:
bc 1 qar 0 srrr 7 xfkvy 5 l 643 lydnw 9 re 59 gtzzwf 5 mdq
注: P2WPKHは圧縮された公開鍵のみを受け入れます
3.8.証人への支払いスクリプトハッシュ P 2 WSH
P 2 WSH (Pay To Witness Script Hash)、証人スクリプトハッシュへの支払い。
(1)概略図
(2)サンプルデータ
出力のスクリプトをロックする
OP_0
OP_PUSHBYTES_32
65 f 91 a 53 cb 7120057 db 3 d 378 bd 0 f 7 d 944167 d 43 a 7 dcbff 15 d 6 afc 4823 f 1 d 3 ed 3
入力中のスクリプトのロック解除
00
30440220415899 bbee 08 e 42376 d 06 e 8 f 86 c 92 b 4987613 c 2816352 fe 09 cd 1479 fd 639 f 18 c 02200 db 57 f 508 f 69 e 266 d 76 c 23891708158 bda 18690 c 165 a 41 b 0 aa 88303 b 97609 f 7801
304402203973 de 2303 e 8787767090 dd 25 c 8 a 4 dc 97 ce 1 aa 7 eb 4 c 0962 f 13952 ed 4 e 856 ff 8 e 02203 f 1 bb 425 def 789 eea 8 be 46407 d 10 b 3 c 8730407176 aef 4 dc 2 c 29865 eb 5 e 5542 bf 01
522103848 e 308569 b 644372 a 5 eb 26665 f 1 a 8 c 34 ca 393 c 130 b 376 db 2 fae 75 c 43500013 c 2103 cec 1 ee 615 c 17 e 06 d 4 f 4 b 0 a 08617 dffb 8 e 568936 bdff 18 fb 057832 a 58 ad 4 d 1 b 752103 eed 7 ae 80 c 34 d 70 f 5 ba 93 f 93965 f 69 f 3 c 691 da 0 f 4607 f 242 f 4 fd 6 c 7 a 48789233 e 53 ae
スクリプト実行の図
より詳細なデモについては、次のリンクをご覧ください。
https://learnmeabitcoin.com/technical/script/p2wsh/
住所形成図
プレフィックス OP_0 は、Segregated Witness の最初のバージョンを区別するために使用されます (後続の Taproot アドレスは OP_1 を使用して区別します)。その後に 32 バイトのスクリプト ハッシュが続き、最後に Bech 32 アドレス エンコード形式が続きます。
このアドレス形式は bc 1 q で始まります。例:
bc 1 qmc 7 d 40 nxddfklulxq 55 f 2 jhupauaystdlxnj 69 asztedz 8 uz 6 e 3 q 9 lj 223
3.9.TaprootアドレスP 2 TRに支払う
P2TR(Pay To Taproot)は、Taprootアドレスに支払います。このタイプの支払いには、Key Path SpendとScript Path Spendの2種類があります。詳細については、以下の説明をご覧ください。
(1)概略図
(2)サンプルデータ1 - キーパス支出
出力のスクリプトをロックする
OP_1
OP_PUSHBYTES_32
0 f 0 c 8 db 753 acbd 17343 a 39 c 2 f 3 f 4 e 35 e 4 be 6 da 749 f 9 e 35137 ab 220 e 7 b 238 a 667
入力中のスクリプトのロック解除
b 693 a 0797 b 24 bae 12 ed 0516 a 2 f 5 ba 765618 dca 89 b 75 e 498 ba 5 b 745 b 71644362298 a 45 ca 39230 d 10 a 02 ee 6290 a 91 cebf 9839600 f 7 e 35158 a 447 ea 182 ea 0 e 022 ae 01
キーパス支出実行スクリプトの図
(3)サンプルデータ2-3 スクリプトパス支出
出力のスクリプトをロックする
OP_1
OP_PUSHBYTES_32
0 f 0 c 8 db 753 acbd 17343 a 39 c 2 f 3 f 4 e 35 e 4 be 6 da 749 f 9 e 35137 ab 220 e 7 b 238 a 667
入力中のスクリプトのロック解除
01769105 cbcbdcaaee 5 e 58 cd 201 ba 3152477 fda 31410 df 8 b 91 b 4 aee 2 c 4864 c 7700615 efb 425 e 002 f 146 a 39 ca 0 a 4 f 2924566762 d 9213 bd 33 f 825 fad 83977 fba 7 f 01
206 d 4 ddc 0 e 47 d 2 e 8 f 82 cbe 2 fc 2 d 0 d 749 e 7 bd 3338112 cecdc 76 d 8 f 831 ae 6620 dbe 0 ac
c 0924 c 163 b 385 af 7093440184 af 6 fd 6244936 d 1288 cbb 41 cc 3812286 d 3 f 83 a 3329
スクリプト実行の図
より詳細な説明については、次のリンクをご覧ください: https://learnmeabitcoin.com/technical/script/p 2 tr/
プレフィックス OP_1 は、Segregated Witness の 2 番目のバージョンを区別するために使用されます (以前の SegWit アドレスは OP_0 を使用して区別していました)。その後に 20 バイトの公開キー ハッシュが続き、最後に Bech 32 アドレス エンコード形式が続きます。
このアドレス形式は bc 1 p で始まります。例:
bc 1 ppsxtf 9 y 28 tx 36 e 6 nlra 79 m 270 vuagzknt 97 w 6 ga 4 ah 5 g 7 ggxpu 8 s 6 z 8 ftw
4.ビットコイン取引における派生パスアドレスとプライバシー保護
4.1.ビットコインの取引履歴
ビットコイン アドレスの変更は、ビットコインの 2 つの SegWit 実装によって引き起こされた変更が主な原因で、いくつかのビットコイン取引履歴の変更とも密接に関連しています。
1. ホワイトペーパーで定義されたトランザクション(単純なトランザクションモデル)
初期の基本的なビットコイン取引では、複数の入力と最大2つの出力が可能でした。1つは受取人へのお釣り、もう1つは外部への送金でした。(注:入力合計と出力合計の差が取引手数料です。)
初期のアドレスには、P 2 PK、P 2 PKH、P 2 MS、P 2 SH などがありました。
2. Segregated Witness バージョン 1 (SegWit) でのトランザクション
Segregated Witness(SegWit)は、ビットコイン・ブロックチェーン・ネットワークのプロトコル・アップグレードです。開発者のPieter Wiulle氏が2015年12月にビットコイン・コア・クライアントのコアアップデートとして提案したSegWitは、トランザクションデータと署名データを分離することで容量拡張を実現します。このソリューションは、従来のビットコイン・ネットワークとの互換性を維持し、ハードフォークを回避します。
その中核となるメカニズムは、ブロックサイズの制限を1メガバイトから4メガバイトに増加します(統計によると、実際の増加は2〜2.1メガバイトと推定されています)。このテクノロジーは、追加のウィットネスブロックにデジタル署名を保存することで、メインチェーンのスペースを解放します。このテクノロジーは、トランザクションの展性の問題に対処し、トランザクション識別子の生成を改善して二重支払い攻撃を防ぎ、ライトニングネットワークなどの第2層プロトコルの基盤を築きます。業界のほとんどの企業が採用している主流のクライアント標準であるビットコインコアでは、このアップグレードをサポートするためにネットワークのハッシュレートの95%が必要ですが、実際のサポートは一貫して32%から33.8%の間にとどまっています。反対派は、物議を醸す技術的有用性と、第三者による干渉によってビットコインの分散化が弱まる可能性に焦点を当てています。このプロトコルは、2017年8月24日にビットコインメインネットで有効化されました。
内のアドレスは、P 2 WPKH、P 2 WSH、P 2 SH-P 2 WPKH、P 2 SH-P 2 WPSH およびその他のいくつかのアドレス タイプです。
3. Segregated Witness v2(Taproot)でのトランザクション
Taproot技術は2020年1月に提案され、2021年11月にソフトフォークとして正式に発効しました。このアップグレードは、BIP 340、BIP 341、BIP 342を組み合わせたものです。BIP 340では、楕円曲線デジタル署名アルゴリズム(ECDSA)に代わる、複数のトランザクションを同時に検証できるSchnorr署名が導入されました。これにより、ネットワーク容量がさらに拡大し、バッチトランザクションの処理が高速化され、複雑なスマートコントラクトの導入が容易になりました。BIP 341では、ブロックチェーン上のトランザクションデータストレージを最適化するために、Merkleベースの抽象構文木(MAST)が実装されました。BIP 342(Tapscript)は、ビットコインのスクリプト言語を使用して、ビットコインのネイティブスクリプト機能の限界を拡張します。
Taproot のアドレスは P 2 TR アドレス タイプです。
4.2.一般的な導出パスの定義
まずビットコインの一般的な派生パスを理解し、次に他のチェーンの一般的な派生パスを見てみましょう。
1. ビットコインの一般的な派生経路
BIPで定義されている導出パスの標準フォーマットは、m/purpose'/coin_type'/account'/change/address_indexです。
ビットコインの最も一般的な派生パスは、主に、異なるアドレス タイプに対応する目的フィールドによって区別されます。
(1) BIP 44 - レガシー(オリジナル)アドレス (1...)
パス: m/44'/0'/0'/0/0
目的: 1 から始まる P2PKH アドレスを生成するために使用される、最も初期の HD ウォレット標準。
特徴:
すべてのウォレットと取引所でサポートされている最高の互換性。
取引データ量が多いため、取引手数料が最も高くなります。
使用シナリオ: 現在、主に非常に古いウォレットから資金を回復したり、新しいアドレス タイプをサポートしていない古いプラットフォームに資金を補充したりするために使用されます。
(2) BIP 49 - ネストされたSegWitアドレス (3...)
パス: m/49'/0'/0'/0/0
目的: 3 から始まる P 2 SH-P 2 WPKH アドレスを生成するために使用されます。
特徴:
これは、SegWit アドレスを P2SH スクリプトでラップすることによって実現されます。
取引手数料はレガシーよりも低いですが、ネイティブ SegWit よりも高くなります。
互換性は非常に良好で、ほぼすべてのウォレットと取引所が 3 で始まるアドレスの送受信をサポートしています。
ユースケース:SegWit推進の初期段階では、ネイティブSegWitへの移行における互換性のあるソリューションとして機能しました。現在でも広く支持されています。
(3) BIP 84 - ネイティブSegWitアドレス (bc 1 q...)
パス: m/84'/0'/0'/0/0
目的: bc 1 q から始まる P 2 WPKH アドレスを生成するために使用されます。
特徴:
取引データ量が最も少なく、フォーマットが最も効率的であるため、取引手数料は最も低くなります。
SegWit の技術的利点を最大限に活用した最適なセキュリティ。
互換性:現在、ほとんどの最新のウォレット、ノード、取引所がサポートしています。ただし、一部の非常に古いシステムでは認識されない場合があります。
使用シナリオ: 料金を節約し、最新の技術機能を享受するための、現在推奨されている標準です。
(4) BIP 86 - Taproot (P 2 TR) アドレス (bc 1 p...)
パス: m/86'/0'/0'/0/0
目的: bc 1 pで始まるP 2 TRアドレスを生成するために使用されます。これはビットコインの最新のメジャーアップグレードです。
特徴:
プライバシーが向上し、シンプルな支払いと複雑なスクリプトトランザクションがオンチェーン上でほとんど区別がつかなくなります。
効率性が向上し、スケーラビリティが向上し、複雑なスマート コントラクト (Lightning Network、DLC など) の手数料が削減されます。
署名アルゴリズム (Schnorr 署名) はより効率的で、キーの集約をサポートします。
使用シナリオ: ビットコインの将来の開発方向を表し、最新のテクノロジーを使用し、手数料を低く抑え、プライバシーを強化したいユーザーやアプリケーションに適しています。
(5)RGB技術で使用される導出パス
コインがBIP-44プロトコル標準に従って定義され、SLIP-44プロトコルがRGB-0044プロトコルに従って定義されている場合、目的は84です。RGBの公式導出パスは次のとおりです:m_type/84'
さらに、著者はRGB公式サイトを参照し、LNPBP-46: LN導出の記述に従ってm/9735'/の導出パスを使用しました。具体的な関連内容は次のとおりです。
注: どの特定の標準を使用するかについては、関連するアプリケーションと RGB プロトコル ドキュメントをさらに調査する必要があります。
(6)その他の重要な道
BIP 32 ルートパス: m/0' (または場合によっては m/0)。一部の古い実装や非標準ウォレットではこのパスを直接使用する場合もありますが、マルチ通貨およびマルチアカウントの標準を満たしていないため、強く推奨されません。
マルチシグウォレットパス:マルチシグウォレットでは、各協力者は通常、独自の標準パス(例:m/48'/0'/0'/2')を使用してマルチシグ用の公開鍵を導出します。これは通常、マルチシグネチャを調整するウォレットソフトウェア(例:Electrum、Specter)によって管理されるため、一般ユーザーが手動で処理する必要はありません。
テストネットパス:上記のパスのcoin_typeを0'から1'に変更するだけです。例えば、テストネットのネイティブSegWitパスはm/84'/1'/0'/0/0です。
2. 以下に、いくつかの主流通貨とその一般的な派生パスを示します。
(1)イーサリアムおよびEVM互換チェーン(BSC、Polygon、Avalanche C-Chainなど)
Ethereum とその多くの派生チェーンは、同じ暗号化 (secp 256k1 曲線) とアドレス形式を使用しているため、同じ coin_type を共有します。
パス: m/44'/60'/0'/0/0
コインタイプ: 60'
アドレス形式: 0x...
注:これは、MetaMaskやTrust Walletを含むほとんどのウォレットで使用されるデフォルトのパスです。EVMベースのチェーン(BSC m/44'/60'/0'/0/0やPolygon m/44'/60'/0'/0/0など)はすべて、同じパスと同じ秘密鍵セットを使用します。アドレスは異なるチェーン上で同一に見えますが、それらは異なるチェーン上の別々のアカウントです。ネットワークを切り替える際、ウォレットソフトウェアはRPCノードを使用して異なるチェーンを区別します。
(2) バイナンスコイン(BNB)ビーコンチェーン
BNB には、EVM チェーンとは異なる独自の独立したチェーンとアドレス システムがあります。
パス: m/44'/714'/0'/0/0
コインタイプ: 714'
アドレス形式: bnb 1... (Bech 32) または tbnb 1... (テストネット)
説明: Binance Chain 上の BNB 資産に使用されます。
(3)ポルカドット
パス: m/44'/354'/0'/0/0
コインタイプ: 354'
住所の形式: SS 58 形式に基づき、通常は 1 で始まります。
(4)ソラナ
ルート: m/44'/501'/0'/0'
コインタイプ: 501'
注: Solanaのパスでは、通常の0ではなく、最後に強化された導関数0が使用されていることに注意してください。これは標準的な方法です。
(5)カルダノ
Cardano の導出パスはかなり特殊かつ複雑であり、独自の BIP 44-ADA ソリューションに基づいています。
パス: m/1852'/1815'/0'/0/0
目的: 1852' (Cardano専用に設計)
coin_type: 1815' (ADAが生まれた年)
アドレス形式: addr 1... (Bech 32)
注: これは、Daedalus ウォレットと Yoroi ウォレットで使用される標準パスです。
(6)リップル(XRP)
パス: m/44'/144'/0'/0/0
コインタイプ: 144'
アドレス形式: r... (Base 58)
(7)ライトコイン
ライトコインにも、ビットコインと同様に、複数のアドレスタイプがあります。
レガシー (L...): m/44'/2'/0'/0/0
セグウィット (M...): m/49'/2'/0'/0/0
ネイティブ SegWit (ltc 1 q...): m/84'/2'/0'/0/0
コインタイプ: 2'
(8)ドージコイン
パス: m/44'/3'/0'/0/0
コインタイプ: 3'
アドレス形式: D... (Base 58)
(9)トロン
パス: m/44'/195'/0'/0/0
コインタイプ: 195'
アドレス形式: T... (Base 58)
3. 非標準的または例外的な状況
(1)モネロ
MoneroはBIP 32/BIP 44標準を採用していません。独自の階層的決定論的ウォレットスキームを採用しており、異なる暗号化方式(Ed 25519曲線)と鍵構造を採用しています。
その導出パスは次のようになります: m/44'/128'/0' (ただしこれは標準的な BIP 32 パスではありません)
重要:Bitcoin/Ethereum用のリカバリーフレーズを使用して、Moneroウォレットから直接資金を復元することはできません。また、その逆も同様です。Moneroウォレットを復元するには、Monero独自のリカバリーフレーズとシステムを使用する必要があります。
(2) ハードウェアウォレットのEthereum Classicパス
Ledger などの一部のハードウェア ウォレットでは、アドレス形式は同じですが、Ethereum (ETH) と区別するために、Ethereum Classic (ETC) 用の個別のパスが用意されています。
イーサリアム(ETH):m/44'/60'/0'/0/0
イーサリアムクラシック(ETC):m/44'/61'/0'/0/0
4.3.プライバシー保護と複数アドレスの使用
ビットコインには「チェンジアドレスの変化」と呼ばれる独特な現象があります。むしろ、UTXOモデルに基づくあらゆるブロックチェーンモデルがこの特性を示します。「チェンジアドレスの変化」を理解するには、以下の3つの重要なポイントを理解する必要があります。
1. UTXOモデル(未使用トランザクション出力)
これはビットコインのコアとなる元帳モデルであり、従来の口座残高モデルとは異なります。
基本原則:ビットコインネットワークは「残高」を記録するのではなく、未使用の「小切手」(UTXO)の集合を記録します。これらの小切手は異なる額面を持ち、使用されると破棄され、新しい小切手が作成されます。
取引プロセス:支払いを行う際は、ウォレットから1枚以上の「小切手」(入力)を引き出す必要があります。小切手の合計金額は、支払いたい金額以上である必要があります。この取引により、2枚の新しい「小切手」が作成されます。
受取人用: 額面は支払金額と等しくなります。
自分用に 1 枚(お釣り):額面は(入力した合計金額 - 支払い金額 - 取引手数料)と等しくなります。
重要なポイント:お釣りは本質的に、あなたに支払われる新しい出力(UTXO)です。これは、あなたが他の人に支払う出力とトランザクション構造に違いはありません。
注:ここでは「現金」(通常は固定額で印刷されます)ではなく「小切手」という用語を使用します。これは、小切手の金額がランダムで、小切手ごとに異なる可能性があるためです。これは、ビットコインのUTXOシナリオとより整合しています。多くの場合、「小切手」と「現金」という用語は同じ意味を伝えるために互換的に使用されます。
2. プライバシー保護の設計
固定アドレスを使用するとプライバシーが著しく侵害される可能性があります。
アドレス再利用の問題: すべての UTXO (お釣りを含む) が同じアドレスに戻る場合、ブロックチェーン分析機関または担当者は簡単に次のことを行うことができます。
すべてのトランザクションを接続します。このアドレスの背後にあるすべての資金の流れを把握します。
あなたの資産を推定します: あなたの総収入を明確に把握します。
匿名セットを破壊します。他の人のトランザクションを自分のトランザクションと混在させることは不可能です。
解決策:各取引のお釣りには、全く新しいアドレスを使用してください。これにより、取引のどの出力が販売者に支払われ、どの出力があなたに返却されるお釣りであるかを外部の監視者が特定することが困難になります。これにより、ブロックチェーンの分析の難易度が大幅に向上し、金融プライバシーが保護されます。
3. HDウォレット(階層的決定論的ウォレット)の技術的実装
変更ごとに新しいアドレスと秘密鍵を手動で管理するのは現実的ではありませんが、HD ウォレットはこのプロセスを自動化します。
チェーン構造: HD ウォレットは、シード (ニーモニック) からほぼ無制限のアドレスと秘密鍵を生成できます。
派生パス: 前述したように、標準パス m/44'/0'/0'/1/* は、変更 (変更 = 1) に特に使用されます。
m/44'/0'/0'/0/*: 受信アドレスを生成するために使用されます (外部リンク)。
m/44'/0'/0'/1/*: 変更アドレス (内部チェーン) を生成するために使用されます。
ワークフロー:
ウォレットソフトウェアがトランザクションを構築する際、お釣りが必要な場合は、自動的に内部の「お釣りアドレスプール」(/1/*)からお釣りを受け取ります。次のアドレスは、まだ使用されていないアドレスです。
トランザクションがブロードキャストされ確認されると、新しい変更 UTXO がこの新しいアドレスに保存されます。
次回資金を使用する際、ウォレットは受取チェーンとお釣りチェーンの両方にあるすべてのUTXOをスキャンし、利用可能な「入力」として使用します。手動で管理する必要はありません。ウォレットがすべてを自動的に処理します。
つまり、変更アドレスは[、]、[]の組み合わせの必然的な結果です。これはオプションではなく、ビットコインウォレットの標準的な動作です。UTXOモデルのプライバシー保護要件HDウォレットテクノロジー
ブロックチェーンエクスプローラーを使う:実際のトランザクション(例えば、自分のウォレットのトランザクション)を見つけ、mempool.space または blockstream.info で詳細を確認します。入力と出力を分析し、どれが支払いの出力でどれがお釣りの出力かを推測します(通常、お釣りの出力は送信者の新しいアドレスを指します)。
テスト ウォレットを使用する: テストネット上に新しいウォレットを作成し、送受信操作をいくつか実行して、ウォレット内のアドレス リストがどのように変化するか、UTXO がどのように生成および消費されるかを確認します。
参考文献
1. https://learnmeabitcoin.com/ は、ビットコインについて学ぶのに最適なウェブサイトです。
2. BIP 32: 階層的決定論的ウォレット、2012年2月11日、https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki
3. BIP 39: 決定論的鍵を生成するためのニーモニックコード、2013年9月10日、https://github.com/bitcoin/bips/blob/master/bip-0039.mediawiki
4. BIP 44:決定論的ウォレットのためのマルチアカウント階層、2014年4月24日、https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
5. BIP 43: 決定論的ウォレットの目的フィールド、2014年4月24日、https://github.com/bitcoin/bips/blob/master/bip-0043.mediawiki
6. SLIP-0044: BIP-0044に登録されたコインの種類、2014年7月9日、https://github.com/satoshilabs/slips/blob/master/slip-0044.md
7. BIP 11:M-of-N標準トランザクション、2011年10月18日、https://github.com/bitcoin/bips/blob/master/bip-0011.mediawiki
8. BIP 13: pay-to-script-hash のアドレスフォーマット、2011年10月18日、https://github.com/bitcoin/bips/blob/master/bip-0013.mediawiki
9. BIP 16: スクリプトハッシュへの支払い、2012年1月3日、https://github.com/bitcoin/bips/blob/master/bip-0016.mediawiki
10. BIP 49:P 2 WPKHネスト型P 2 SHベースアカウントの導出スキーム、2016年5月19日 https://github.com/bitcoin/bips/blob/master/bip-0049.mediawiki
11. BIP 84:P 2 WPKHベースのアカウントの導出スキーム、2017年12月28日、https://github.com/bitcoin/bips/blob/master/bip-0084.mediawiki
12. BIP 86: 単一鍵P 2 TR出力の鍵導出、2021年6月22日、https://github.com/bitcoin/bips/blob/master/bip-0086.mediawiki
13. BIP 173: ネイティブ v0-16 ウィットネス出力の Base 32 アドレス形式、2017-03-20、https://github.com/Roasbeef/bips/blob/bip-tap/bip-0173.mediawiki
14. BIP 350: Bech 32 m における P 2 WPKH と P 2 WSH のアドレス、2020年12月16日、https://github.com/bitcoin/bips/blob/master/bip-0350.mediawiki
15. BIP 141: 分離された証人、2020年12月16日、https://github.com/bitcoin/bips/blob/master/bip-0141.mediawiki
- 核心观点:详解比特币地址生成原理与协议演进。
- 关键要素:
- 非对称加密与哈希算法是基础。
- BIP协议规范地址生成与派生。
- 地址类型从P2PKH演进至P2TR。
- 市场影响:提升钱包安全与交易效率。
- 时效性标注:长期影响。
