比特币公钥、私钥与地址相互之间有什么关系?

原创 yibiyibs  2018-02-25 20:44:56  阅读 110 次 评论 0 条
摘要:

私钥非揭露,具有者需平安保管。普通是由随机算法生成的,说白了,就是一个宏大的随机整数,256位、32字节。巨细介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数,都可以以为是一个合法的私钥。所以,除了随机办法外,选用特定算法由固定的输出,失掉32字节输入的算法就可以成爲失掉私钥的办法。

私钥
非揭露,具有者需平安保管。普通是由随机算法生成的,说白了,就是一个宏大的随机整数,256位、32字节。巨细介于1 ~ 0xFFFF FFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间的数,都可以以为是一个合法的私钥。所以,除了随机办法外,选用特定算法由固定的输出,失掉32字节输入的算法就可以成爲失掉私钥的办法。所以,便有了迷你私钥(Mini Privkey),原理很复杂,例如,选用SHA256的一种完成:
private key = SHA256()
迷你私钥存在平安成绩,由于输出调集太小,易被构造罕见组合的彩虹表暴力破解,所以普通仍是运用体系随机生成的比拟好,无平安隐患。

公钥
公钥与私钥是绝对应的,一把私钥可以推出仅有的公钥,但公钥却无法推导出私钥。公钥有两种办法:紧缩与非紧缩。
后期比特币均运用非紧缩公钥,现大局部客户端已默许运用紧缩公钥。这个貌似是比特币体系一个长得像feature的bug,后期人少活多代码写得不够精细,openssl库的文档又缺乏够好,招致Satoshi以为有必要运用非紧缩的残缺公钥,后来我们发现其实公钥的左右两个32字节是有相关的,右边(X)可以推出右侧(Y)的平方值,有右边(X)就可以了。
如今体系里两种办法共存,应该会一向共存下去。两种公钥的首个字节爲标识位,紧缩爲33字节,非紧缩爲65字节。以0x04最后爲非紧缩,0x02/0x03最后爲紧缩公钥,0x02/0x03的选取由右侧Y开方后的奇偶决议。
紧缩办法可以减小Tx/Block的体积,每个Tx Input增加32字节。
地址
地址是爲了人们交流便当而弄出来的一个方案,由于公钥太长了(130字符串或66字符串)。地址长度爲25字节,转爲base58编码后,爲34或35个字符。base58是类似base64的编码,但去掉了易惹起视觉混杂的字符,又在地址开头添加了4个字节校验位,保证在人们交流单个字符错误时,也可以因地址校验失败而阻止了误操作。
由于存在公钥有两种办法,那麼一个公钥便对应两个地址。这两个地址都可由同一私钥签署买卖。
公钥生成地址的算法:
Version = 1 byte of 0 (zero); on the test network, this is 1 byte of 111
Key hash = Version concatenated with RIPEMD-160(SHA-256(public key))
Checksum = 1st 4 bytes of SHA-256(SHA-256(Key hash))
Bitcoin Address = Base58Encode(Key hash concatenated with Checksum)
下图对错紧缩公钥生成地址的进程:

关于紧缩公钥生成地址时,则只取公钥的X局部即可。
推导联络
三者推导联络:私钥 >> 公钥 >> 两个地址。进程均不可逆。具有私钥便具有全部,但普通爲了便当,会把对应的公钥、地址也存储起来。
本文地址:https://www.yibiyibs.com/bixueyuan/486.html
版权声明:本文为原创文章,版权归 yibiyibs 所有,欢迎分享本文,转载请保留出处!

发表评论


表情

还没有留言,还不快点抢沙发?