1. 总过程
2. 私钥
私钥就是一个随机选出的数字,256位.
eg. 8F72F6B29E6E225A36B68DFE333C7CE5E55D83249D3D2CD6332671FA445C4DD3
-
介于(1 ~ 0xFFFFFFFF FFFF FFFF FFFF FFFF FFFF FFFE BAAE DCE6 AF48 A03B BFD2 5E8C D036 4141之间?)
-
私钥在钱包里也是Base58编码的形式保存
3. 公钥
椭圆曲线上面的一个点
. 从私钥和基点G计算得到而来: K = k * G (k是私钥,K是公钥)
. 其反向运算“寻找离散对数”"已知公钥K, G来求出私钥k"是非常困难
公钥通常表示为前缀04紧接着两个256bit的数字(520bit)
前缀04开头:04 x y
eg.
04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
x=F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y=07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
3.1 压缩格式化公钥
- 520bit太占空间。
- 由于一个公钥是一个椭圆曲线上的点(x,y),而通过椭圆曲线方程可以由x得到y,所以就存x。eg. y2 mod p = (x3 + 7) mod
- 一个x,对应的y有正和负,因此加个前缀来区分。
在素数p阶的有限域上使用二进制算术计算椭圆曲线的时候,y坐标的奇偶对应椭圆曲线y值的正负。
- 偶数:02作为前缀
- 奇数:03作为前缀
“04F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB
x=F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
y=07CF33DA18BD734C600B96A72BBC4749D5141C90EC8AC328AE52DDFE2E505BDB”
=>
03F028892BAD7ED57D2FB57BF33081D5CFCF6F9ED3D3D7F159C2E2FFF579DC341A
(66个16进制数)
3.2 钱包导入格式(Wallet ImportFormat)
为了区分新旧版本是否支持公钥压缩,私钥的后面附加一个字节的后缀01(表明是新版本—支持公钥压缩)
4. 比特币地址
由公钥生成的比特币地址以数字“1”开头。
eg. 1QCXRuoxWo5Bya9NxHaVBArBQYhatHJrU7