比特币私钥、公钥、地址:256位随机数如何一路变成收款码 图 1
比特币私钥、公钥、地址:256位随机数如何一路变成收款码 · 图 1

先把整条链路摆出来

比特币的账户体系不是从”给我一个地址”开始的,而是从一串随机数开始。整个体系可以压缩成一句话:一个 256 位的随机数当私钥,私钥乘上曲线基点得到公钥,公钥经过哈希和编码变成地址。每一环都是单向的——你可以从私钥算出公钥,从公钥算出地址,但反过来在计算上不可行。理解这条箭头方向,比记住任何一段地址样例都重要,因为钱包的所有安全边界都是从”箭头只能顺着走”推出来的。

比特币私钥、公钥、地址:256位随机数如何一路变成收款码 图 2
比特币私钥、公钥、地址:256位随机数如何一路变成收款码 · 图 2

第一环:256 位随机数

私钥本质上就是一个不超过曲线阶 n 的整数。生成它的正确方式是从密码学安全的随机源取 32 字节,而不是”想一句话让它变哈希”。比特币社区历史上两次著名的丢币事故,问题都出在随机数环节:一次是早期安卓钱包用了可预测的随机源,一次是批量生成的私钥彼此不独立。这两类事故的共同教训是:私钥的安全不来自格式,而来自熵。只要生成那一刻的随机性有瑕疵,后面所有环节再规范也救不回来。

顺带澄清一个常见误解:“256 位”不等于”2 的 256 次方个可用私钥”。secp256k1 曲线的阶 n 略小于 2 的 256 次方,超出 n 的整数会被取模或者拒绝,但这点缩水不影响安全性量级。

第二环:从私钥到公钥

公钥是私钥与一个固定基点 G 的椭圆曲线倍乘结果。早期比特币用 65 字节非压缩格式记录公钥(04 前缀加两个 32 字节坐标),后来引入 33 字节压缩格式,用 02 或 03 前缀标记 Y 坐标的奇偶性,因为 X 坐标加上奇偶信息就足够唯一确定一个点。到 2021 年随 Taproot 一起启用的 BIP-340 又往前走了一步:只记录 X 坐标的”X-only”格式,公钥缩到 32 字节。这不是为了省空间而牺牲安全——规范里论证过,攻击 X-only 公钥最多只比攻击完整公钥快一个常数步骤。压缩与 X-only 只是”同一个点换一种写法”,钱包内部推导时都能互相还原。

第三环:地址只是公钥的一件外衣

地址不是密钥体系里新的一层,而是公钥(或脚本)经过哈希与编码后的展示形式。同一把密钥可以穿很多件外衣:对公钥做 RIPEMD-160 再套 Base58Check 是老的 P2PKH 地址;把公钥塞进见证程序再用 Bech32 编码(BIP-173 定义)得到 bc1q 开头的隔离见证地址;Taproot 输出用 BIP-350 引入的 Bech32m 校验和编码成 bc1p 开头。外衣不同,链上花费方式不同,但底下那把私钥从头到尾没换过。这也是为什么同一套种子既能派生老地址也能派生新地址——变的只是”从公钥到地址”这一步的加工函数。

编码环节自带校验和。Base58Check 末尾四个字符、Bech32 的校验算法,都能在抄错一位时报警。但校验和只保证”不是格式错误”,不保证”地址属于你想转的人”——地址被恶意软件替换、或从可信渠道拿到但渠道本身被投毒时,校验和完全静默。

把三环接起来看风险

第一环出问题,币被陌生人算出私钥拿走;第二环不会出问题,除非你误把中间量(比如扩展公钥 xpub)当成”可花的凭据”到处发;第三环的风险在人与机器的交界处——剪贴板、二维码、域名。三段的防护手段完全不同:第一段用正规钱包软件并要求它用系统级随机源,第二段靠理解而不是操作,第三段靠”大额转账用第二渠道回读地址前缀和后缀”这种笨办法。

还有一类问题卡在环与环的缝里:HD 钱包从一个种子按 BIP-32 派生千千万万把私钥,每把私钥各自走完整的三环。派生路径写错一段(比如把用于 P2WPKH 的 m/84h 路径误当成 m/44h 传统路径去扫),得到的是一套”看起来合法、里面永远没钱”的地址。很多”我恢复钱包后钱不见了”的案例,其实私钥体系完好无损,只是第三步的外衣套错了层。遇到这种情况先核对派生路径与地址前缀是否匹配,再下结论。

一句收尾

私钥是秘密,公钥是签名用的公开凭据,地址是给人看、给机器校验的编码。把这三层分开记,绝大多数”地址安全""公钥泄露要紧吗”的困惑都会自动消解。涉及真实资产的操作建议先在小额上演练。本文只做机制说明,不构成任何投资建议。