zoukankan      html  css  js  c++  java
  • 分分钟搞懂 HD 钱包

    转自:http://blog.sina.com.cn/s/blog_12ce70a430102v8c7.html

    第一次看到 HD 这个词被用在比特币钱包中时,很容易就把它理解成硬件(Hardware)钱包,其实它是分层确定性(Hierarchical Deterministic)钱包的缩写 HD Wallets。
    “分层确定性”这个词乍看起来很“高大上”,各类文档也把它描述的“云里雾里”的,其实原理本身很简单,两句话就能说清楚:
    首先,要用一个随机数来生成主(根)私钥,这和任何一个比特币钱包生成任何一个私钥没任何区别;
    然后,再用一个确定的、不可逆的算法,基于主私钥生成任意数量的子私钥;
    看到了没?很简单吧?

    那为什么要用“确定、不可逆”的算法呢?因为“确定”才能保证从一个主私钥可以生成出全部的子私钥,而“不可逆”则是为了确保不能通过子私钥反推出主私钥。
    例如,SHA256 就可以看成是“确定、不可逆”的算法,我们可以很容易的使用 SHA256 设计出一个 HD 模型:SHA256(seed + n)
    在这个模型里,seed 为主私钥,n=(1,2,3......)计算出来的结果对应于第(1,2,3......)个子私钥。
    这其实就是类型1确定性钱包(Type1 HD Wallets),当然,我们还可以基于更多“确定、不可逆”的算法来设计其它 HD 模型,比如 BIP32,再比如类性2确定性钱包(Type2 HD Wallets)。算法可以复杂,但原理都一样,很简单,而且,只要 SHA256 是安全的,HD 模型就是安全的。

    HD 模型在数学上有一个非常“好”的特性:只需要主公钥,就可以生成出任意数量的子公钥。也就是说,无需私钥介入(主私钥和子私钥),就能基于主公钥生成新(公钥)地址,而这些地址其实都能被主私钥所控制。
    这个特性使得 HD 模型在过去一年里被越来越多的应用于企业和个人比特币钱包解决方案,可惜,优点往往伴随着代价,某些情况下,代价甚至是“致命的”。

  • 相关阅读:
    PHP漏洞全解(四)-xss跨站脚本攻击
    PHP漏洞全解(三)-客户端脚本植入
    Oauth2 接口api
    Linux重复执行上条命令
    Nginx配置文件nginx.conf中文详解
    资料收集
    Apache Rewrite常用设置说明
    微信分享,使用js,分享给朋友,朋友圈,QQ微博
    SSHFS
    Navicate
  • 原文地址:https://www.cnblogs.com/liuhaitao/p/4925035.html
Copyright © 2011-2022 走看看