OKCoin

教你如何正确使用HD Wallets

币定行叶桂平 发布在 技术指南 11 9126

HD Wallets:扩展性树型钱包(hierarchical deterministic wallets)
参考地址:https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki

Snip20141114_1

原理简介:

1.生成HD Wallets钱包的时候除了会生成主私钥(master private key)和主公钥(master public key),还会生成一个chain code

2.利用master private key + chain code可以得到指定的子私钥(sub private key);

3.利用 master public key + chain code可以得到指定的子公钥(sub-public key);

4.为了方便起见,HD Wallets引入了extended的概念,以方便使用。即:
扩展型私钥extended private key包含了private key和chain code
扩展型公钥extended public key包含了public key 和 chain code

5.每个private/public key可以派生出2^32个sub-private/public key,编号用index表示。而所有派生出来的sub-private/public keyy可以继续派生2^32个sub-sub private/public key,一直持续下去…… 这就有了层级(dept)的概念。

6.编号(index)和层级(dept)就构成了路径(PATH),就像我们的文件夹路径,不过这里的节点名都是数字。m(根节点)的派生出来的子节点的路径是m/0到m/2^32-1,而m/0派生出来的子节点是m/0/0到m/0/2^32-1 。

7.从上面几点很容易理解,假设要得到m/0/0的公钥,只需要m/0的公钥即可,而非一定需要m的公钥(即主公钥),私钥同理。

HD Wallets的高级使用方法BIP44

BIP44参考地址:
https://github.com/bitcoin/bips/blob/master/bip-0044.mediawiki
BIP44只是一个规则,它提出了5层的路径建议,如下:
m/purpse’/coin_type’/account’/change/address_index
各层的意义如下:

1.Purpose:确定路径规则,BIP44一般默认为44’index为0x8000002C(即2^31-1+44)

2.Coin_type:币种,一般推荐0’表示Bitcoin。【其他币种也可以使用的,只不过在从公钥(public key)生成地址(Address)的时候算法不同而已。】

3.Account:顾名思义,是账户的意思。从0’开始。可以理解为Bitcoin-QT中的钱包文件。

4.Change:找零。一般使用0对外收款,1接受每次交易的找零

5.Address_index:地址索引

BIP44的规则使得HD Wallets非常强大。用户只需要保存一个主私钥,就能控制所有币种,所有账户的钱包。

Account(账户)可以有热账户也可以有冷账户。Account各自有自己的“Account主私钥”和“Account主公钥”(例:m/44’/0’/0’)
如果给某个网站收钱或第三方监管,仅需提供Account主公钥和chain code即可,而不需要提供HD Wallets主公钥(master public key),其他的Account的地址如果没有发生过签名,那么依然是冷钱包(冷的Account)。

BIP44的第4层也为找零机制提供了很好的支持。在支持找零机制的情况下,只要用户不使用同一地址多次收款,那就完全可以避免同一个私钥多次签名的情况发生。也就没有了私钥暴露的风险。

安全性问题

1. 网上有人谈论到HD Wallets如果泄露一个子私钥和主公钥就能推算出主私钥,导致整个HD Wallets会被暴露。关于这个问题,早就已经有解决方案了:

a) 早在2014年01月15日BIP32就已经引入了hardened keys的概念,并增加了明确的转换算法。Hardened keys即index>=0×80000000 (index>=2^31)。引入的目的就是为了防止由子私钥倒推出父私钥。

b) 上面讲述BIP44的时候,推荐的5层总有3层采用了hardened keys

c) BIP44提供了Account的概念,使用过程中不用提供master public key,只需要提供Account的public key就能管理整个Account下面的地址。而且这样更能结算计算其子地址和公钥的时间。如果黑客掌握了这个Account中的一个子私钥和Account主公钥,那么也只能获得本Account的控制权,而无法获得其他Account的控制权。

2. 有朋友也提到一个私钥如果多次签名使用重复的“随机数”会有私钥泄露的风险,以此来证明HD Wallets的风险比其他wallet大。这个问题,很早以前就有人提出过。这里想说一下几点:

a) 随机数的问题已经越来越收到人们的重视,软件级别的解决方案一般是采用RFC6979算法,或者外部设备采集(触摸屏或鼠标采集运动轨迹,摄像头采集画面,麦克风采集声音,陀螺仪采集姿态和运动轨迹等等);硬件级别一般采用RNG和晶振来共同完成,这种方案采集噪音、温度、电压等外界因素得出。这些都可以有效的避免“随机数”的重复;

b) 利用找零机制可以有效防止地址/私钥的重复使用。这一点上HD Wallets的表现是卓越的。类似Bitcoin-QT的钱包,在生成钱包的时候会生成若干数量地址(ECKey即公私钥对),当长期使用后,地址使用完了会再创建一些新的地址(ECKey即公私钥对),如果此时没有及时更新备份,那么很有可能就丢失了这些先地址的比特币。而HD Wallets不存在这种问题。

以上是本人对HD Wallets的肤浅了解。工科生天生文笔不好,各位看客多多海涵。不对之处欢迎拍砖!

币定行叶桂平
2014年11月14日

版权声明: by nc" sa 作者保留权利。文章为作者独立观点,不代表巴比特立场。

评论:11

您需要登录后才可以回复 登录|注册
    月岩__
    月岩__ 732 天前

    超赞的![心][心]//@元气衰退喵Degenerate: //@潺晓才不是性知识咨询洞呢哼: 好腿 //@Coupe___芙兰:卧槽让咱安静地死一死//@锋仔冷暖自知: 赞赞赞//@東方project專题站: 美咲好评~大长腿好评~~[doge]

    +1
    +1
    我要点评
    比太钱包
    比太钱包 733 天前

    回复@btcrobot:老大,您要是都“小白”,那小太这“葱白”就没法混了哈[可怜]

    +1
    +1
    我要点评

    黄勃这么抢镜好吗[酷]

    +1
    +1
    我要点评
    btcrobot
    btcrobot 733 天前

    回复@比太钱包:嗯,我小白,正在学习,收集资料

    +1
    +1
    我要点评
    比太钱包
    比太钱包 733 天前

    另外,菠菜大神,要不是您昨天问了这个事,小太其实都没想过要回应的,BIP44只是个HD的用法哈,没什么神奇的[可爱]

    +1
    +1
    我要点评
    比太钱包
    比太钱包 733 天前

    [汗] 逻辑一样,BIP44只是一种管理方式,这没什么好说的

    +1
    +1
    我要点评
    btcrobot
    btcrobot 733 天前

    教你如何正确使用HD Wallets | 巴比特 http://t.cn/R7kXdlN @比太钱包 怎么看? @币定行叶桂平

    +1
    +1
    我要点评
    Author Image
    kevin 745 天前

    不错

    +1
    +1
    我要点评
    招财币冷月
    招财币冷月 750 天前

    关于HD钱包很不错的论述,转@比太钱包 阅。。//@Moke-墨客: @招财币冷月 //@币定行叶桂平: 转发微博

    +1
    +1
    我要点评
    癫痫小蒙牛
    癫痫小蒙牛 750 天前

    //@Moke-墨客: @招财币冷月 //@币定行叶桂平: 转发微博

    +1
    +1
    我要点评
    假米日眼的a
    假米日眼的a 750 天前

    双11败了这么多,想剁手没?还有机会,微博福利#领败家补贴#,必中现金,大奖是1111元哦,还没剁手的小伙伴再给一次机会吧~[偷笑] http://t.cn/R7rrE05

    +1
    +1
    我要点评