xpubとは:ビットコインウォレットの公開鍵からわかること
xpubがあれば、ビットコインのアカウントのすべてのアドレスと、その全履歴を見つけられますが、送金はできません。xpubでわかること、そのリスク、渡してよい相手を解説します。
xpub(拡張公開鍵)は、ビットコインウォレットのアカウントの公開鍵で、そのアカウントのアドレスはすべてここから導出されます。xpubを持つ人は、そのアカウントが受け取った支払いと送った支払いをすべて見られますが、何も送金できません。
xpubに含まれるもの
BIP32という規格は、階層的決定性ウォレットを定めています。ひとつのシードから、鍵のツリー全体が生まれます。拡張鍵は、鍵にチェーンコード(chain code)を加えたもので、これを使って子鍵を計算します。BIP32によると、拡張公開鍵がわかれば、強化されていない(non-hardened)子公開鍵をすべて再構築できます。
ウォレットは、これらの鍵をBIP44のパスに沿って整理します:m / purpose' / coin_type' / account' / change / address_index。ウォレットに表示されるxpubは、account'レベルの鍵です。xpubはふたつのアドレスチェーンをカバーします。0は受取用アドレス、1はおつり用アドレスで、おつり用アドレスは自分の送金で戻ってくるおつりを受け取ります。
xpub、ypub、zpub
プレフィックスを見れば、そのアカウントが使うアドレスの種類がわかります。
| プレフィックス | 規格 | 最初のアカウントのパス | アドレス |
|---|---|---|---|
xpub | BIP44 | m/44'/0'/0' | レガシーアドレス(1で始まる) |
ypub | BIP49 | m/49'/0'/0' | ネステッドSegWit(3で始まる) |
zpub | BIP84 | m/84'/0'/0' | ネイティブSegWit(bc1qで始まる) |
いずれも同じ種類の鍵です。違うのはバージョンバイトだけで、そのため先頭の文字が変わります。
xpubでわかること
- アカウントのすべてのアドレス:過去のものも将来のものも、ひとつずつ際限なく導出できます。
- 全履歴:ブロックチェーンは公開されているため、すべての受け取り、すべての送金、すべての金額がわかります。
- アカウントの残高:いつでもわかります。
- 送金はできない:秘密鍵がなければ、どのトランザクションにも署名できません。
BIP32自体がこの使い方を挙げています。アカウントの拡張公開鍵を監査人に渡せば、どの秘密鍵にもアクセスさせずに、入ってくる支払いと出ていく支払いをすべて見せられます。あなたのxpubを持つ人は、この監査人と同じものを永久に見られます。xpubは取り消せないからです。
知っておくべきリスク
xpubだけでは送金できません。しかしBIP32は警告しています。拡張公開鍵と、そこから派生した強化されていない秘密鍵のどれかがわかれば、親の拡張秘密鍵がわかるのと同じことになります。つまり、xpubと、アドレスのうちひとつの秘密鍵があれば、アカウント全体の資金を送金できてしまいます。
account'レベルは強化されています。そのため、このような流出は該当するアカウントにとどまり、同じシードのほかのアカウントには及びません。エクスポートするのはxpubにして、アドレスの秘密鍵は決してエクスポートせず、リカバリーフレーズは誰にも渡さないでください。
ソフトウェアがアドレスを見つける仕組み
xpubを読み取るソフトウェアは、アドレスを順番に導出し、一度も使われていないアドレスが続いたところで止まります。BIP44はこの上限(ギャップリミット)を20と定めています。使わないアドレスを20個より多く続けて作成した場合、このルールに従うソフトウェアには、その先のアドレスが見えません。
残高を読み取るために、ソフトウェアは次に、サーバーまたはノードにアドレスごとに問い合わせます。するとそのサーバーは、あなたのすべてのアドレスを知り、それらを互いに結びつけられます。これがもうひとつの流出で、xpubそのものではなく、その読み取り方から生じます。
xpubを渡す前に
- 誰が保管するのかを考える:xpubを自社のサーバーに保管するアプリは、保管している限りあなたのアカウントを把握し、そのデータが流出すればアカウントもさらされます。
- ローカルでの読み取りを選ぶ:自分のノードにつないだウォレットや、アドレスを自分の端末で導出するツールなら、xpubを誰にも預けずに済みます。
- 用途ごとにアカウントを分ける:別のアカウント(次の
account')には別のxpubがあり、ほかのアカウントについては何も明かしません。
CentraFINがxpubを読み取る方法
CentraFINは、あなたのxpubをあなたの端末で読み取ります。ブラウザがアドレスを導出し、エンドツーエンドで暗号化された接続で残高を読み取り、すべてをブラウザ自身が暗号化する保管庫に保存します。CentraFINのサーバーは、xpubもアドレスも残高も一切目にしません。各アドレスは、ランダムに選ばれた同じノードから常に読み取られるため、アカウント全体を見られるノードはありません。詳しくはビットコインのページをご覧ください。
出典
よくある質問
xpubでビットコインを盗むことはできますか?
xpubだけではできません。署名ができないからです。アカウントのアドレスのひとつの秘密鍵も加われば、できてしまいます。アカウント全体が対象になります。
xpubだけで残高を見られますか?
はい。xpubからアカウントのすべてのアドレスがわかり、ブロックチェーンからそれらの残高と取引がわかります。
xpubが流出したらどうすればよいですか?
xpubは取り消せません。持っている人は、そのアカウントをずっと見られます。今後は、xpubを一度も共有していない新しいアカウントを使ってください。ただし、古いアカウントからの移動そのものは見えたままです。
xpub、ypub、zpubの違いは何ですか?
アカウントのアドレスの種類です。xpubは1で始まるアドレス、ypubは3で始まるアドレス(ネステッドSegWit)、zpubはbc1qで始まるアドレス(ネイティブSegWit)です。
資産の主導権を、あなたの手に
パスワード不要。1分でアカウントの準備が整います。