xpub 是什么:比特币钱包的公钥会暴露哪些信息

有了 xpub,就能找到一个比特币账户的所有地址,从而看到它的全部历史,但无法花费资金。本文介绍 xpub 会暴露什么、有什么风险,以及可以交给谁。

xpub(扩展公钥)是比特币钱包中一个账户的公钥,该账户的所有地址都由它推导而来:持有它的人能看到这个账户收到和发出的每一笔付款,但无法花费任何资金。

xpub 包含什么

BIP32 标准描述了分层确定性钱包:一个种子就能生成一整棵密钥树。扩展密钥在密钥之外加上一个链码(chain code),用来计算其子密钥。根据 BIP32,知道一个扩展公钥,就能重建它所有非强化(non-hardened)的子公钥。

钱包按照 BIP44 的路径来组织这些密钥:m / purpose' / coin_type' / account' / change / address_index。钱包显示的 xpub 是 account' 层级的公钥。它覆盖两条地址链:0 为收款地址,1 为找零地址,找零地址接收您自己付款时找回的零钱。

xpub、ypub 还是 zpub

前缀表明账户使用哪种地址类型:

前缀标准第一个账户的路径地址
xpubBIP44m/44'/0'/0'旧式地址,以 1 开头
ypubBIP49m/49'/0'/0'嵌套 SegWit,以 3 开头
zpubBIP84m/84'/0'/0'原生 SegWit,以 bc1q 开头

三者是同一种密钥:只有版本字节不同,因此开头的字母也不同。

xpub 会暴露什么

  • 账户的所有地址,过去的和未来的:可以逐一推导,没有上限。
  • 全部历史:每一笔收款、每一笔付款、每一笔金额,因为区块链是公开的。
  • 账户余额,随时可见。
  • 无法花费:没有私钥,就无法签署任何交易。

BIP32 本身就给出了这种用法:把一个账户的扩展公钥交给审计人员,就能让对方看到所有转入和转出的付款,而无法接触任何私钥。持有您 xpub 的人就拥有这位审计人员的视角,而且是永久的:xpub 无法撤销。

需要了解的风险

仅凭 xpub 无法花费资金。但 BIP32 提醒:知道一个扩展公钥,再加上由它派生的任意一个非强化私钥,就等于知道了父级扩展私钥。换句话说,您的 xpub 加上您任意一个地址的私钥,就足以花光整个账户。

account' 层级是强化的:这样的泄露只限于相关账户,不会波及同一种子下的其他账户。因此,请导出 xpub,绝不要导出某个地址的私钥,也绝不要交出您的助记词。

软件如何找到地址

读取 xpub 的软件会按顺序推导地址,遇到一串从未使用过的地址后就停止:BIP44 将这个上限(gap limit)定为 20。如果您连续创建了超过 20 个从未使用的地址,遵循这条规则的软件将看不到之后的地址。

随后,为了读取余额,软件会逐个地址查询服务器或节点。这台服务器由此得知您的所有地址,并能把它们关联起来:这是另一种泄露,它并非来自 xpub 本身,而是来自读取它的方式。

交出 xpub 之前

  • 想想谁会保存它:把您的 xpub 保存在自家服务器上的应用,在保存期间都了解您的账户,一旦其数据泄露,您的账户也会暴露。
  • 优先在本地读取:连接您自己节点的钱包,或在您设备上推导地址的工具,不会把 xpub 交给任何人。
  • 一种用途一个账户:另一个账户(下一个 account')有另一个 xpub,它不会透露其他账户的任何信息。

CentraFIN 如何读取您的 xpub

CentraFIN 在您的设备上读取 xpub:您的浏览器推导地址,通过端到端加密的连接读取余额,并把这一切保存在由浏览器自己加密的保险库中。CentraFIN 的服务器永远看不到您的 xpub、任何地址或余额。每个地址始终从同一个随机选定的节点读取,因此没有任何节点能看到整个账户。详情请见比特币页面。

来源

常见问题

有人能用 xpub 偷走比特币吗?

仅凭 xpub 不能:它无法签名。如果再加上该账户某个地址的私钥,就可以:整个账户都会被偷走。

只有 xpub 就能看到我的余额吗?

能。它给出账户的所有地址,而区块链给出这些地址的余额和交易。

如果我的 xpub 泄露了怎么办?

xpub 无法撤销:持有它的人将一直能看到这个账户。今后,请使用一个 xpub 从未分享过的新账户。不过,从旧账户转出的那笔转账仍然可见。

xpub、ypub 和 zpub 有什么区别?

区别在于账户的地址类型:xpub 对应以 1 开头的地址,ypub 对应以 3 开头的地址(嵌套 SegWit),zpub 对应以 bc1q 开头的地址(原生 SegWit)。

掌控您的资产

一分钟即可创建账户,无需密码。