软件钱包的概念

软件钱包用一个随机数来生成主私钥。

然后,再用一个确定性的、不可逆的算法,基于主私钥生成任意数量的子私钥。

那为什么要用“确定、不可逆”的算法呢?因为“确定”才能保证从一个主私钥可以生成出全部的子私钥,而“不可逆”则是为了确保不能通过子私钥反推出主私钥。

之所以叫分层确定性钱包是因为私钥的衍生结构是树状结构,父密钥可以衍生一系列子密钥,每个子密钥又可以衍生出一系列孙密钥,以此类推,无限衍生。

我们在首次创建 HD 钱包或者备份钱包时,会产生一个助记词,助记词是一连串的英⽂单词,这一串单词序列就可以创建种子,种子又可以创建所有的私钥。单词顺序也是钱包的备份,可以恢复钱包。而种⼦对应的就是所确定性钱包的随机数。

HD 钱包的优点在于只需要主公钥,就可以生成出任意数量的子公钥。也就是说,无需私钥介入(主私钥和子私钥),就能基于主公钥生成新(公钥)地址,而这些地址其实都能被主私钥所控制。

有利必有弊,当我们暴露助记词时,也相当于将所有的私钥拱手让人了,你所拥有的数字资产的安全性也归零了。

为什么要有那么多的私钥

为什么一个用户得需要那么多的私钥,我们以比特币交易的找零机制来说明。

⼀笔⽐特币交易是⼀个含有输⼊值和输出值的数据结构,该数据结构植⼊了将⼀笔资⾦从初始点(输⼊值)转移⾄⽬标地址(输出值)的代码信息。

谈到比特币的交易输入和输出,还必须了解一个名词 UTXO(Unspent Transaction Output),它是⽐特币交易的基本单位,是⼀个未经使⽤的交易输出。⼀个⽤⼾的⽐特币会被当作 UTXO 分散到数百个交易和数百个区块中。实际上,并不存在储存⽐特币地址或账⼾余额的地点,只有被所有者锁住的、分散的 UTXO。

⽐特币可以被分割成表⽰⼋位⼩数的“聪”,⼀个 UTXO 可以是⼀“聪”的任意倍。UTXO 可以是任意值,但只要它被创造出来了,就像不能被切成两半的硬币⼀样不可再分了。如果⼀个 UTXO ⽐⼀笔交易所需量⼤,它仍会被当作⼀个整体⽽消耗掉,但同时会在交易中⽣成零头。

这段话是什么意思,来举个形象点的例子。如果你有一笔 20 ⽐特币的 UTXO 并且想⽀付1⽐特币,那么你的交易必须消耗掉整个 20 ⽐特币的 UTXO 并且产⽣两个输出:⼀个是⽀付了 1 ⽐特币给接收⼈,另⼀个是⽀付 19 ⽐特币的找零到你的钱包。这样的话,⼤部分⽐特币交易都会产⽣找零。

问题就来了,产生的找零应该返还原地址呢,还是返还到一个新地址。中本聪在设计比特币时,运用的找零机制是创建了一个新的地址作为每笔交易的找零地址。这样设计的好处,是为了保护交易用户的隐私和避免一些安全隐患。

这在现实生活中,就好像你用多个名字和身份证在不同的银行开通了数个银行帐号,即便有人知道每个帐号上的资金往来情况,也是不能根据资金流向刨根溯源查到真正的数字货币拥有人,这就是比特币所谓的匿名性。

这样你应该知道了一个钱包用户为什么需要那么多的私钥,因为公钥和私钥总是成对出现的,每笔交易都有可能产生一个找零地址,而与这些地址相对应的私钥保管和备份就成了数字交易的技术难题。HD 钱包由一个公钥就可以生成任意个数的子公钥,这极大地解决了数字钱包的使用硬伤。

 

这篇文章有帮助吗?
2 人中有 2 人觉得有帮助