区块链-压缩格式的密钥

一、压缩格式公钥

何为压缩,压缩就是让某一个文件占用的空间变小的。非压缩格式的公钥是一个520比特的数字,它是有04开头,后面函数

是256比特数字的xy坐标。若是使用压缩格式的公钥,就能够把公钥的占用的空间变小一点,这样,就能够节省那些运行的区区块链

块链节点的空间。编码

如何压缩公钥?前面知道,公钥是一个点,是一个位于椭圆曲线上的点(x,y)。而椭圆曲线是一个数学方程,知道xblog

咱们就能够经过y^2 mod p = (x^3+7) mod p求出y的值。这样的话,咱们就只须要有x的值就好了,能够省去y值,这样的话,数学

就能够节省近一半的空间。class

再就是,为什么压缩格式分为02和03开头?咱们知道椭圆曲线方程的左边是y^2,他的解是一个平方根,有两种状况,正值或者负值。省去了y值,可是必须知道y的正负,当咱们在素p阶的有限域上使用二进制算术计算椭圆曲线的时候,y 坐标多是奇数或者偶数,分别对应前面所讲的y值的正负符号。比特币

因此,若是是偶数则使用02作前缀,若是是奇数则使用03作前缀sed

 

二、压缩格式私钥

从上面知道,在椭圆曲线方程中,知道x即可以求出y值,因为这样即可以省区y值,以达到压缩公钥的目的,可是如何去压缩私钥呢?不可能省去x值吧?固然不可能。因此,在这里的压缩格式的私钥是一个错误的说法,也能够说是误导式的说法。搜索

私钥是不能被压缩的。私钥非但没有被压缩,还比"之前的私钥"长了一个字节。而这个长的私钥被加了后缀01,用来区别该私钥是一个来自新钱包的。二进制

新钱包?什么意思。公钥格式有压缩的,没有被压缩的。同一个私钥能够生成两种格式公钥(压缩格式的和非压缩格式),两个格式的公钥通过用双哈希函数(RIPEMD160(SHA256(K)))后,获得两个不一样的地址,而这两个不一样的比特币地址都是合法的且来自同一个私钥。

两种地址都能使用,可是并非全部的客户端都支持压缩格式的。而支持压缩格式的钱包就称为新钱包

新钱包使用那个地址?不管是压缩格式的地址或者非压缩格式的地址,都是合法的比特币地址,均可以被私钥签名。为解决这个问题,新钱包会对两种格式的公钥进行不一样的处理方式,而这个时候的所谓的"压缩格式私钥"在后加上01后缀比那是用来区别这个私钥是来自新钱包,回生成压缩格式的公钥。

 “压缩格式私钥”是一个不当用词!私钥不是压缩的。WIF压缩格式的私钥只是用来代表他们只能被生成压缩的公钥和对应的比特币地址。相反地, “WIF 压缩” 编码的私钥还多出一个字节,由于这种私钥多了后缀“01”。该后缀是用来区分“非压缩格式”私钥和“压缩格式”私钥。

相同的密钥,不一样的格式 

十六进制压缩私钥格式(hex-compressed)在末尾加了一个字节(十六进制为01)。 虽然 Base58 编码版本前缀对于 WIF和WIF压缩格式都是相同的(0x80),但在数字末尾添加一个字节会致使Base58编码的第一个字符从5变为K或L。

这些格式并非可互换使用的。在实现了压缩格式公钥的较新的钱包中,私钥只能且永远被导出为WIF压缩格式(以K或L 为前缀)。对于较老的没有实现压缩格式公钥的钱包,私钥将只能被导出为WIF格式 (以5为前缀)导出。这样作的目的就是为了给导入这些私钥的钱包一个信号: 是否钱包必须搜索区块链寻找压缩或非压缩公钥和地址。

若是一个比特币钱包实现了压缩格式公钥,那么它将会在全部交易中使用该压格式缩公钥。钱包中的私钥将会被用来在曲线上生成公钥点,这个公钥点将会被压缩。压缩格式公钥而后被用来生成交易中使用的比特币地址。

当从一个实现了压缩格式公钥的新的比特币钱包导出私钥时,钱包导入格式(WIF)将会被修改成WIF压缩格式,该格式将会在私钥的后面附加一个字节大小的后缀01。最终的Base58Check编码格式的私钥被称做 WIF(“压缩”)私钥,以字母“K”或“L”开头。 而以“5”开头的是从较老的钱包中 以 WIF(非压缩)格式导出的私钥。