https://developers.eos.io/manuals/eos/v2.0/keosd/wallet-specification
基本看完了cleos和keosd相关内容,个人觉得keosd的钱包导入格式(Wallet Import Format WIF)有些内容值得一说。
1、 概述
钱包导入格式是对ECDSA私钥编码的标准。
EOS使用和BTC的WIF相同的版本,校验和编码规范,并且和现有的库兼容。
以下是一个WIF 私钥的例子:
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
这种编码方式的好处:
1)易于拷贝和粘贴私钥(确保整个密钥都被拷贝)
2)文本方式的密钥,或者用户可编辑的文件格式
3)缩短密钥的长度
坏处:
1)不便手写(即使一个大小写错误也会导致重要问题)
2)二进制或计算机存储器,其中代码处理密钥和数据已被检查
限制:
1)将WIF密钥使用“私钥”来标记是更好的主意
2)如果可以记录或重新键入密钥,则使用BIP39助记码标准是更好的选择
2、从私钥到WIF
1) 一个假的私钥如下,全是0,32字节长度,16进制显示如下:
0000000000000000000000000000000000000000000000000000000000000000
意味着最多只有40+亿个私钥???
2)在最前面加上0x80,表示版本,一个字节,这字节代码BTC主网。EOS使用相同的版本字节。
800000000000000000000000000000000000000000000000000000000000000000
3)对上一步生成的结果执行sha-256
ce145d282834c009c24410812a60588c1085b63d65a7effc2e0a5e3a2e21b236
4)对上一步生成的结果再次执行sha-256
0565fba7ebf8143516e0222d7950c28589a34c3ee144c3876ceb01bfb0e9bb70
5)取前4个字节,作为checksum
0565fba7
6)将上一步拿到的内容放到第2步的后面
8000000000000000000000000000000000000000000000000000000000000000000565fba7
7)对上一步的结果做base58编码
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
以上就是一个用户可见的私钥的生成过程。
本质来说,就是对原始密钥“加盐”,生成一个base58的编码。
之所以用base58,是因为剔除了一些容易搞混的字符,如0和o,1和l等。防止用户手动输错。
3、从WIF到私钥
1)从WIF私钥开始
5HpHagT65TZzG1PH3CSu63k8DbpvD8s5ip4nEB3kEsreAbuatmU
2)做base58解码
8000000000000000000000000000000000000000000000000000000000000000000565fba7
3)将以上结果切割成带版本的密钥和校验码
800000000000000000000000000000000000000000000000000000000000000000
0565fba7
4)对带版本的密钥做sha-256
ce145d282834c009c24410812a60588c1085b63d65a7effc2e0a5e3a2e21b236
5)对以上结果再做sha-256
0565fba7ebf8143516e0222d7950c28589a34c3ee144c3876ceb01bfb0e9bb70
6)取前4个字节
0565fba7
7)将第6步和第3不拿到的校验码判断是否一致
8)切割带版本的密钥为版本和密钥
80
0000000000000000000000000000000000000000000000000000000000000000
9)如果版本是80,则没有问题
网友评论