您好、欢迎来到现金彩票网!
当前位置:2019欢乐棋牌 > 主密钥 >

数字货币钱包 - 助记词 及 HD 钱包密钥原理

发布时间:2019-07-08 22:39 来源:未知 编辑:admin

  区块链相关的话题持续发酵之时,应该不少人知道加密货币钱包,钱包是普通用户与加密货币系统交互的入口,各种形态的钱百花齐放,手机钱包、桌面钱包、硬件钱包、网页钱包和纸质钱包等。通过钱包可以无国界无限制地转移你的数字资产。从开发者的角度看,钱包的作用是管理用户的私钥、通过私钥签名交易管理用户在区块链上的数字货币。

  比特币钱包 (Bitcoin Core) 生成密钥对之间没有任何关联,属于 nondeterministic wallet ,这种类型的钱包如果想备份导入是比较麻烦的,用户必须逐个操作钱包中的私钥和对应地址。

  deterministic wallet 基于BIP32(Bitcoin Improvement Proposal 32) 标准实现,通过一个共同的种子维护 n 多私钥,种子推导私钥采用不可逆哈希算法,在需要备份钱包私钥时,只备份这个种子即可(大多数情况下的种子是通过 BIP44 生成了助记词,方便抄写),在支持 BIP32, BIP44 标准的钱包只需导入助记词即可导入全部的私钥。

  principle of avoiding address reuse: 提倡避免地址重复使用,当数字货币地址已经发生过一次转账就存在私钥泄漏的可能性。

  BIP32 标准的种子是一个随机 16 字节的 16 进制的字符串。如果能够适用英文单词作为助记词无疑会降低种子备份及恢复钱包难度,BIP39 标准就是为了解决助记词的需求,通过随机生成 12 ~ 24 个容易记住的单词,单词序列通过 PBKDF2 与 HMAC-SHA512 函数创建出随机种子作为 BIP32 的种子。

  在密码学中,Key stretching技术被用来增强弱密钥的安全性,增加了暴力破解 (Brute-force attack) 对每个可能密钥尝试攻破的时间,增强了攻击难度。各种编程语言原生库都提供了 key stretching 的实现。PBKDF2(Password-Based Key Derivation Function 2) 是常用的 key stretching 算法中的一种。基本原理是通过一个为随机函数(例如 HMAC 函数),把明文和盐值作为输入参数,然后重复进行运算最终产生密钥。

  为了从助记词中生成二进制种子,BIP39 采用 PBKDF2 函数推算种子,其参数如下:

  BIP32标准定义了 HD 钱包的生成规则。HD 钱包中的所有层级密钥都是由根种子推导而来,通常根种子由上述步骤 BIP39 生成。所以只需通过助记词就能备份和恢复钱包,这也是 HD 钱包的缺陷,如果你的根种子泄漏,那么全部密钥随之都泄漏。

  索引号个数为 2 的 32 次方,每个父级密钥能推导出该数目一半的子密钥 (

  索引号从 0x00 到 0x7fffffff (0 to 2 的 21 次方减 1) 会生成正常的密钥;索引号从 0x80000000 到 0xffffffff 会生成增强密钥)。CKD 采用不可逆的 HMAC-SHA512 不可逆加密算法,子密钥不能向上推导出父密钥、同时也不能水平推导出同一级的密钥。

  CKD 推导子密钥的三个元素中,其中父密钥和链码结合统称为扩展密钥 (Extended keys)。256 位的密钥和 256 位的链码串联起来的 512 位就是扩展密钥。

  扩展密钥使用Base58Check算法加上特定的前缀编码,编码得到的包含私钥的前缀为xprv, 包含公钥的扩展密钥前缀为xpub,相比比特币的公私钥,扩展密钥编码之后得到的长度为 512 或 513 位。

  上述方法中通过推导出的私钥可推导出对应公钥,但 HD 钱包非常好用的特征之一就是在隐藏私钥的前提下通过公钥推导出子公钥,极大加强安全性。在只需要生成地址接受比特币而无权消费的场景下非常有用,通过公钥扩展密钥能生成无穷尽的公钥和比特币地址。

  HD 钱包通过公钥推导子公钥的使用场景:在接受数字货币支付的电商系统中,Web 服务中集成了比特币扩展公钥服务,系统为客户的每笔订单生成一个接受比特币支付的地址,不涉及到私钥的 web 服务极大地减低了被盗币的可能性。如果不采用 HD 钱包,通常都是在物理隔绝的服务器中批量生成比特币地址,然后再导入到电商系统,这种方式需要定时生成并导入地址维护防止 web 服务系统把预先导入的地址用完。

  密钥需加强保管以免泄漏,泄漏私钥意味着对应的地址上的币可被转走、泄漏公钥意味着 HD 钱包的隐私被泄漏。

  CKD 函数以推导扩展密钥的序列号 ( 0x00 到 0x7fffffff)、父链码和父公钥生或父私钥成子链码和子公钥,子私钥从父私钥推导;而 HKD 通过父私钥、父链码和推导增强扩展密钥的序列号 (0x80000000 到 0xffffffff) 增强子私钥和增强子链码。

http://firmymedyczne.com/zhumiyue/332.html
锟斤拷锟斤拷锟斤拷QQ微锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷锟斤拷微锟斤拷
关于我们|联系我们|版权声明|网站地图|
Copyright © 2002-2019 现金彩票 版权所有