比特币私钥与公钥:从 256 位随机数到地址 图 1
比特币私钥与公钥:从 256 位随机数到地址 · 图 1

一条单向链条:私钥 → 公钥 → 地址

比特币不认用户名、不认设备,只认密码学证明。你能证明你拥有某把私钥,链上就承认你拥有对应地址上的资产。整条链路是单向的:

私钥(256 位随机数)→ 公钥(椭圆曲线点)→ 公钥哈希 → 地址

每一步都只能正向计算,无法从结果反推输入。下面拆开看。

私钥:一个 256 位随机数

私钥本质上是一个 1 到 n-1 之间的大整数(n 是 secp256k1 曲线的阶),写成十六进制是 32 字节。它对人的要求只有三条:

  • 足够随机:必须用钱包的安全随机数生成器产生。自己手打、生日、短语直接哈希,都是可被穷举的弱密钥。
  • 足够保密:任何看到私钥的人都能完整控制对应资产,没有“冻结”“挂失”机制。
  • 足够多地备份:私钥(或以助记词形式存在的种子)丢失 = 资产永久丢失。

现代钱包通常不让你直接管理裸私钥,而是从 BIP-39 助记词派生出一棵密钥树,每把私钥对应一个地址,原理可参考去中心化钱包怎么创建?助记词、私钥和安全注意事项

公钥:私钥 × 基点 G

比特币使用 secp256k1 椭圆曲线。公钥 = 私钥(整数)× 曲线的基点 G,结果是一个曲线上的点。这个乘法有两个关键性质:

  • 正算容易:给定私钥算公钥只需几百次点加/点倍运算,毫秒级。
  • 反算不可行:给定公钥求私钥,就是椭圆曲线离散对数问题,目前已知最好的经典算法复杂度约 2^128,远超全球算力总和的可执行范围。这就是整条链安全的地基。

公钥有两种序列化:未压缩(65 字节,xy 坐标)和压缩(33 字节,x 坐标 + y 奇偶标志)。Taproot 地址只使用压缩公钥。

地址:公钥的哈希

地址不是直接暴露公钥,而是对公钥做哈希并加上版本前缀与校验和,不同地址类型用不同哈希链:

  • 1 开头(P2PKH):RIPEMD160(SHA256(公钥)),前缀 0x00;
  • 3 开头(P2SH):同样 20 字节哈希,前缀 0x05;
  • bc1q 开头(P2WPKH,SegWit v0):对公钥哈希直接 Base32 编码,见证版本 0x00;
  • bc1p 开头(Taproot,P2TR):哈希的是 Taproot 输出公钥(由内部公钥与脚本树承诺叠加而来),见证版本 0x01,配合 Schnorr 签名(BIP-340/341)。

哈希的作用是让地址无法反推出公钥,公钥无法反推出私钥——两层单向锁。各类型地址的区别与兼容性见比特币地址类型是什么?

签名:用私钥“证明”而不“交出”私钥

花费某地址的 UTXO 时,交易里不写私钥,而是写一个签名(ECDSA 或 Schnorr):私钥对交易摘要做签名,验证方用对应公钥验证。签名只证明“持私钥者同意这笔交易”,不泄露私钥本身。这也是为什么同一地址可以反复收款,而每次花费都安全。

常见误区

  • “公钥泄露没事”:P2PKH/P2WPKH 地址在从未花费前公钥确实未广播,但一旦某地址发起过交易,公钥就永久公开在链上。此时私钥的安全性完全依赖离散对数问题,没有额外隐藏空间。长期大额资产建议换新地址。
  • “私钥短一点记不住就改一下”:私钥没有“强度等级”之外的修改概念,改了就是一串全新随机数,旧资产不会跟过来。
  • “助记词 = 私钥”:助记词是种子(seed),通过 BIP-32 派生出成百上千把私钥;泄露助记词 = 泄露全部私钥。

小结

私钥是随机数,公钥是椭圆曲线乘法,地址是公钥的哈希——三段单向运算构成了比特币所有权的完整逻辑。理解这条链,才能理解“Not your keys, not your coins”为什么不是口号而是数学事实。本文为密码学机制说明,不构成投资建议。