分分钟搞懂 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 模型在过去一年里被越来越多的应用于企业和个人比特币钱包解决方案,可惜,优点往往伴随着代价,某些情况下,代价甚至是“致命的”。
分分钟搞懂 HD 钱包的更多相关文章
- 分分钟搞懂rank() over(partition by)的使用
一.rank() over(partition by ...order by) 解释:partition by用于给结果集分组,如果没有指定那么它把整个结果集作为一个分组. 二.语法:ROW_NUM ...
- 分分钟搞懂union与union all
SQL UNION 操作符 UNION 操作符用于合并两个或多个 SELECT 语句的结果集. 请注意,UNION 内部的 SELECT 语句必须拥有相同数量的列.列也必须拥有相似的数据类型.同时,每 ...
- 理解开发HD 钱包涉及的 BIP32、BIP44、BIP39
如果你还在被HD钱包.BIP32.BIP44.BIP39搞的一头雾水,来看看这边文章吧. 数字钱包概念 钱包用来存钱的,在区块链中,我们的数字资产都会对应到一个账户地址上, 只有拥有账户的钥匙(私钥) ...
- 夯实Java基础系列3:一文搞懂String常见面试题,从基础到实战,更有原理分析和源码解析!
目录 目录 string基础 Java String 类 创建字符串 StringDemo.java 文件代码: String基本用法 创建String对象的常用方法 String中常用的方法,用法如 ...
- 彻底搞懂Javascript的“==”
本文转载自:@manxisuo的<通过一张简单的图,让你彻底地.永久地搞懂JS的==运算>. 大家知道,==是JavaScript中比较复杂的一个运算符.它的运算规则奇怪,容让人犯错,从而 ...
- 完全搞懂傅里叶变换和小波(2)——三个中值定理<转载>
书接上文,本文章是该系列的第二篇,按照总纲中给出的框架,本节介绍三个中值定理,包括它们的证明及几何意义.这三个中值定理是高等数学中非常基础的部分,如果读者对于高数的内容已经非常了解,大可跳过此部分.当 ...
- 完全搞懂傅里叶变换和小波(1)——总纲<转载>
无论是学习信号处理,还是做图像.音视频处理方面的研究,你永远避不开的一个内容,就是傅里叶变换和小波.但是这两个东西其实并不容易弄懂,或者说其实是非常抽象和晦涩的! 完全搞懂傅里叶变换和小波,你至少需要 ...
- 不想再被鄙视?那就看进来! 一文搞懂Python2字符编码
程序员都自视清高,觉得自己是创造者,经常鄙视不太懂技术的产品或者QA.可悲的是,程序员之间也相互鄙视,程序员的鄙视链流传甚广,作为一个Python程序员,自然最关心的是下面这幅图啦 我们项目组一值使用 ...
- 来一轮带注释的demo,彻底搞懂javascript中的replace函数
javascript这门语言一直就像一位带着面纱的美女,总是看不清,摸不透,一直专注服务器端,也从来没有特别重视过,直到最近几年,javascript越来越重要,越来越通用.最近和前端走的比较近,借此 ...
随机推荐
- springcloud(一)-初识
springCloud简介 尽管springCloud带有“cloud”字样,但它并不是云计算解决方案,而是在SpringBoot基础上构建的,用于快速构建分布式系统的通用的工具集.从技术架构上降低了 ...
- Oracle初始化数据库表空间、用户、表(索引、分区)等
[oracle@bogon orcl]$ sqlplus sys/sys as sysdba SQL*Plus: Release 11.2.0.1.0 Production on Wed Oct 8 ...
- Android自动化之AccessibilityService
简介demo示例说明Manifest声明AccessibilityService的XML配置文件创建继承自AccessibilityService的服务类MainActivity检测服务是否开启UiA ...
- 前端中用到的图片(png图片)
作为前端工程师,将设计师的设计稿转化为html页面,其中有一个必不可少的环节就是将psd文件中的一些图片随心所欲的使用,而我们经常用到的就是png图片. 第一部分:基本介绍 首先我们先对比几种图片: ...
- 1.4 js基础
1.eval(字符串),将字符串变成可执行的语句. 太强大了,太危险了 .目前不要去使用. 注入攻击 2.作用域[起作用的范围] 全局变量:声明在函数外 ...
- Mybatis 关联查询(三)
多对多的管理查询结果映射 1. 需求: 查询用户购买的商品信息 2. 分析: (1)用户和商品没有直接关联 (2)用户和订单进行了关联,订单和订单明细进行了关联,订单明细和商品进行了关联,因此 ...
- zato——Channels Outgoing connections
Channels,服务获得请求.方式 AMQP JMS WebSphere MQ plain HTTP SOAP ZeroMQ 其中,只有HTTP是同步的 Plain HTTP和SOAP暴漏服务直接通 ...
- Java入门系列-21-多线程
什么是线程 在操作系统中,一个应用程序的执行实例就是进程,进程有独立的内存空间和系统资源,在任务管理器中可以看到进程. 线程是CPU调度和分派的基本单位,也是进程中执行运算的最小单位,可完成一个独立的 ...
- GridView 基本使用
项目中实例一 <asp:GridView ID="gvBatchReceive" runat="server" AutoGenerateColumns=& ...
- mariadb sequence
MariaDB 10.3 正式版推出后,有了像 Oracle.PostgreSQL 里的序列特性. 同时表字段AUTO_INCREMENT原特性还保持,但是sequence特性在某些特定情境还是很有用 ...