Derivation Path は、出発となる鍵から特定の鍵を導出するための正確な手順です。コンピューターのフォルダーを想像してください。ドライブが正しくても、開くフォルダーを間違えると目的の場所には届きません。ただしウォレットの鍵は保存ファイルから探すのではなく、数学的に計算します。同じ出発データと同じパスなら同じ結果になります。別のパスは、同じウォレットの別の部分へつながることがあります。支払先アドレスでもパスワードでもなく、バックアップの代わりにもなりません。
アンナがウォレットを復元していると、これまで意識したことのないパスを求められました。ウォレットは、ビットコインを受け取ったり送ったりするためのアプリや機器です。m/0/7 は複雑に見えても、順に読めます。m はマスター秘密ノードで、そこから子鍵 0 を、さらにそこから子鍵 7 を導出します。ここでのノードは鍵の木の中の位置で、Bitcoin ネットワークのコンピューターではありません。数字はインデックス、つまり順番であり、金額や取引番号ではありません。BIP 32 は拡張鍵を使い、鍵そのものに加えて、下位の鍵を導出するための追加データ chain code を含めます。したがって出発鍵なしにパスだけを書いても、支払いには署名できません。 [1] [10]
m/84'/0'/0'/0/7 を見てみましょう。m の次の部分は、ネイティブ SegWit の BIP 84 という取り決めを示します。これはアドレスや支出を構成する方法です。その後は Bitcoin mainnet、実際のビットコインが流通するメインネット、アカウント 0、外部受取分岐 0、インデックス 7 と続きます。ゼロから数えるので、八番目のアドレス位置です。アカウントは資金のグループを分け、分岐はアドレスの用途を示します。BIP 44 の構成で分岐 1 は自分のお釣り用で、支払った後も送信者に残る金額を受け取ります。最初の三段にはアポストロフィがあり hardened、後の二段は通常の導出です。この印は何を変えるのでしょうか。 [2] [5]
秘密鍵は、ウォレットが資金を使うことを承認するデジタル署名を作るための秘密の数値です。Hardened は親の秘密鍵が必要な導出方法を表します。通常の段なら、拡張公開鍵 xpub から公開の子鍵を導出できます。適切なスクリプト形式と組み合わせれば、支払いに署名する権限なしでアドレスを構成できます。しかし xpub だけでは hardened の段は越えられません。BIP 380 では 0' と 0h は同じ意味で、通常の 0 ではありません。技術的には、BIP 32 は 32 ビットのインデックスを通常の 0 から 2^31−1 と hardened の 2^31 から 2^32−1 に分けます。印を付けたゼロはインデックス 2^31 になります。書き写すときに印を省くと、見た目だけでなく計算そのものが変わります。 [1] [7] [10]
BIP 43 は最初の hardened 階層を purpose と呼び、構造の用途を表します。共通の値があると、ウォレットはその分岐の通常の使い方を判断できます。対応を確認すると、44' は公開鍵のハッシュで守る従来の P2PKH、49' は互換性のために古い形式で包んだ SegWit の P2SH-P2WPKH、84' はネイティブ P2WPKH、86' は一つの内部鍵を使う Taproot の single-key P2TR です。いずれもお金を使える条件の組み立て方です。数字だけでパスが対応するスクリプトに変わったり、ネットワークの合意で強制されたりはしません。ソフトウェアが正しい出力を実際に構成する必要があります。すべてのウォレットがこの取り決めを使うわけでもありません。 [3] [2] [4] [5] [6]
アンナは入金を見るために、ウォレット全体ではなく一つのアカウントの xpub だけを接続することもあります。それが m/84'/0'/0' から来ているなら、すでにアカウントの階層にいます。前の例へ進むには相対的な末尾 /0/7 だけが残っています。ルートからの全パスを再び付けると、違う場所から追加の導出を始めることになりますし、その hardened の段は xpub では実行できません。エクスポートした拡張鍵には木の中の深さと、親を識別する短い印 fingerprint が入っていますが、過去の全手順は入っていません。そのため、失われた元のパスを xpub だけから常に読み出せるとは限りません。 [1] [7]
Descriptor は鍵と支出条件を記述し、ソフトウェアが監視する出力を構成できるようにします。BIP 380 では鍵の前の角括弧に由来の fingerprint とパスを記せます。そこに書かれた手順は実行済みです。鍵の後ろの接尾辞は今後の導出を指し、アスタリスク * は子孫の列を表せます。Fingerprint は四バイトなので衝突し得ます。異なる鍵でも短い識別印が同じになる場合があるのです。本人確認の証拠でも鍵の代わりでもありません。Bitcoin Core 29.0 はノードのプログラム用インターフェース RPC から deriveaddresses を提供します。descriptor と必要に応じて指定する範囲からアドレスを計算しますが、この計算だけでは残高を調べたり資金を送ったりしません。 [7] [1] [9]
出発データがなければ、パスだけではあなたの鍵を作れません。xpub の共有は別です。受け取った人は利用できる分岐の公開鍵を導出し、適切なスクリプト形式と組み合わせてアドレスを追跡できます。支出の権限は得なくても、プライバシーを損なう可能性があります。BIP 32 は見落としやすい危険も説明します。親の xpub と、通常の段だけで到達できる子孫の漏えいした秘密鍵が組み合わさると、親の拡張秘密鍵を突き止められる場合があります。Hardened の境界は、この特定の親へ戻る経路を遮断します。しかし漏れた鍵を無効にしたり、その鍵で使える資金を救ったりはしません。 [1]
復元に戻りましょう。Seed Phrase はバックアップの単語列です。BIP 39 では単語列と任意の passphrase から、鍵生成の出発点となる秘密情報 seed を作ります。Passphrase は追加の秘密の文字列で、通常のアプリのパスワードではありません。seed が違えば同じパスからも別の鍵ができます。ネットワーク、アカウント、分岐、スクリプト形式も一致する必要があります。さらに十分なアドレスと履歴を調べなければなりません。Gap Limit は未使用アドレスが連続すると探索を止めます。したがって残高ゼロだけでは鍵の喪失を証明できません。アンナは既知の受取アドレスや過去の支払いと照合できます。ソフトウェアがパスを受け付けても、それを処理できるというだけで、元のウォレット全体を見つけたとは限りません。 [8] [2] [7]
理解を深めるには、この項目とあわせて次もお読みください HD Wallet, Extended Public Key (xpub), Gap Limit, Output Descriptor, BIP 39, Seed Phrase. 次の項目からも参照されています HD Wallet, Watch-only Wallet, Change Address, Extended Public Key (xpub).