比特币_密钥功能实现

1.私钥--》公钥--》比特币地址

私钥k进行椭圆曲线相乘得到公钥K,公钥K通过哈希得到比特币地址;

2.私钥随机生成

在一个密码学安全的随机源中取出一长串随机字节,对其使用SHA256哈希算法进行运算,产生一个256位的数字。

3.公钥生成

通过椭圆曲线算法生成,具有单向性;{K = k * G}

公钥是在椭圆曲线上的一个点,由一对坐标(x,y)组成。公钥通常表示为前缀04紧接着两个256比特的数字。其中一个256比特数字是公钥的x坐标,另一个256比特数字是y坐标。前缀04是用来区分非压缩格式公钥,压缩格式公钥是以02或者03开头。

4.比特币地址生成

由公钥通过双哈希获得,以公钥K为输入,计算其SHA256哈希值,并以此结果计算RIPEMD160哈希值,得到一个长度为160比(20字节)的数字;

最终见到的地址还进行了“Base58Check”编码,Base58由不包括(0,O,l,I)的大小写字母和数字组成,文本形式方便阅读,增加校验码进行校验;

5.密钥格式

WIF:钱包导入格式,就是Base58编码格式;5开头;

WIF-compressed:压缩钱包导入格式,K或者L开头;

压缩私钥:私钥后带01后缀,最终会生成WIF-compressed;

非压缩私钥:只有生成的私钥,不带后缀,最终会生成WIF;

压缩公钥:只保存x坐标,y坐标可以通过x得出;但x对应曲线奇偶两个y,因此压缩时前缀需要用02表示奇数,03表示偶数;

非压缩公钥:带有x和y坐标,前缀04紧接着两个256比特的数字;

新钱包都使用压缩格式,老钱包使用非压缩格式;如果一个比特币钱包实现了压缩格式公钥,那么它将会在所有交易中使用该压格式缩公钥。钱包中的私钥将会被用来生成压缩格式公钥,压缩格式公钥然后被用来生成交易中的比特币地址。


参考文献:“精通比特币,Andreas•M•Antonopoulos (O'Reilly)。版权2015 Andreas•M•Antonopoulos, 978-1-449-37404-4.”