490 / 736FP

Wallet Fingerprint

ウォレットのマスター鍵の短い指紋

ウォレットを復元したら、以前と同じ鍵を使っているか確かめたいものです。Wallet Fingerprint は、その確認に役立つ短い識別子です。通常は BIP32 に基づくウォレットのマスター公開鍵を指します。比較の手がかりであって、バックアップの代わりでも、ウォレット全体が同一だと断定する証拠でもありません。

BIP32 のフィンガープリントは、圧縮公開鍵に対する HASH160 の最初の 4 バイトです。HASH160 は SHA-256 の後に RIPEMD-160 を適用する処理で、どちらもデータから数値的なダイジェストを計算する関数です。得られる 32 ビットは通常、数字と英字を使う 8 桁の十六進数で表示されます。さらに鍵を導出するための追加情報である chain code は、この短い識別子の計算に含まれません。

複数のウォレットの記録を見分ける場面を考えてみましょう。フィンガープリントは、厳密に定められた形式の公開鍵から計算した短いラベルです。バックアップ単語や秘密鍵を直接ハッシュしたものではありません。このラベルだけでは受取アドレスにもならず、支払いに署名したり鍵を復元したりもできません。書き留めても、実際にウォレットを復元できるバックアップの代わりにはならないのです。 [1]

BIP32 は鍵の木を作ります。共通の幹から枝が分かれるように、マスター鍵からさらに鍵を導出します。拡張公開鍵 xpub や拡張秘密鍵 xprv の記録には、一つ上の階層にある親鍵のフィンガープリントが入っています。マスター鍵には親がないため、その欄は 00000000 です。ただし、これはマスター鍵自身のフィンガープリントではありません。アプリはマスター鍵自身の値を表示することもあるので、比較する前にどの欄を読んでいるか確認しましょう。 [1]

公開されている BIP32 テストベクトル 1 のマスター鍵自身のフィンガープリントは 3442193e です。一方、そのマスター xpub の親フィンガープリント欄は 00000000 のままです。矛盾ではありません。一方は鍵自身を、もう一方は存在しない親を表しているからです。テストベクトルとは、プログラムの確認用に公開された入力と期待する結果の組です。誰でも知っているこのデータを、自分の資金を保管するウォレットの基礎にしてはいけません。 [1]

PSBT は、署名装置へ渡せる取引情報のパッケージです。BIP174 に従い、マスター鍵のフィンガープリントと、特定の公開鍵までの手順である導出パスを関連付けます。鍵と支出条件をテキストで記述する Output Descriptor にも、鍵の由来を記録できます。署名装置がお釣りを確認するとき、フィンガープリントの一致だけでは不十分です。他人の出力を自分のものと誤認しないよう、実際の鍵を導出し、鍵と対応する条件を照合する必要があります。 [2] [3]

短い識別子は場所を取りませんが、値の範囲は限られています。32 ビットでは 4294967296 通りしか表せません。そのため、異なる鍵が同じフィンガープリントを持つことがあります。これを衝突といい、BIP32 はソフトウェアにその考慮を明示的に求めています。一致だけでは、すべてのアカウント、導出パス、スクリプトの種類、つまり支出ルールは確認できません。必要な秘密鍵を持っている証明にもなりません。 [1] [3]

まず、同じ種類のフィンガープリントを鍵の木の同じ階層で比較しているか確かめます。異なる値は、鍵の秘密の基礎である seed や、追加パスワードの passphrase が違う手がかりになります。ただし、結論を出す前にマスター欄と親欄の取り違えを除外してください。一致した場合も、既知のアドレス、導出パス、支出ルールを確認します。フィンガープリントは有用な部分チェックですが、適切に保存したバックアップと検証済みの復元手順に代わるものではありません。 [1] [3]

理解を深めるには、この項目とあわせて次もお読みください HD Wallet, PSBT, BIP39 passphrase, Output Descriptor. 次の項目からも参照されています SeedQR.

DOC · 001BIP32 — Key identifiers and serialization仕様 DOC · 002BIP174 — Key origins and change detection仕様 DOC · 003BIP380 — Output Script Descriptors仕様
改訂日: 一次資料を優先 · 投資助言ではありません