- A+
“钱包”一词在比特币中有多重含义。广义上,钱包是一个应用程序,为用户提供交互界面。 钱包控制用户访问权限,管理密钥和地址,跟踪余额以及创建和签名交易。狭义上,即从程序员的角度来看,“钱包”是指用于存储和管理用户密钥的数据结构。
钱包技术概述
一个常见误解是,比特币钱包里含有比特币。 事实上,钱包里只含有钥匙。 “钱币”被记录在比特币网络的区块链中。用户通过钱包中的密钥签名交易,从而来控制网络上的钱币。 在某种意义上,比特币钱包是密钥链。
.
比特币钱包只含有密钥,而不是钱币。 每个用户有一个包含多个密钥的钱包。 钱包只包含私钥/公钥对的密钥链。 用户用密钥签名交易,从而证明他们拥有交易输出(他们的钱币)。 钱币以交易输出的形式存储在区块链中(通常记为vout或txout)。
.
有两种主要类型的钱包,区别在于它们包含的多个密钥是否相互关联。
第一种类型是非确定性钱包(nondeterministic wallet),其中每个密钥都是从随机数独立生成的。密钥彼此无关。这种钱包也被称为“Just a Bunch Of Keys(一堆密钥)”,简称JBOK钱包。
.
第二种类型是确定性钱包(deterministic wallet),其中所有的密钥都是从一个主密钥派生出来,这个主密钥即为种子(seed)。该类型钱包中所有密钥都相互关联,如果有原始种子,则可以再次生成全部密钥。确定性钱包中使用了许多不同的密钥推导方法。最常用的推导方法是使用树状结构,称为分级确定性钱包或HD钱包。
确定性钱包由种子衍生创造。为了便于使用,种子被编码为英文单词,也称为助记词。
.
非确定性(随机)钱包
在最早的一批比特币客户端中( Bitcoin Core,现在称作比特币核心客户端),钱包只是随机生成的私钥集合。这种类型的钱包被称作零型非确定钱包。
举个例子,比特币核心客户端预先生成100个随机私钥,从最开始就生成足够多的私钥并且每个密钥只使用一次。这种钱包现在正在被确定性钱包替换,因为它们难以管理、 备份以及导入。虽然比特币核心客户端包含零型钱包,但比特币的核心开发者并不鼓励大家使用。
提示除了简单的测试之外,不要使用非确定性钱包。 它们对于备份和使用来说太麻烦了。 相反,推荐使用基于行业标准的HD钱包,可以用种子助记词进行备份。
.
确定性(种子)钱包
确定性,或者“种子”钱包包含通过使用单项离散函数而可从公共的种子生成的私钥。种子是随机生成的数字。
在确定性钱包中,种子足够恢复所有的已经产生的私钥,所以只用在初始创建时的一个简单备份就足以搞定。并且种子也足够让钱包导入或者导出。这就很容易允许使用者的私钥在钱包之间轻松转移。
.
分层确定性钱包(HD Wallets (BIP-32/BIP-44))
确定性钱包被开发成更容易从单个“种子”中生成许多密钥。确定性钱包的最高级形式是通过BIP0032标准定义的HD钱包。HD钱包包含以树状结构衍生的密钥,使得父密钥可以衍生一系列子密钥,每个子密钥又可以衍生出一系列孙密钥,以此类推,无限衍生。
.
相比较随机(不确定性)密钥,HD钱包有两个主要的优势。
第一,树状结构可以被用来表达额外的组织含义。比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。不同分支的密钥都可以被用在企业环境中,这就可以支配不同的分支部门、子公司、具体功能以及会计类别。
.
HD钱包的第二个好处就是它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。这可允许HD钱包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。公共钥匙不需要被预先加载或者提前衍生,而在服务器中不需要可用来支付的私钥。
.
种子和助记词(BIP-39)
HD钱包具有管理多个密钥和地址的强大机制。由一系列英文单词生成种子是个标准化的方法,这样易于在钱包中转移、导出和导入,如果HD钱包与这种方法相结合,将会更加有用。 这些英文单词被称为助记词,标准由BIP-39定义。 今天,大多数比特币钱包(以及其他加密货币的钱包)使用此标准,并可以使用可互操作的助记词导入和导出种子进行备份和恢复。
钱包最佳实践
由于比特币钱包技术已经成熟,出现了一些常见的行业标准,使得比特币钱包具备广泛互操作,易于使用,安全和灵活的特性。这些常用的标准是:
助记码,基于BIP-39
HD钱包,基于BIP-32
多用途HD钱包结构,基于BIP-43
多币种和多帐户钱包,基于BIP-44
这些标准可能会随着发展而改变或过时,但是现在它们形成了一套互锁技术,这些技术已成为比特币的事实上的钱包标准。
.
列举支持这些标准的软件钱包,包括(按字母顺序排列)Breadwallet,Copay,Multibit HD和Mycelium。
列举支持这些标准的硬件钱包,包括(按字母顺序排列)Keepkey,Ledger和Trezor。
.
提示如果您正准备开发一个比特币钱包,那么它应该被构建为一个HD钱包,一个种子被编码为助记词代码进行备份,遵循BIP-32,BIP-39,BIP-43和BIP-44标准
.
使用比特币钱包
大多数硬件钱包生成更安全的24个词的助记符。
.
首次使HD钱包时,设备从内置的硬件随机数生成器生成助记词和种子。 在这个初始化阶段,钱包在屏幕上按顺序逐个显示单词。
通过写下这个助记符,创建了一个备份。可以在HD钱包设备丢失或损坏的情况下用于恢复。 在新的HD钱包,或者任一种兼容的软件和硬件钱包中,助记词都可以用于恢复。
.
请注意,单词序列很重要。