以太坊 私钥保护——keystore

       以太坊的每个外部账户私钥 /地址对,都存储在一个钥匙文件里——keystore文件。这个文件是 JSON 格式,但是私钥等隐私重要的信息都是被加密存储的,你可以通过密码去解锁你的私钥用于签署交易。所以歌这个文件就意味着你的私钥,一定要保管好。

keystore的文件格式

{
    'address': '123456789', 
    'crypto': 
        {
            'cipher': 'aes-128-ctr', 
            'cipherparams': 
                {
                    'iv': 'a1afa641398e8e09fd2db05ca879cff4'
                },                 
            'ciphertext':
'ab7fac3ee124801243d105f97057fee36f55539dd44fc9dbf43709433b1f0308ca16a93002', 
             'kdf': 'pbkdf2', 
             'kdfparams': 
                 {
                     'c': 1000000, 
                     'dklen': 32, 
                     'prf': 'hmac-sha256', 
                     'salt': 'c79b4272523dc76abfea583f1a210f5f'
                 }, 
             'mac': '19fdcefefa6314170ade98db3fb8ad44a1de5b81279719770619ecd556f65925'
       }, 
    'id': '4b436468-601d-4a2a-b83e-422b0a06cd01', 
    'version': 3
}
  • version- 版本号
  • address - 是加密后的公钥,明文显示
  • id- 随机

主要内容在crypto中:

  • cipher:对称 AES 算法的名称,用于加密用户私钥;
  • cipherparams:上述 cipher 算法需要的参数,iv初始化向量;
  • ciphertext:以太坊私钥使用上述 cipher 算法进行加密后密文;
  • kdf:密钥生成函数,用来增强用户的密码强度,同时生成aes的密钥加密 私钥;
  • kdfparams:上述 kdf 算法需要的参数,还有scrypt;
  • Mac:用于验证解密后的私钥是否正确。

生成keystore过程

  

1,使用用户输入的密码,kdf参数,通过kdf函数生成aes的密钥,aes使用的iv则是通过随机函数随机生成的;

2、将用户的私钥,通过aes加密算法,以及上一步骤生成的密钥,生产eth的私钥的密文;

3、将kdf的生成aes私钥的种子的后半段和用户私钥的密文,一起做hash,生成mac;

4、使用用户私钥,生成用户的以太坊地址;

最后一个步骤其实可以省略,后边我打算把把keystore这种方案移植到fabric中,用来保护fabircde私钥;通过这一系列步骤,我们可以把必要的输出,获取到组成一个json文件,存储到本地,用的使用只需要输入密码,就可以获取到用户的私钥;

获取私钥过程

1,用户输入密码,pdf函数通过密码和keystore中获取到参数,生产aes的密钥;

2、将aes密钥的种子的后16bit和ciphertext,做hash;

3、将第二步的结果与mac值比较

4、如果第三步相等,则使用aes密钥解密私钥的密文,生成私钥,否则失败;

从整个流程可以看出,用户只需要记住密码就可以了,相对于助记词来说更简单了,但是助记词的功能更强大,也更广泛;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

0xweb3q

有钱的捧个钱场,没钱的捧个人场

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值