1. 生成私钥
随机生成:
私钥通常是一个256位的随机数。私钥的随机性和保密性是安全的基础。
2. 生成公钥
椭圆曲线算法(ECDSA):
利用比特币采用的 secp256k1 椭圆曲线,将私钥与基点(G)进行椭圆曲线乘法,生成对应的公钥。
公钥格式:
公钥可以采用未压缩(65字节,前缀为 0x04)或压缩格式(33字节,前缀为 0x02 或 0x03,取决于 y 坐标的奇偶性)。
3. 生成公钥哈希
SHA-256 哈希:
对生成的公钥进行 SHA-256 运算,得到一个256位的哈希值。
RIPEMD-160 哈希:
再对 SHA-256 的结果使用 RIPEMD-160 算法,生成一个160位(20字节)的公钥哈希(也称为 Hash160)。
4. 添加版本前缀
版本字节:
对于传统的比特币地址(P2PKH地址),在公钥哈希前加上版本字节(主网为 0x00),以便区分不同网络和地址类型。
5. 计算校验和
双重 SHA-256:
将版本字节与公钥哈希组合后的数据,先进行一次 SHA-256 运算,再对结果进行第二次 SHA-256 运算。
截取前4字节:
取双重 SHA-256 的前4个字节作为校验和,确保地址在传输过程中未被篡改。
6. Base58Check 编码
组合数据:
将版本字节 + 公钥哈希 + 校验和组合成一个完整的数据串。
Base58Check 编码:
对该数据串进行 Base58Check 编码,生成一个以数字和字母组成的地址字符串。
地址特征:
对于主网 P2PKH 地址,通常以“1”开头;其他类型地址如 P2SH 或 Bech32 则有不同的前缀。
总结
从私钥到比特币地址的整个流程可以概括为:
随机生成私钥;
利用椭圆曲线算法生成公钥;
对公钥先后进行 SHA-256 和 RIPEMD-160 哈希,得到公钥哈希;
在公钥哈希前添加版本字节,并计算校验和;
最后用 Base58Check 编码得到最终地址。