进入数字货币的领域,我们就不得不接触钱包这个概念,而各种名目繁多的数字钱包甚至比区块链的基础理论还让人抓耳挠腮。今天我们就先了解一些有关HD钱包的知识吧!
初次看到HD钱包,你有没有错误地将它理解成硬件(Hardware)钱包。我是根本不知道什么是HD钱包,它与我们通常看到的热钱包和冷钱包是什么关系,它是否属于全节点钱包、轻钱包、中心化钱包(链下钱包)中的一种。各种数字钱包的概念,给我一种云里雾里的感觉,完全搞不清楚其中的来龙去脉。
不过再难的结也需要一点点的去解开,毕竟关乎着我们的数字资产的安全,或许某个操作失误,就让我们的投资资产无处可寻。言归正传,来聊聊HD钱包吧!
一、HD钱包的概念
HD 钱包全称为是分层确定性(Hierarchical Deterministic)钱包的缩写 HD Wallets。
我们知道数字钱包是用来保存我们的密钥和地址的,而数字货币是被记录在区块链网络中的每个区块上的。因此,如何安全方便的生成、保存和备份恢复密钥才是钱包的关键。为此,钱包已经进化了三次,从最初的非确定(随机)钱包到第二代的确定性(种子)钱包,直到现在的分层确定性钱包,钱包的更新迭代经过了三个阶段。
实际上想要理解分层确定性钱包的概念也并没有我们想象的那么困难。它的原理用两句话就可以表达清楚:
首先,要用一个随机数来生成主私钥,这跟其他类型的钱包生成私钥过程没有任何区别。
然后,再用一个确定性的、不可逆的算法,基于主私钥生成任意数量的子私钥。
那为什么要用“确定、不可逆”的算法呢?因为“确定”才能保证从一个主私钥可以生成出全部的子私钥,而“不可逆”则是为了确保不能通过子私钥反推出主私钥。
之所以叫分层确定性钱包是因为私钥的衍生结构是树状结构,父密钥可以衍生一系列子密钥,每个子密钥又可以衍生出一系列孙密钥,以此类推,无限衍生。
这种结构跟公司的组织架构和家谱非常相似!我们在首次创建 HD 钱包或者备份钱包时,会产生一个助记词,助记词是一连串的英⽂单词,这一串单词序列就可以创建种子,种子又可以创建所有的私钥。单词顺序也是钱包的备份,可以恢复钱包。而种⼦对应的就是所确定性钱包的随机数。
HD 钱包的优点在于只需要主公钥,就可以生成出任意数量的子公钥。也就是说,无需私钥介入(主私钥和子私钥),就能基于主公钥生成新(公钥)地址,而这些地址其实都能被主私钥所控制。
有利必有弊,当我们暴露助记词时,也相当于将所有的私钥拱手让人了,你所拥有的数字资产的安全性也归零了。
二,为什么要有那么多的私钥
为什么一个用户得需要那么多的私钥,我们以比特币交易的找零机制来说明。
⼀笔⽐特币交易是⼀个含有输⼊值和输出值的数据结构,该数据结构植⼊了将⼀笔资⾦从初始点(输⼊值)转移⾄⽬标地址(输出值)的代码信息。
谈到比特币的交易输入和输出,还必须了解一个名词UTXO(Unspent Transaction Output),它是⽐特币交易的基本单位,是⼀个未经使⽤的交易输出。⼀个⽤⼾的⽐特币会被当作UTXO分散到数百个交易和数百个区块中。实际上,并不存在储存⽐特币地址或账⼾余额的地点,只有被所有者锁住的、分散的UTXO。
⽐特币可以被分割成表⽰⼋位⼩数的“聪”,⼀个UTXO可以是⼀“聪”的任意倍。UTXO可以是任意值,但只要它被创造出来了,就像不能被切成两半的硬币⼀样不可再分了。如果⼀个UTXO⽐⼀笔交易所需量⼤,它仍会被当作⼀个整体⽽消耗掉,但同时会在交易中⽣成零头。
这段话是什么意思,来举个形象点的例子。如果你有一笔20⽐特币的UTXO并且想⽀付1⽐特币,那么你的交易必须消耗掉整个20⽐特币的UTXO并且产⽣两个输出:⼀个是⽀付了1⽐特币给接收⼈,另⼀个是⽀付19⽐特币的找零到你的钱包。这样的话,⼤部分⽐特币交易都会产⽣找零。
问题就来了,产生的找零应该返还原地址呢,还是返还到一个新地址。中本聪在设计比特币时,运用的找零机制是创建了一个新的地址作为每笔交易的找零地址。这样设计的好处,是为了保护交易用户的隐私和避免一些安全隐患。
这在现实生活中,就好像你用多个名字和身份证在不同的银行开通了数个银行帐号,即便有人知道每个帐号上的资金往来情况,也是不能根据资金流向刨根溯源查到真正的数字货币拥有人,这就是比特币所谓的匿名性。
这样你应该知道了一个钱包用户为什么需要那么多的私钥,因为公钥和私钥总是成对出现的,每笔交易都有可能产生一个找零地址,而与这些地址相对应的私钥保管和备份就成了数字交易的技术难题。HD 钱包由一个公钥就可以生成任意个数的子公钥,这极大地解决了数字钱包的使用硬伤。
最后,再温馨提示一声,请一定要安全可靠的方式及时备份助记词,并仔细将钱包的助记词及时抄写到安全的地方。另外,助记词是未加密的私钥,安全性极低,对助记词加密也是保证钱包安全的措施之一。