钱包概念

钱包是一个管理私钥的工具,钱包中的资产在链上。

先来看几个基础的概念:

种子:生成私钥的种子, 128,256 或 512 bit。

私钥:一个32字节的数,用户持有,不能泄露。

公钥:私钥经过椭圆曲线算法生成。

地址:公钥通过hash函数生成。


BIP32 :为了避免管理一堆私钥的麻烦提出的分层推导方案

根据一个随机数种子(seed)产生一个树状结构存储多组私钥和公钥,这样保存的时候,只需要保存一个种子就可以,私钥可以推导出来通过这种树状结构推导出来的秘钥,通常用路径来表示,每个级别之间用斜杠 / 来表示,由主私钥衍生出的私钥起始以“m”打头。

BIP44 :BIP32的分层路径定义规范

BIP44则是为这个路径约定了一个规范的含义(也扩展了对多币种的支持),BIP44指定了包含5个预定义树状层级的结构:

m / purpose’ / coin_type’ / account’ / change / address_index

  • m :固定
  • Purpose :固定值为44(或者 0x8000002C)
  • Coin type :代表币种,0代表比特币,60代表以太坊
  • Account :账户索引,从0开始
  • Change:外部地址:0, 内部地址:1(一般为0)
  • address_index :地址索引,从0开始,代表生成第几个地址

BIP39 :定义助记词

助记词的生成:先生成一个128位随机数,再加上对随机数做的校验4位,得到132位的一个数,然后按每11位做切分,这样就有了12个二进制数,然后用每个数去查BIP39定义的单词表,这样就得到12个助记词。

助记词推导种子:使用密钥拉伸(Key stretching)函数,PBKDF2基本原理是通过一个为随机函数(例如 HMAC 函数),把助记词明文和盐值作为输入参数,然后重复进行运算最终产生生成一个更长的(512 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。