深入技术
私钥和地址

私钥和地址

比特币中的私钥是访问和使用某个比特币地址中资金的唯一凭证, 一旦私钥泄露, 资金将会被盗。

公钥是由私钥计算生成的, 计算过程不可逆, 故公钥可以暴露给任何人。

地址是公钥按照特定的算法生成的, 目的为不同类型的 UTXO 创建锁定脚本。例如地址是 P2PKH 类型, 则创建的锁定脚本也是 P2PKH 类型。

私钥

私钥是随机生成的 256 个比特位, 即随机生成 256 个 0 或 1, 一个字节是 8 个比特位, 共 32 个字节。

私钥

随机生成256个比特位
私钥

公钥

公钥由私钥计算而来。私钥乘以椭圆曲线 secp256k1 的基点 G 得到公钥。主要应用在 P2PK 类型的 UTXO

公钥

从私钥计算公钥
私钥
公钥坐标
X
Y
公钥

地址

比特币地址用于接收比特币。并根据地址类型生成不同的锁定脚本。

地址的计算方式有 Base58, Bech32, Bech32m

Base58

Base58 用于生成 P2PKHP2SH 地址。

Base58 地址生成器

从公钥生成 P2PKH 地址
私钥
公钥
Step 1: 公钥哈希
Step 2: 添加版本前缀
Step 3: 计算校验和
Step 4: Base58 编码
  • P2PKH 地址在主网上总是以 1 开头, 测试网上总是以 mn 开头。

  • P2SH 地址在主网上总是以 3 开头, 测试网上总是以 2 开头。

Base58Check

从 Step 2 到 Step 4 这整个过程称作 Base58Check 编码。

相比于单一的 Base58 编码, Base58Check 添加了版本前缀, 可以快速识别不同的地址类型, 另外添加校验和也保证了数据的完整性和安全性。

如果将比特币发送到 P2PKH 地址, 通过 Base58Check 解码, 可计算出 公钥哈希 并创建创建一个 P2PKH 锁定脚本。

Base58 地址格式也用于 P2SH 锁定脚本, 不同的是 P2SH 使用的是脚本哈希

Bech32

Bech32 用于见证版本V0 的地址生成。

Bech32 地址生成器

从公钥生成 P2WPKH 地址
私钥
公钥
Step 1: 公钥哈希
Step 2: 字节分组
Step 2: 添加版本前缀
Step 3: Bech32 编码

当将比特币发送到 P2WPKH 地址, 将从地址中解码出公钥哈希,并创建一个 P2WPKH 锁定脚本。

Bech32 地址格式也用于 P2WSH 锁定脚本,不同的是 P2WSH 使用的是赎回脚本哈希。

P2WPKHP2WSH 地址在主网上总是以 bc1q 开头, 测试网上总是以 tb1q 开头。

Bech32m

Bech32m 用于生成 Taproot 地址。与其他类型的地址不同, Taproot 地址由 Taproot 公钥生成的。

Taproot 公钥是原始公钥的 X 坐标 加上 脚本树的 Tweak 值乘以 Secp256k1 的基点 G 的和 Q=P+tGQ = P + t * G, 其中 P 是原始公钥的 X 坐标, t 是脚本树的 Tweak 值。

Taproot 地址生成器

从公钥生成 P2TR 地址
私钥
压缩公钥
Step 1: X坐标
Step 2: 计算 Taproot 公钥
Step 3: 字节分组
Step 4: 添加版本前缀
Step 5: Bech32m 编码

Taproot 地址在主网上总是以 bc1p 开头, 测试网上总是以 tb1p 开头。

当接收地址是 Taproot 地址时, 对地址进行 Bech32m 解码, 可以得到 Taproot 公钥, 从而创建 Taproot 锁定脚本。

WIF

随机生成的私钥不能直接导入钱包, 需要将原始私钥转换为 WIF 私钥。

WIF(Wallet Import Format)是一种在钱包之间导入导出时使用的私钥格式。

WIF私钥生成器

从原始私钥生成钱包导入格式的私钥
私钥
Step 1: 添加版本前缀
Step 2: 添加是否压缩标志
Step 3: 计算校验和
Step 4: Base58 编码

WIF 私钥总是以固定字符开头:

  • 主网: 未压缩私钥以 5 开头, 压缩私钥以 KL 开头
  • 测试网: 未压缩私钥以 9 开头, 压缩私钥以 ct 开头
Copyright © 2025 HeapUp