数字货币钱包 分层确定性钱包介绍(HD wallets)

版权声明:1、本BLOG的目的、形式及内容。   此BLOG为个人维护BLOG,内容均来自原创及互连网转载。最终目的为收集整理自己需要的文章技术等内容,不涉及商业用途。 2、有关原创文章的版权   本BLOG上原创文章未经本人许可,不得用于商业用途及传统媒体。网络媒体转载请注明出处,否则属于侵权行为。 3、有关本站侵权   本BLOG所转载的内容,均是本人未发现有对文章版权声明的文章且无来自传统媒体。如 https://blog.csdn.net/xq723310/article/details/82940594

    什么是分层确定性(Hierarchical Deterministic)钱包( HD Wallets)?我们先看看比较官方的解释,指使用分层确定性地址机制的电子钱包,通过椭圆曲线密码学机制,确保可以通过在没有私钥参与的情况下,由公钥直接分散成子公钥,并且分散的子公钥可以由分散的子私钥认证。

    为什么会有HD钱包?

    之前的钱包为了保护用户的隐私(你肯定不想别人知道你账户里有多少钱吧),所以在比特币中每个账户都会分配100个地址,保证每次交易都用一个新地址,虽然保护了隐私也带来其他问题;如果你交易频繁,100笔交易之后还需再产生100个账户,100个私钥,这样你就需要不停的备份你的钱包。这种钱包称之为非确定性钱包,钱包是一堆随机生成的私钥的集合。

msbt_0409

    而分层确定性钱包,从一个“种子”推导出一个主私钥,主私钥推导出海量的子私钥。“确定性”意味着同一个“种子”可以推到出同一批子私钥;“分层”,主私钥推导出子私钥是一种树状结构,如上图;所以方便组织机构使用,总部控制主私钥,给各部门发放子私钥,部门只能控制自己有私钥的部分,但是总部既可以控制也可以监管;这样即给部门一定的自治权利,总部也保留了绝对的控制权。所以我们只需要备份好自己的种子就可以了(可以认为是助记词)。

    总结一下,HDWallet的优点包括海量私钥,方便备份,权限管理。还有一些新特性,例如可以从一个父公钥产生子公钥,这意味着你的主私钥可以离线放置;你可以用你的主公钥生成子公钥去收款,完全不必要担心私钥的安全。

     BIP32、BIP39、BIP44

     正所谓无规矩不成方圆,了解原理之前,我们先了解一些规矩。现在市场上的大部分数字货币钱包都支持HD Wallet,而且用户可以通过助记词在不同的HD Wallet之间相互导入导出账户;之所以这么方便就是因为大家都遵循了BIP32、BIP39、BIP44。

    BIP32:定义 Hierarchical Deterministic wallet (HD Wallet)的核心提案。钱包可以通过种子来生成主私钥,然后派生海量的子私钥和地址,按照树状结构存储。

    BIP39:将由于种子是一串很长的随机数,不利于记录,所以我们将种子转化为一组单词表示,一般由12个单词构成,称之为助记词(mnemonic code,phrase);例如:

good gather ranch lunar edit hospital comic final fee coin athlete rescue

    BIP44:提出了5层的路径建议,在 BIP32 的基础上,赋予树状结构中的各层不同的意义,以支持多币种,多账户。用户只需一个种子,就能控制所有币种,所有账户的钱包。各层定义如下:

m / purpose' / coin_type' / account' / change / address_index

其中的 purporse' 固定是 44',代表使用 BIP44。而 coin_type' 用来表示不同币种,例如 Bitcoin 就是 0',Ethereum 是 60'。'account'表示账户。'change',常量0用于外部链,常量1用于内部链(也称为更改地址)。外部链用于在钱包外部可见的地址(例如,用于接收付款)。内部链用于在钱包外部不可见的地址,用于返回交易变更。'address_index',表示生产的地址序号,地址按顺序递增的方式从索引0开始编号。

    从种子到私钥

  1. 生成一个助记词(BIP39 mnemonic code)。

  2. 助记词使用PBKDF2转化为种子。

  3. 种子通过使用HMAC-SHA512生成主私钥。

  4. 通过主私钥派生出子私钥(BIP32),其中节点布局由BIP44设置。

    既然mnemonic code这么重要,除了需要用户进行备份外,那些热钱包是如何保护的私钥,助记词之类的呢?

    例如以太坊目前官方钱包采用 KDF 的形式,也就是我们常说的 Keystore 的形式。私钥与公钥将会以加密的方式保存为一份文件叫 keystore,中文可以叫签名证书,由于是私钥公钥放在一起,相当于钥匙和锁放在一起保存在一个保险箱,必然是需要另外一把钥匙也就是密码上锁的。 所以生成keystore的时候的密码非常重要,忘记了密码意味着这个证书打不开无法使用. 所以备份 keystore 同时需要备份对应的密码。密码忘记了是无法恢复钱包的.

     而 MetaMask是将助记词加密后存在浏览器的Local Storage中,而加密需要使用用户设置的密码。其他钱包保存私钥或者助记词,是加密保存的,如果不那么做,就等同于明文密码。私钥是可以进行AES加密的,但是在使用时还是要解密。明文密码没有问题,明文并不代表就一定不安全。加密过的也未必就安全。当然还有一次中心化钱包和交易所,都是把一定比例的币进行冷存储,留一些放在热钱包里,做到热冷分离。
 

   

猜你喜欢

转载自blog.csdn.net/xq723310/article/details/82940594
今日推荐