软件钱包使用随机数来生成主私钥。
然后,通过确定性且不可逆的算法,它可以从该主私钥派生出无限数量的子私钥。
为什么我们需要确定性且不可逆的算法?
因为确定性意味着所有子私钥总是可以从同一个主私钥生成,而不可逆意味着主私钥不能从任何子私钥重构。
这就是为什么它被称为分层确定性(HD)钱包。私钥的派生结构类似于一棵树:一个父密钥可以派生出多个子密钥,每个子密钥可以派生出多个孙密钥,并且这个过程可以无限期地继续下去。
首次创建HD钱包或备份钱包时,会生成助记词。助记短语是英语单词的序列。该序列用于生成种子,然后使用该种子生成钱包中的所有私钥。换句话说,助记词作为钱包的备份,因为它可以用来恢复钱包。反过来,种子对应于确定性钱包背后的原始随机数。
HD钱包的一大优点是只需要主公钥来生成任意数量的子公钥。换句话说,可以从主公钥创建新的公共地址,而无需访问私钥,无论是主私钥还是子私钥。然而,所有这些生成的地址最终仍然可以由主私钥控制。
当然,这种设计也存在风险。如果助记词被暴露,本质上就等于暴露了所有私钥。一旦发生这种情况,钱包中的数字资产的安全性实际上就会丧失。
为什么需要这么多私钥?
用户需要这么多私钥的原因可以通过比特币交易中的变更机制来理解。
比特币交易是一种包含输入和输出的数据结构。它还包括将值从源(输入)传输到目的地(输出)的必要脚本信息。
要了解比特币的输入和输出,了解UTXO(未花费的交易输出)的概念非常重要。 UTXO是比特币交易的基本单位,代表未花费的交易输出。单个比特币实际上以 UTXO 的形式分布在许多交易和许多区块中。事实上,不存在存储简单账户余额的集中记录;相反,只有去中心化的 UTXO 锁定其各自的所有者。
UTXO 可以代表任何数量的价值,但一旦创建,它就不可分割,就像物理硬币不能分成两半一样。如果 UTXO 的价值大于交易所需的金额,则仍然必须花费整个 UTXO,超出的部分将作为找零返还。
例如,假设您有一个价值 20 个单位的 UTXO,并且想要支付 1 个单位。该交易必须消耗完整的 20 单位 UTXO 并创建两个输出:一个输出将 1 个单位发送给接收者,而另一个输出则将 19 个单位作为找零发送回您的钱包。从这个意义上说,大多数比特币交易都会产生变化。
这就引出了另一个问题:更改应该发送回原始地址,还是发送到新生成的地址?
当中本聪设计比特币时,使用了找零地址机制,这意味着通常会创建一个新地址来接收每笔交易的找零。这样设计的好处是有利于保护用户隐私,降低一定的安全风险。
在现实生活中,这类似于在不同银行以不同名称和身份开设多个银行账户。即使有人可以观察每个账户中的资金流动,他们也很难将所有资金追溯到数字资产的真正所有者。这是比特币相对匿名性的部分原因。
这就是为什么钱包用户需要如此多的私钥。由于公钥和私钥总是成对存在,并且每次交易都可能产生新的找零地址,因此存储和备份所有这些地址对应的私钥将成为重大技术挑战。 HD钱包通过允许单根生成任意数量的子公钥和子私钥解决了这个问题,大大提高了数字钱包的可用性。
