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

转载:https://zhuanlan.zhihu.com/p/34184347

分类

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

Bitcoin Address + Private key = Bitcoin Wallet

根据密钥之间是否有关联可把钱包分为两类:nondeterministic wallet 和 deterministic wallet

  • nondeterministic wallet:密钥对之间没有关联
  • deterministic wallet: 密钥对由一个原始的种子主密钥推导而来。最常见的推导方式是树状层级推导 (hierarchical deterministic) 简称 HD

比特币钱包 (Bitcoin Core) 生成密钥对之间没有任何关联,属于 nondeterministic wallet ,这种类型的钱包如果想备份导入是比较麻烦的,用户必须逐个操作钱包中的私钥和对应地址。deterministic wallet 基于 BIP32 (Bitcoin Improvement Proposal 32) 标准实现,通过一个共同的种子维护 n 多私钥,种子推导私钥采用不可逆哈希算法,在需要备份钱包私钥时,只备份这个种子即可(大多数情况下的种子是通过 BIP44 生成了助记词,方便抄写),在支持 BIP32, BIP44 标准的钱包只需导入助记词即可导入全部的私钥。

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

符合 BIP-32/BIP-44 标准的 HD 钱包

上文提到 Deterministic wallets 能够通过一个种子推导出很多密钥,它基于 BIP32 标准实现,种子能够推导出主密钥 (master key), 主密钥推导出子密钥 (children keys),子密钥推导出孙密钥 (grandchildren keys), 以此递推。

  • 有树状特征的 HD 钱包非常适用于有组织结构的公司使用
  • HD 钱包能够在不需知道私钥的前提下生成大量的公钥,非常适用于只负责收款的服务

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

BIP32/BIP39 标准详解

BIP39 标准定义了钱包助记词和种子生成规则。

通过九个步骤即可生成钱包助记词和种子:

  • 步骤 1~6 生成助记词
  • 步骤 7~9 把前六步生成的助记词转化为 BIP32 种子

生成助记词

  1. 规定熵的位数必须是 32 的整数倍,所以熵的长度取值位 128 到 256 之间取 32 的整数倍的值,分别为 128, 160, 192, 224, 256;
  2. 校验和的长度为熵的长度/32 位, 所以校验和长度可为 4,5,6,7,8 位;
  3. 助记词库有 2048 个词,用 11 位可全部定位词库中所有的词,作为词的索引,故一个词用 11 位表示,助记词的个数可为 (熵+校验和)/11,值为 12,15,18,21,24

熵(bits)校验和(bits)熵 + 校验和 (bits)助记词长度128413212160516515192619818224723121256826424

  1. 生成一个长度为 128~256 位 (bits) 的随机序列(熵)
  2. 取熵哈希后的前 n 位作为校验和 (n= 熵长度/32)
  3. 随机序列 + 校验和
  4. 把步骤三得到的结果每 11 位切割
  5. 步骤四得到的每 11 位字节匹配词库的一个词
  6. 步骤五得到的结果就是助记词串

 

 

通过助记词生成种子

助记词由长度为 128 到 256 位的随机序列(熵)匹配词库而来,随后采用 PBKDF2 function 推导出更长的种子(seed)。生成的种子被用来生成构建 deterministic Wallet 和推导钱包密钥。

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

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

  • 助记词句子作为密码
  • "mnemonic" + passphrase 作为盐
  • 2048 作为重复计算的次数
  • HMAC-SHA512 作为随机算法
  • 512 位(64 字节)是期望得到的密钥长度

DK = PBKDF2(PRF, Password, Salt, c, dkLen)

 

 

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

主私钥和主链码

首先是从根种子生成主密钥 (master key) 和主链码 (master chain code)

 

 

上图中根种子通过不可逆 HMAC-SHA512 算法推算出 512 位的哈希串,左 256 位是 Master Private key(m), 右 256 位是 master chain code, 通过 m 结合推导公钥的椭圆曲线算法能推导出与之对应的 264 位 master public Key (M)。chain code 作为推导下级密钥的熵。

子私钥推导

HD 钱包使用 CKD(child key derivation) 函数从父密钥(parent keys)推导子密钥(child keys),CKD 由下列三个要素做单向散列哈希(one way hash function) 。

  • 父密钥 (没有压缩过的椭圆曲线推导的私钥或公钥 ECDSA uncompressed key)
  • 链码作为熵 (chain code 256 bits)
  • 子代索引序号 (index 32 bits)

 

 

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

扩展密钥

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

  1. 包含私钥的扩展密钥用以推导子私钥,从子私钥又可推导对应的公钥和比特币地址
  2. 包含公钥的扩展密钥用以推导子公钥

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

子公钥推导

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

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

子私钥推导流程和子公钥流程基本一样,差异之处有两点:

  1. 把子私钥推导过程中私钥替换为公钥。
  2. 子公钥推导出对应出与之的子链码

 

 

增强扩展密钥推导

密钥需加强保管以免泄漏,泄漏私钥意味着对应的地址上的币可被转走、泄漏公钥意味着 HD 钱包的隐私被泄漏。增强密钥推导 (Hardened child key derivation) 解决下述两个问题:

  1. 虽然泄漏公钥并不会导致丢币,但含有公钥的扩展密钥泄漏会导致以此为根节点推导出来的扩展公钥全部泄漏,一定程度上破坏了隐私性。
  2. 泄漏扩展公钥加上该公钥推导出的后任一代扩展公钥对应的私钥有被推导出该扩展公钥的所有后代私钥的可能性

于此,BIP32 协议把 CKD 函数改为 HKD (hardened key derivation formula) 生成增强密钥推导函数。

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

 

 

HD 钱包密钥路径表示

HD 路径密钥描述m/0从主私钥(m) 推导出的第一代的第一个子私钥m/0/0从第一代子密钥m(0)推导出的第二代第一个孙私钥m/0'/0从第一代增强密钥 (m/0')推导出得第二代第一个孙密钥m/1/0从第一代的第二个子密钥推导出的第二代第一个孙密钥

参考和推荐阅读

  • List of address prefixes
  • PBKDF2 算法概述
  • 分层确定性钱包 HD Wallet 介绍
  • Bitcoin developer-guide#wallets
  • Working with Bitcoin HD wallets II: Deriving public keys

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/65361.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中国对数字货币的态度及政策

一、关于数字货币官方最早发表的一份通告是2013年: 北京时间2013年12月5日央行网站消息,为保护社会公众的财产权益,保障人民币的法定货币地位,防范洗钱风险,维护金融稳定,中国人民银行、工业和信息化部、中…

UiBot 浏览器输入

拖拉组件”启动新的浏览器”,该组件有多种参数输入方式,如图: 执行流程,结果如图,IE浏览器已经打开rpazj网站 拖拉组件”启动新的浏览器”,该组件有多种参数输入方式,如图:执行流程&…

完美解决浏览器主页被hao123劫持,打开浏览器时自动进入hao123主页怎么办

完美解决浏览器主页被hao123劫持 首先使用排除法: 第一步,先查看浏览器快捷方式,右键—>属性,看看文件位置最后面有没有被篡改成别的路径,如果有,删掉后面的路径就行 如果位置路径是正常的,那…

浏览器主页被hao123劫持的解决方案

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

破除谷歌浏览器Google Chrome启动时打开hao123,2345等流氓网页

相信都遇到过这样的情况:自己的谷歌浏览器明明已经设置了启动时打开自己设定的特定网页,但是启动时还是打开了hao123,2345等流氓网页,有一个很简单的小技巧可以解决这个烦人的问题! 先设置谷歌浏览器启动打开某个特定网…

成功解决“谷歌浏览器打开是毒霸网址大全”问题,亲测有效(同样适用被hao123,或者2345浏览器篡改)

最开始一定要把电脑安装的360和电脑管家之类的退出。 第一步:发现问题的存在 在谷歌网址中输入:chrome://version,再按enter键 如果返回如图: 那说明你的谷歌被hao123浏览器篡改了。(如果你返回的蓝色部分是www.dub…

十分好用的跨浏览器测试工具,建议收藏!!!

跨浏览器测试是确保web应用程序的功能在不同浏览器、浏览器版本和操作系统直接保持功能和质量一致的过程,可以为用户提供更好的用户体验,帮助企业通过更易访问的网站获得满意客户,可以使web应用程序在不同平台上兼容。在跨浏览器测试过程中&a…

10个免费的顶级跨浏览器测试工具

1.Browsera Browsera 可以测试和报告在您的网站上的跨浏览器布局的差异和脚本错误。 Browsera不同于其他跨浏览器测试服务。其他服务,如Litmus,Browsershots,BrowserLab,以及 SuperPreview,它们仅仅截取每一个特定的页…

超级浏览器:创建多套UA实现防关联

前面的文章,我们为大家详细介绍了Cookies的功能以及它在防关联过程中的作用需要复习的小伙看这里: 超级浏览器的Cookies实现跨境电商防关联 咱们在前面说过,Cookies相当于用户的网络身份证,里面记录了用户的身份、上网喜好和登录…

10款最佳跨浏览器测试工具,建议收藏

1、前言 跨浏览器测试工具对于检查您的网络应用程序在桌面端、移动端、平板电脑和其他设备类别中是否正常工作至关重要。这些工具检查 UI 不一致、验证代码、跨 Chrome、Firefox、IE、Edge、Safari 和其他浏览器的响应能力。它们有助于跨设备和平台提供一致的用户体验。 什么…

打开谷歌浏览器弹出hao123(俗称被绑架)(SB-hao123)

1.打开google浏览器在地址栏输入:chrome://version 2. 右键谷歌浏览器的快捷方式,打开谷歌浏览器的属性窗口,找到目标里面hao123的网址,直接改为你想启动时打开的网址(不加也行),我的就没加&…

Chrome/Firefox浏览器主页被篡改为hao123的终极原因

小弟今天早上起来发现自己电脑的浏览器主页被篡改为hao123了!想来我最近也没有下过什么不明软件啊!于是开始了一系列搜索,各种查杀、扫描、查看注册表、查看快捷方式属性等等,还按照热门知乎帖子(https://www.zhihu.co…

推荐17款最好用的跨浏览器测试工具

市面上有很多不同的浏览器,每种浏览器都有数百万用户。因此,在构建一个网站或 Web 应用程序时,就需要测试它与不同浏览器的兼容性。最好、最方便的方法是使用跨浏览器检查工具。 如果你正在寻找解决方案,可以看看下面这些可靠且全…

跨境群店安全运营神器—超级浏览器

有点跨境电商经验的跨境人都知道,物理隔离是比较安全稳妥的防关联办法。但是多台电脑多条网络的办公方式,不仅设备成本高,人员的费用也高得吓人。 后来大家开始使用VPS来防关联。VPS是一种虚拟专用服务器,它是一种将一台服务器分割…

谷歌以及所有浏览器被篡改hao123

谷歌以及所有浏览器被篡改hao123 问题解决方案 问题 百度了所有的方法都没有效果,那你看看这篇文章,打开C:\Users\自己的名字\AppData\Local,里面有一些文件CSChrm,打开它,看他的签名, 上海都点网络&#…

实用工具推荐,浏览器必备宝藏插件:Wetab新标签页

打开浏览器,你的起始页是否充满了广告和各种乱七八糟的信息呢?或者过于单调,而失去了某些你想要的功能? 这里给大家推荐一个在Chrome浏览器和edge浏览器上都能愉快使用的浏览器插件——Wetab新标签页。没有广告、页面干净美观且具…

所有浏览器主页都变成hao123,hao123劫持浏览器(亲测有效)

如何删除hao123主页,修改了浏览器主页不生效,可能你的浏览器被劫持了。 下班回到家,打开浏览器,遇到一件很不愉快的事情,怎么主页变成hao123了 ??? 首先检查自己的主页设置&#x…

我受不了同学们的求职简历了,大家的简历应该这么写-2022版

本文不定期更新。最新更新-2022.12 今天有个同学让我帮忙看简历,一看不知道,看了笑破肚皮。。。感觉之前给同学们做的求职培训中的简历制作方法白做了~~ 阿西吧~ 那求职简历应该怎么做? 一、内容要切重要点,专业素养才是重点&…

求职简历这样写,轻松搞定面试官

如果你是从网上投的简历,那么必然会经过 HR 的筛选,一张简历 HR 可能也就花 10 秒钟看一下,就会决定你这一关是成功还是失败。 就算你通过了筛选,后面的面试中,面试官也会根据你的简历来判断你究竟是否值得他花费很多…

问卷调查怎么帮助餐饮行业?

在餐饮行业中,顾客的口碑占据非常重要的地位,直接影响着门店的销售额。好口碑能一传十、十传百,为门店带来持续不断的流量和收益。所以,在顾客体验这一块,餐饮门店要尤为重视。 某餐饮品牌作为全球知名品牌&#xff0…