在比特币(BTC)的世界里,地址和公钥是两个核心且紧密相关的概念,它们共同构成了用户接收比特币的“身份标识”,理解BTC地址是如何从公钥“演变”而来的,对于深入把握比特币的密码学基础和安全机制至关重要,本文将详细阐述从公钥到BTC地址的生成过程,并厘清它们之间的关系。

基础概念:公钥与地址的角色

我们需要明确公钥和地址的基本角色:

  1. 公钥(Public Key)

    • 来源:由私钥通过椭圆曲线密码学(Elliptic Curve Cryptography, ECC,具体是secp256k1曲线)生成,私钥是一串随机且不可预测的大数字,而公钥则是基于私钥计算得出的一个点(即椭圆曲线上的一个坐标点)。
    • 功能:公钥是“公开”的,可以安全地与他人分享,其主要作用有两个:
      • 生成地址:BTC地址正是由公钥通过一系列特定算法计算得出的。
      • 验证签名:当花费比特币时,私钥会对交易数据进行签名,而网络中的节点则使用对应的公钥来验证该签名的有效性,确保交易确实由私钥持有者发起。
  2. BTC地址(Bitcoin Address)

    • 来源:如前所述,BTC地址由公钥通过一系列哈希算法和编码转换得到。
    • 功能:地址是比特币用户用来接收比特币的“目的地”或“收款账号”,它可以公开分享给任何人,用于接收资金,地址本身不包含私钥信息,因此相对安全,需要注意的是,一个地址通常只用于一次性收款,虽然技术上可以重复使用,但不推荐。

从公钥到BTC地址的生成步骤

将一个公钥转换成我们日常所见的BTC地址,并非一蹴而就,而是经过了一系列精心设计的密码学运算和编码步骤,以下是主要流程(以常见的P2PKH地址为例):

  1. 获取原始公钥

    • 假设我们已经通过私钥(使用椭圆曲线乘法 K = k * G,其中k是私钥,G是椭圆曲线上的基点)得到了原始的公钥,这个公钥通常是一个65字节长的字符串(以0x04开头,后跟X和Y坐标各32字节)。
  2. SHA-256哈希

    • 对原始公钥进行一次SHA-256哈希运算,SHA-256是一种安全的密码学哈希函数,能将任意长度的输入数据转换为固定长度(256位,即32字节)的输出。
    • SHA256(原始公钥) = 公钥哈希值1 (32字节)
  3. RIPEMD-160哈希

    • 对上一步得到的SHA-256哈希值再进行一次RIPEMD-160哈希运算,RIPEMD-160也是一种哈希函数,其输出为160位(即20字节),这一步的目的是进一步压缩公钥的长度,并增加不同的哈希算法以增强安全性。
    • RIPEMD160(SHA256(原始公钥)) = 公钥哈希值2 (20字节)
  4. 添加版本字节(Version Byte)

    • 为了区分不同类型的比特币地址(如P2PKH、P2SH、Bech32等),需要在公钥哈希值前添加一个特定的版本字节,对于最常见的以“1”开头的P2PKH地址,版本字节是0x00。
    • 版本字节 (0x00) + 公钥哈希值2 = 带版本前缀的哈希 (21字节)随机配图