比特币中的私钥是访问和使用某个比特币地址中资金的唯一凭证, 一旦私钥泄露, 资金将会被盗。
公钥是由私钥计算生成的, 计算过程不可逆, 故公钥可以暴露给任何人。
地址是公钥按照特定的算法生成的, 目的为不同类型的 UTXO 创建锁定脚本。例如地址是 P2PKH 类型, 则创建的锁定脚本也是 P2PKH 类型。
私钥
私钥是随机生成的 256 个比特位, 即随机生成 256 个 0 或 1, 一个字节是 8 个比特位, 共 32 个字节。
私钥
公钥
公钥由私钥计算而来。私钥乘以椭圆曲线 secp256k1 的基点 G 得到公钥。主要应用在 P2PK 类型的 UTXO。
公钥
地址
比特币地址用于接收比特币。并根据地址类型生成不同的锁定脚本。
地址的计算方式有 Base58, Bech32, Bech32m 。
Base58
Base58 用于生成 P2PKH 和 P2SH 地址。
Base58 地址生成器
-
P2PKH地址在主网上总是以1开头, 测试网上总是以m或n开头。 -
P2SH地址在主网上总是以3开头, 测试网上总是以2开头。
Base58Check
从 Step 2 到 Step 4 这整个过程称作 Base58Check 编码。
相比于单一的 Base58 编码, Base58Check 添加了版本前缀, 可以快速识别不同的地址类型, 另外添加校验和也保证了数据的完整性和安全性。
如果将比特币发送到 P2PKH 地址, 通过 Base58Check 解码, 可计算出 公钥哈希 并创建创建一个 P2PKH 锁定脚本。
Base58 地址格式也用于 P2SH 锁定脚本, 不同的是 P2SH 使用的是脚本哈希
Bech32
Bech32 用于见证版本V0 的地址生成。
Bech32 地址生成器
当将比特币发送到 P2WPKH 地址, 将从地址中解码出公钥哈希,并创建一个 P2WPKH 锁定脚本。
Bech32 地址格式也用于 P2WSH 锁定脚本,不同的是 P2WSH 使用的是赎回脚本哈希。
P2WPKH 和 P2WSH 地址在主网上总是以 bc1q 开头, 测试网上总是以 tb1q 开头。
Bech32m
Bech32m 用于生成 Taproot 地址。与其他类型的地址不同, Taproot 地址由 Taproot 公钥生成的。
Taproot 公钥是原始公钥的 X 坐标 加上 脚本树的 Tweak 值乘以 Secp256k1 的基点 G 的和 , 其中 P 是原始公钥的 X 坐标, t 是脚本树的 Tweak 值。
Taproot 地址生成器
Taproot 地址在主网上总是以 bc1p 开头, 测试网上总是以 tb1p 开头。
当接收地址是 Taproot 地址时, 对地址进行 Bech32m 解码, 可以得到 Taproot 公钥, 从而创建 Taproot 锁定脚本。
WIF
随机生成的私钥不能直接导入钱包, 需要将原始私钥转换为 WIF 私钥。
WIF(Wallet Import Format)是一种在钱包之间导入导出时使用的私钥格式。
WIF私钥生成器
WIF 私钥总是以固定字符开头:
- 主网: 未压缩私钥以
5开头, 压缩私钥以K或L开头 - 测试网: 未压缩私钥以
9开头, 压缩私钥以c或t开头