私钥、公钥、地址、助记词、Keystore

realhuhu 457 0

私钥、公钥、地址

  1. 私钥由64位十六进制的字符组成
    • 私钥通过伪随机数产生
  2. 公钥由130位十六进制的字符组成
    • 采用椭圆曲线数字签名算法ECDSA-secp256k1将私钥(32字节)映射成公钥(65字节,04+X公钥+Y公钥)
    • 如私钥0xd07a6442307e391877a6938add8bf52e4db1637f3eff8933d6bf317641938272
      生成公钥
      0x04
      27e7e2385c9bff65e37639b6664d785f06964102f1dc43f0086e6b2beb1e2169
      5ba1e76714d3a39f562b30fe8b9988d0cae128a058beb2a868871f0fe4b047e3
  3. 地址由40位十六进制的字符组成
    • 移除公钥的前缀04
    • 将上面移除04后的16进制字符串再次转化为字节数组
    • 计算字节数组的Keccak-256哈希值(64位十六进制数)
    • 取上一步结果取后40位即以太坊地址
  4. 由于ECDSA-secp256k1、Keccak-256都是数字签名算法(摘要算法),因此无法通过地址计算公钥无法通过公钥计算私钥
  5. 私钥拥有对账户的控制权

助记词

  1. BIP协议,是Bitcoin Improvement Proposals的缩写,意思是Bitcoin的改进建议,不过有些提议也被以太坊采用
  2. BIP32
    • 私钥的记忆和管理很麻烦,如果由多私钥需求,管理起来就更麻烦,因此出现了BIP32
    • BIP32允许通过种子生成一系列私钥,这样只需要记住种子就相当于记住了一系列私钥
  3. BIP44
    • BIP44对BIP32进行补充,完善了通过种子生成一系列私钥的算法
    • BIP44通过路径(m/purpose'/coin'/account'/change/address_index)生成一系列私钥
    • 以太坊钱包也遵循BIP44标准,确定路径是m/44'/60'/a'/0/n
  4. BIP39
    • 种子是32位十六进制的字符串,记忆起来依然很困难
    • BIP39可以将种子映射为12个单词,也就是助记词。单词大多使用英文单词,不过也支持汉字、日文等
    • 记住助记词,就相当于记住种子,就相当于记住一系列私钥
  5. 如果通过助记词方式导入账户,默认使用一系列私钥中的第一个私钥,如果你继续创建账户,则会依次生成新私钥
  6. 助记词生成私钥的过程中采用了数字签名算法算法,因此无法从私钥推导出助记词,由此看来助记词的层次比私钥更高
  7. 种子生成助记词时,也可以使用助记词密码,默认不带密码
    • 此时种子+助记词密码可以得到助记词。并且该过程可逆,即助记词+助记词密码可以推导出种子
    • 在这种情况下,记住助记词和助记词密码才拥有相当于记住一系列私钥,即使助记词泄漏也不用担心账户失窃

Keystore

  1. Keystore常见于以太坊钱包,它是将私钥以加密的方式保存为一份JSON文件,这份JSON文件就是Keystore
  2. 所以Keystore就是加密后的私钥。Keystore必须配合钱包密码可以解密出私钥,拥有账户控制权

钱包密码

  1. 钱包用于管理助记词、私钥等,等级最高。
  2. 以MetaMask为例,创建账户时本质是生成助记词种子,由此可以生成你的助记词,未使用到助记词密码。
  3. 让你输入的密码是用来保护这个扩展程序的,与上文涉及的密码完全无关
  4. 利用助记词生成的第一个私钥就是你的账户,如果你点击继续创建,就会利用助记词生成后续的私钥
  5. 当然,MetaMask也支持直接导入私钥,不过也得先输入正确密码解密MetaMask

发表评论 取消回复
表情 图片 链接 代码

分享