跳到主要内容

WIF私钥格式

介绍私钥如何被编码以及记录。

WIF格式

WIF(Wallet Import Format)是一种将比特币私钥以人类可读格式表示的方法,便于用户在钱包间导入和导出私钥。WIF格式对私钥进行了编码和校验,以确保其有效性和安全性。

img.png

编码

比特币私钥的WIF编码过程如下:

  1. 生成私钥:使用随机数生成一个256位的私钥。

  2. 添加版本前缀

    • 对于主网私钥,前缀为0x80
    • 对于测试网私钥,前缀为0xEF
  3. 添加压缩标志(可选)

    • 如果使用压缩公钥,在私钥后添加一个字节0x01
    • 这样可以生成更短的公钥并减少交易大小。
  4. 计算校验和

    • 将前缀和私钥组合进行双重SHA-256哈希运算。
    • 取哈希结果的前4个字节作为校验和。
  5. 组合数据

    • 将前缀、私钥和校验和组合成完整的字节数组。
  6. Base58Check编码

    • 将组合好的字节数组进行Base58编码,生成最终的WIF私钥。

编码示例

假设我们有一个主网私钥0x1E99423A4EDF1000000000000000000000000000000000000000000000000000,其WIF编码步骤如下:

  1. 私钥:1E99423A4EDF1000000000000000000000000000000000000000000000000000
  2. 添加版本前缀:801E99423A4EDF1000000000000000000000000000000000000000000000000
  3. 计算双重SHA-256校验和:
    • 一次SHA-256:C32D3FE4CFAEAB72ABF8735B5283D014B726B448D1747FDC524E8F8633E1DD56
    • 再次SHA-256:1C99E9B3F3E51E2F22E283B59C9AAB340084AE0D8FDC1FA83F3E9BEBFE4A01C2
  4. 取前4字节校验和:1C99E9B3
  5. 组合数据:801E99423A4EDF10000000000000000000000000000000000000000000000001C99E9B3
  6. Base58Check编码:5J1F3H9ZC8QK6FPU9U5JJMWMAAFN7F5Q0Q1BPE0Z3MN4UHV1Q9F

最终的WIF私钥为5J1F3H9ZC8QK6FPU9U5JJMWMAAFN7F5Q0Q1BPE0Z3MN4UHV1Q9F

WIF格式的校验

校验WIF私钥的过程如下:

  1. Base58解码:将WIF私钥进行Base58解码,得到字节数组。
  2. 提取数据:从字节数组中提取前缀、私钥和校验和。
  3. 校验和验证
    • 对提取的前缀和私钥进行双重SHA-256哈希运算。
    • 比较计算得到的校验和与提取的校验和是否一致。
  4. 前缀验证:确保前缀是合法的主网(0x80)或测试网(0xEF)前缀。

如果校验和和前缀都验证通过,则该WIF私钥是有效的。

区分主网和测试网私钥

主网和测试网私钥的WIF格式主要通过前缀进行区分:

  • 主网私钥:前缀为0x80,Base58Check编码后通常以5开头。
  • 测试网私钥:前缀为0xEF,Base58Check编码后通常以9c开头。

这种前缀区分方式确保了主网和测试网私钥不会混淆,从而避免了将测试网币误用在主网或反之的风险。

总结

比特币私钥的WIF格式提供了一种安全、易于导入和导出的私钥表示方式。通过版本前缀、校验和机制,以及Base58Check编码,WIF格式确保了私钥的有效性和人类可读性。同时,主网和测试网私钥的前缀区分进一步保障了比特币网络的安全性和稳定性。了解WIF格式的编码和校验过程,有助于更好地管理和使用比特币私钥。