深入理解比特币中非强化密钥的不安全原因
2017-12-23 23:33
218 查看
比特币中,确定性钱包给钱包管理和钱包在电子商务和公司、组织中授权使用比特币提供了方便,可是在非强化的情况下,会存在不安全的问题(存在泄漏父私钥的可能)。
为什么会这样呢?
下面我简要分析这个破解的过程:
如果我获得了父公钥扩展地址(包含父公钥和父链码),以及子私钥,那么是可以获得父私钥的,由了父私钥,那么就可以解锁其下所有比特币地址的交易。
我们先来看看子密钥的形成过程,依据BIP-0032的说明,非强化的密钥有如下计算过程:
请看下图:
子私钥时通过父公钥+父链码+索引通过HAMC-SHA512生成的一个512位的结果,取高256位+私钥(注意,这里是重点),子链码取低256位。
由于扩展公钥是公布出来的(比如攻击电商服务器)可以获取,那么相当于只要获取子私钥的索引,就可以计算子私钥和子链码,如果我们拥有私钥,那么通过暴力破解是可以计算出这里的索引编号的(通过不断尝试,我推测的,可能有更好的办法),从而获得完整的HMAC-SHA512的结果,从而通过减法(父私钥 = 子私钥 - HASH结果高256位)计算得出。
拥有了父私钥和父链码,就可以生成所有子节点的私钥和链码,从而获得子节点的所有权限!
精通比特币(第二版)
Derivation of parent private key from non-hardened child
为什么会这样呢?
下面我简要分析这个破解的过程:
如果我获得了父公钥扩展地址(包含父公钥和父链码),以及子私钥,那么是可以获得父私钥的,由了父私钥,那么就可以解锁其下所有比特币地址的交易。
我们先来看看子密钥的形成过程,依据BIP-0032的说明,非强化的密钥有如下计算过程:
请看下图:
子私钥时通过父公钥+父链码+索引通过HAMC-SHA512生成的一个512位的结果,取高256位+私钥(注意,这里是重点),子链码取低256位。
由于扩展公钥是公布出来的(比如攻击电商服务器)可以获取,那么相当于只要获取子私钥的索引,就可以计算子私钥和子链码,如果我们拥有私钥,那么通过暴力破解是可以计算出这里的索引编号的(通过不断尝试,我推测的,可能有更好的办法),从而获得完整的HMAC-SHA512的结果,从而通过减法(父私钥 = 子私钥 - HASH结果高256位)计算得出。
拥有了父私钥和父链码,就可以生成所有子节点的私钥和链码,从而获得子节点的所有权限!
参考
BIP-00032精通比特币(第二版)
Derivation of parent private key from non-hardened child
相关文章推荐
- 深入理解Java:SimpleDateFormat安全的时间格式化
- Note7燃损原因公布 三星汲取经验教训强化安全措施
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解java虚拟机-第13章-线程安全与锁优化
- 深入理解Java:SimpleDateFormat安全的时间格式化 ;
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- Note7燃损原因公布三星汲取经验教训强化安全措施
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Java:SimpleDateFormat安全的时间格式化
- java基础强化——深入理解java注解(附简单ORM功能实现)
- 深入理解Android安全平台之扎绳篇
- 深入理解 C++ 指针(九)---指针的安全问题
- 深入理解Flash Player的安全域(Security Domains)转载
- 深入理解Java:SimpleDateFormat安全的时间格式化
- 深入理解Flash Player的安全域(Security Domains)