一文读懂比特币的私钥、公钥、地址到底怎么来的

·

关键词:比特币私钥生成、公钥与地址关系、Base58Check 编码、椭圆曲线加密、RIPEMD-160、双哈希校验、压缩密钥

比特币为何需要私钥、公钥和地址

在比特币的世界里,真正“持币”的并不是你手机里的 App,而是由 私钥 控制的链上余额。
为了方便又安全地转移价值,比特币协议把密钥体系拆解为三层:

  1. 私钥 Private Key
    随机生成的 256 bit 整数,谁掌握它谁就拥有对应地址的比特币。
  2. 公钥 Public Key
    通过椭圆曲线算法从私钥派生,用于打包进交易接收和验证数字签名。
  3. 地址 Address
    对公钥再做两次哈希与 Base58Check 编码后的可打印字符串,方便抄写、扫码、张贴。

这种设计压缩了视觉长度,降低了输入错误概率,同时保证了加密强度。


完整流程拆解:从私钥 0 到可用地址

Step 1 产生私钥

  1. 使用高质量 CSPRNG(密码学安全伪随机数发生器)生成 32 字节(256 bit) k
  2. 直接输出 16 进制格式即为私钥;
    ‑ 示例:8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3
  3. 补充:私钥范围必须在 1 到 n-1 之间(n 为 secp256k1 的模数),否则会回环校验失败。

⚠️ 想看私钥、公钥、区块链数据一网打尽的实时监控?👉 立即体验可视化区块浏览器,输入地址追踪最新动向!

Step 2 计算公钥

采用 secp256k1 椭圆曲线,公式:

K = k × G

输出有两种:

Step 3 制作地址

  1. RIPEMD-160(SHA-256(K)) → 先得 160 bit 公钥哈希
  2. 前加版本前缀 00(主网)、尾部追加 ∗4 checksum*(双次 SHA-256 → 取前 32 bit)。
  3. 整体使用 Base58Check 编码 → 最终呈现 1xxxxx… 格式的 比特币地址

完整 7 步走:

私钥 k → 公钥 K → SHA-256 → RIPEMD-160 → 加0x00 → 两次 SHA-256 → 取校验码 → 拼接 → Base58Encode

为何 Base58Check 取代 Raw Hex

编码示例对比:

类型Hex 形态Base58Check 形态
私钥 WIF0C28FC...5KWKSRnmzxCjUP1NKR4dNyyH...
主网地址1B2...18Z6R1VF7Do8RTHneeGzdVdbg...

压缩与非压缩之争

👉 想直观对比压缩前后的地址差异?直接打开比特币地址生成器在线工具,一键转码秒看结果!](https://okxdog.com/)


实战演练:完整生成 3 件套

输入随机私钥(32 字节):

e9873d79c6d87dc0fb6aa0007f6d0e6bd9d8bfec9d6b9e7d879f0f5e4e3e2a
  1. 非压缩公钥(65 字节):
    04 4E...
  2. SHA-256: e774…
  3. RIPEMD-160: d0d5…
  4. 拼接前缀+校验 → 最终地址:
    1JKdJRVGkKgcfjV6Lsb7CZgYpMSdQK8qfXS

FAQ:关于比特币密钥大家都关心的 6 件事

  1. 问:私钥丢了,比特币还能找回吗?
    答:区块链上没有任何找回机制;记得备份多种介质(钢板、硬件钱包、多重签名)。
  2. 问: 有人用我的公钥,万一破解了我的私钥怎么办?
    答: 目前具备足够熵的 256 bit 私钥对抗暴力至少 2²⁵⁶ 次运算,现实不可行。
  3. 问: 为什么有时地址以 3 或 bc1 开头?
    答: 3 开头为 P2SH 多重脚本地址,bc1 开头为 SegWit 原生地址;但底层均离不开私钥、公钥推导思路。
  4. 问: 用开源在线工具生成密钥安全吗?
    答: 浏览器离线状态 + 断网刷新可有效避免私钥泄露;务必清除缓存。
  5. 问: 安卓手机钱包为何自动生成压缩地址?
    答: SegWit 默认采用压缩公钥,节省块空间、降低手续费。
  6. 问: 不同钱包给同一私钥生成的地址不同?
    答: 生成压缩/非压缩公钥的 choice 不同 → 哈希不同 → 地址不同;但链上都能用,属于正常。

小结:牢记 3 条黄金守则

  1. 私钥永远离线保存,杜绝拍照!
  2. 小额热钱包,大额硬件钱包 + 助记词。
  3. 转账前二次校验地址,首尾各 4 位核对无误。

现在你已经知道了整个安全链条:
随机种子 → 私钥 → 椭圆曲线 → 公钥 → 哈希与校验 → 最终地址

下次刷到一串以 “1/3/bc1” 开头的长字符串,你就能一眼看明白它背后隐藏的密钥世界。