压缩私钥

常用的术语“压缩私钥”是一个错误的说法,因为当一个私钥被导出为WIF-压缩时,它实际上比“未压缩”私钥长一个字节。这是因为私钥有一个额外的字节后缀(在表4-6中以十六进制表示为01),表示该私钥来自一个较新的钱包,应该只用于生成压缩的公钥。私钥本身并没有被压缩,也不能被压缩。术语“压缩私钥”实际上意味着“只应该从中派生压缩的公钥的私钥”,而“未压缩私钥”实际上意味着“只应该从中派生未压缩的公钥的私钥”。为了避免进一步混淆,您应该只将导出格式称为“WIF-压缩”或“WIF”,而不是将私钥本身称为“压缩”。

表4-6显示了相同的密钥,以WIF和WIF-压缩格式编码

表 4-6. 示例:相同的私钥,不同格式

格式私钥

Hex

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD

WIF

5J3mBbAH58CpQ3Y5RNJpUKPE62SQ5tfcvU2JpbnkeyhfsYB1Jcn

Hex-compressed

1E99423A4ED27608A15A2616A2B0E9E52CED330AC530EDCC32C8FFC6A526AEDD01

WIF-compressed

KxFC1jmwwCoACiCAWZ3eXa96mBM6tb3TYzGmf6YwgdGWZgawvrtJ

请注意,十六进制压缩私钥格式在末尾多了一个额外的字节(十六进制中的01)。虽然基于Base58编码的版本前缀对于WIF和WIF-compressed格式是相同的(0x80),但数字末尾添加了一个字节会导致Base58编码的第一个字符从5变为K或L。可以将这视为十进制编码中数字100和数字99之间的差异。虽然100比99多一位数字,但它的前缀也是1而不是9。随着长度的变化,前缀也会受到影响。在Base58中,数字前缀5会随着数字长度增加一个字节而变为K或L。

请记住,这些格式不能互换使用。在实现了压缩公钥的新钱包中,私钥只能导出为WIF-compressed格式(带有K或L前缀)。如果钱包是旧版本,并且不使用压缩公钥,则私钥只能导出为WIF格式(带有5前缀)。这里的目标是向导入这些私钥的钱包传达一个信号,告诉它是否必须在区块链中搜索压缩或非压缩的公钥和地址。

如果一个比特币钱包能够实现压缩公钥,它将在所有交易中使用它们。钱包中的私钥将用于从曲线派生出压缩的公钥点。压缩的公钥将用于生成比特币地址,并在交易中使用。从实现了压缩公钥的新钱包中导出私钥时,WIF将被修改,私钥将添加一个字节的后缀01。结果生成的Base58check编码的私钥称为“压缩WIF”,并以K或L字母开头,而不是以5开头,这是来自旧钱包的WIF编码(非压缩)私钥的情况。

Last updated