钱包概念
钱包是一个管理私钥的工具,钱包中的资产在链上。
先来看几个基础的概念:
种子:生成私钥的种子, 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 位)密钥种子。这个种子再构建一个确定性钱包并派生出它的密钥。