在比特币的世界里,钱包地址是我们接收比特币时对外公布的“账号”,而公钥则是生成这个地址的关键 intermediate(中间环节),很多人常常混淆公钥和地址,比特币钱包的公钥并非地址,而是通过特定算法从公钥进一步推导生成地址的“原材料”,理解公钥与地址之间的关系,是掌握比特币安全收付的基础。
比特币密钥体系:非对称加密的基石
比特币的安全性源于其基于非对称加密(也称公钥密码学)的密钥体系,在这个体系中,每一对密钥都包括:
- 私钥(Private Key):这是一串随机生成的、长度为256位的数字,相当于你的“终极密码”或“数字签名”,私钥必须绝对保密,一旦泄露,他人就能控制对应钱包中的所有比特币,私钥可以用来“签名”交易,证明你对这笔比特币的所有权。
- 公钥(Public Key):由私钥通过单向的加密算法(椭圆曲线算法ECDSA,具体是secp256k1曲线)生成,公钥与私钥是数学上相关但无法反向推导的,公钥可以安全地分享给他人,用于验证签名的有效性,或者用于生成接收比特币的地址。
公钥如何“变身”为比特币地址
比特币地址并不是直接使用公钥,而是对公钥进行一系列哈希运算后得到的一串更短、更易于识别和编码的字符串,这个过程大致如下:
- 从私钥生成公钥:这是第一步,使用ECDSA算法对私钥进行运算,得到一个65字节(520位)的公钥,通常我们会以“04”或“02/03”开头(前者表示未压缩的公钥,后者表示压缩的公钥,压缩公钥更节省空间)。
- 对公钥进行哈希运算:
- 对公钥进行SHA-256哈希运算,得到一个256位的哈希值。
- 对这个SHA-256哈希值进行RIPEMD-160哈希运算,得到一个160位的哈希值,这一步是为了进一步缩短长度并增加唯一性。
- 添加版本字节:为了区分不同类型的比特币地址(如主网测试网),会在RIPEMD-160哈希值前面加上一个版本字节(主网P2PKH地址的版本字节是0x00)。
- 进行校验和计算:将带有版本字节的数据进行两次SHA-256哈希运算,取前4位作为校验和,附加到数据末尾。
- Base58Check编码:将带有校验和的数据进行Base58Check编码,Base58是一种去除了容易混淆的字符(如0、O、I、l)的编码方式,使得地址更简洁、更不易出错,同时也方便人工输入和识别。
经过这一系列步骤后,原本65字节的公钥就最终转换成了我们熟悉的比特币地址(通常以“1”、“3”或“bc1”开头,具体取决于地址类型)。
