区块链系列十:Mnemonic和Hierarchically Derived Keys

区块链里面账户就是一对公私钥(public/private key), 有了private key就有了一切, 丢失了就丢掉了所有的token, 没有密码找回! 没有密码找回! 没有密码找回!

为了方便备份, 就有了通过Mnemonics来方便保存记忆private key的BIP39。

BIP39

可以先用这两个在线工具体验一下: https://iancoleman.io/bip39/ , https://ethtools.com/ropsten/wallet/create/ 。 然后阅读BIP39.

大概思路就是初始化一个随机entropy, 比如128bits,然后加上sha256(128bits), 取128 / 32 = 4位, 拼接起来, 每11为作为一个数字index, 去wordlist里面对应一个单词。 这个初始的128bits可以作为seed, 根据其他算法生成其他的private/public keys, 比如用Hierarchically Derived Keys — BIP32

ENT

有一些工具可以判断系统或者文件的entropy。

实现

有各种语言版本的实现, 阅读了bitcoinjs/bip39,还算是蛮简单的。

UTF-8 NFKD

PBKDF2

Diceware

还发现一个小女儿在家掷骰子来帮别人选密码, nb!

BIP32

https://bitcore.io/api/mnemonic/ 难懂一点。

bitcore的JS实现: https://bitcore.io/api/lib/hd-keys

Ethereum的讨论