跳转到正文
buybitcoinsmart

术语表 /地址与密钥

公钥

公钥是什么?
公钥是 secp256k1 曲线上由您的私钥推导出的点,可以安全公开,也是您花费比特币时用来验证签名的值。

将私钥与曲线上的一个固定点相乘即得到公钥,目前没有已知方法可以逆转这一步。压缩公钥占33字节,Taproot 将其进一步精简为 BIP-340定义的32字节 x-only 形式。作为用户,您很少会见到公钥,因为大多数地址只公布公钥的哈希,直到这些币最终被转出时才会暴露公钥本身。

运作方式

公钥产生于一条特定的曲线,所有工作都由它的算术运算完成。比特币使用 secp256k1,其方程为 y 的平方等于 x 的立方加7,定义在一个大素数域上,并配有一个约定的起点,称为生成元。将该生成元与自身相加,次数由私钥决定,得到曲线上的另一个点,这个点就是公钥。这一运算在一个方向上很快,而以目前已知的所有技术,反向运算在实际中无法完成,这正是比特币所有权的全部基础。

实践中会出现三种编码。最初的未压缩形式使用65字节,在0x04 前缀之后写出两个坐标。压缩形式只保留 x 坐标和一个奇偶字节,共33字节,十多年来一直是默认格式。Taproot 更进一步,采用恰好32字节的 x-only 公钥,省去奇偶字节,因为 BIP-340已经固定了相应的约定。

公钥在链上的出现位置取决于输出类型。传统输出或 SegWit 版本0的输出锁定的是公钥的20字节哈希,因此在这些币被花费之前,链上只显示该哈希,花费时花费方必须披露与该哈希对应的公钥。Taproot 输出则不同:32字节的输出公钥就在地址本身之中,从资金到账的那一刻起即可见。

购买比特币时为何需要了解公钥

有两种实际情形会让普通买家接触到公钥,而且两者都容易出错。

第一种是证明某个地址属于您。根据欧盟资金转移条例,交易所在向自托管地址发送超过1,000欧元之前,必须核实该地址确实属于其客户,本站国家指南所涵盖的其他几个司法管辖区也适用类似的核查。标准的证明方式是签名消息:您的钱包用该地址对应的密钥对一条质询签名,交易所再用公钥验证。没有任何机密信息离开您的设备,因此可以放心配合这类请求,这与索要密钥本身的请求不同。

第二种是扩展公钥,即您的钱包可以导出的 xpub。xpub 不是花费凭证,交出 xpub 不会直接让您损失比特币。但它会交出您的财务历史:持有它的任何人都能生成该钱包过去和未来将使用的每一个地址,并读取这些地址关联的余额和每一笔交易。投资组合追踪工具、税务工具和会计人员经常索要 xpub。只有在您愿意交出一份终身银行对账单的情况下才提供 xpub,如果不愿意,请使用单独的账户或钱包。

追踪一把密钥上链的过程

以采用标准原生 SegWit 路径的钱包为例,路径为 m/84'/0'/0'/0/0。该路径上的密钥是33字节的压缩公钥。钱包先用 SHA-256再用 RIPEMD-160对其做哈希,得到20字节,并将这些字节编码为 bc1q 地址。此后发送到该地址的所有资金都被锁定在一个哈希上,而网络从未见过这把公钥。

当您花费时,见证字段包含两项内容:一个签名和33字节的公钥。每个节点先对公钥做哈希,检查结果是否与该输出要求的20字节一致,再用公钥验证签名。只有两者都成立,这笔花费才有效。从该区块起,这把公钥即为公开信息,因此不要把余额继续留在已经花费过的地址上。

公钥 vs 私钥

私钥是随机选取的,公钥由私钥计算得出,绝不会反过来。这种不对称决定了两者的处理方式:公开公钥是常规操作,不会让您付出任何代价,而公开私钥则会立即且不可逆地交出这些比特币。备份保护的是私钥一侧,因为公钥总能在极短时间内由私钥重新计算出来。验证使用的是公钥一侧,所以陌生人和节点无需被托付任何东西,就能核验您的签名。

请勿混淆

常见问题

分享您的公钥安全吗?

安全。公钥无法反推出私钥,而且每次您花费比特币时,公钥本来就会公布在区块链上。分享公钥的代价在于隐私而非安全,因为它会把您与其所控制的比特币联系起来。

公钥和您的比特币地址是一回事吗?

不是。对于传统地址和原生 SegWit 输出,地址包含的是公钥的20字节哈希,而不是公钥本身。Taproot 地址是例外:它们直接嵌入32字节的公钥。

如果别人拥有您的 xpub,能盗走您的比特币吗?

不能,扩展公钥无法签署任何内容。但持有者可以据此生成您的所有地址,并查看您的全部余额和交易历史,因此请将其视为敏感的财务信息,而不是机密凭证。

接着阅读

相关术语

地址与密钥中的更多术语

阅读本页英文版