[区块链从原理到实现]- 地址,公钥,私钥,钱包的介绍,原理及实现

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/gx_1983/article/details/82623399

区块链从原理到实现 索引

原理介绍

私钥和公钥

公钥(Public Key)与私钥(Private Key)是通过算法得到的一个密钥对(即一个公钥和一个私钥),公钥是密钥对中公开的部分,任何人都可以获得,私钥则是非公开的部分,只有用户自己拥有,一旦泄露就会引发安全风险(例如,私钥可以用于签名,如果私钥泄露那么得到私钥的人就可以伪造用户签名了)。公钥通常用于加密会话密钥、验证数字签名,或加密可以用相应的私钥解密的数据。通过这种算法得到的密钥对能保证在世界范围内是唯一的。使用这个密钥对的时候,如果用其中一个密钥加密一段数据,必须用另一个密钥解密。比如用公钥加密数据就必须用私钥解密,如果用私钥加密也必须用公钥解密,否则解密将不会成功。

账户地址

在以太坊中,账户地址是为了标识账户.
这个地址是从账户私钥对应的公钥产生的,截取公钥的后40位(20字节)作为账户的地址.
私钥,公钥及地址的相关概念性介绍请查阅其他文档,此处不多做介绍.

实现分析

使用以太坊的bootnode命令产生私钥文件

  • 通过以太坊的bootnode命令可以生成一个节点的私钥.在p2p发现的过程中,bootnode节点需要这个私钥文件做标识.
  • 此处的私钥文件不同于keystore文件.keystore文件相关内容参考下述章节.
  • 以太坊bootnode命令生成私钥文件流程图如下:
    这里写图片描述

账户地址的生成过程

  • 账户地址是从账户对应的公钥中产生的.
  • 截取公钥的后40位(20字节)作为账户对应的地址.
  • 获取账户地址的流程如下:
    这里写图片描述

生成keystore文件的过程

  • keystore文件是真正存储用户账户相关信息的地方.
  • 下述章节会分别说明keystore文件的生辰流程及keystore文件的存储结构.

keystore文件生成流程

这里写图片描述

  • newKey函数内是真正私钥及将要存储到文件的Key结构的生成过程.在ethereum代码中与wanchain代码中是不同的.wanchain为了实现隐私保护交易在key结构中添加了自己的字段.
  • 在以太坊的代码中并Key结构中不存在第二私钥,也没有第二私钥的相关流程.
  • newKey流程如下:
    这里写图片描述

keystore文件结构

  • keystore文件是存储账户相关信息的地方.
  • keystore文件实际存储的就是代码生成的Key数据结构,里面保存了用户的私钥及公钥和地址等信息.
  • keystore结构如下:
    • 粉色部分为wanchain代码特有的结构.
    • 蓝色部分为wanchain和以太坊代码共有的结构.
    • wanchain代码的Key中添加了第二私钥的概念,第二私钥及WAddress地址的功能是为了wanchain的隐私保护交易.
      这里写图片描述

猜你喜欢

转载自blog.csdn.net/gx_1983/article/details/82623399