录取查询
请输入查询编号
  • 当前位置:
  • 首页>
  • 《精通比特币第二版》中文版第五章钱包12

    发布时间:{$itemInfo['publish_time']|date='Y-m-d H:i:s',_ _ _永乐国际当你专心致志之时,意外的收获已悄悄来到你的身边!.永乐国际app生活可以吞没贪婪者的欲望之舟,也可以鼓起奋斗者的搏击之帆。.永乐国际平台雷锋,在这个世界上只活了20年,可是在这短短的时间里,他活得多么充实,多么高尚,多么光彩!!}##} 来源:永乐国际-永乐国际app-永乐国际平台 点击:2

      精力有限,后期修订以github为主,建议大家移步github链接阅读更新版本,感谢理解:

      “钱包”一词用来描述比特币中的几个不同的东西。

      广义上,钱包是作为提供用户界面的应用程序。 钱包控制用户访问权限,管理密钥和地址,跟踪余额以及创建和签署交易。

      更为狭义的是,从程序员的角度来看,“钱包”是指用于存储和管理用户密钥的数据结构。

      在本章中,我们将介绍第二个含义,其中钱包是私钥的容器,通常实现为结构化文件或简单数据库。

      在本节中,我们总结了用于构建用户友好,安全和灵活的比特币钱包的各种技术。

      比特币的一个常见误解是比特币钱包含有比特币。 其实钱包里只有钥匙。 “钱币”被记录在比特币网络的块链中。 用户通过与他们的钱包中的密钥签署交易来控制网络上的钱币。 在某种意义上,比特币钱包是密钥链。

      提示比特币钱包包含密钥,而不是钱币。 每个用户都有一个包含密钥的钱包。 钱包是真正的密钥链,包含私钥/公钥对(请参阅[私钥章节])。 用户用钥匙签署交易,从而证明他们拥有交易输出(他们的钱币)。 钱币以交易输出的形式存储在区块链(通常被称为vout或txout)。

      有两种主要类型的钱包,区别在于它们包含的密钥是否相互关联。

      第一种类型是非确定性钱包(nondeterministic wallet),其中每个密钥都是从随机数独立生成的。密钥彼此无关。这种钱包也被称为“Just a Bunch Of Keys”中的JBOK钱包。

      第二种类型的钱包是确定性钱包(deterministic wallet),其中所有的钥匙都是从一个称为种子(seed)的单个主密钥派生出来的。这种类型的钱包中的所有密钥都相互关联,如果有原始种子,则可以再次生成。确定性钱包中使用了许多不同的密钥推导方法。最常用的推导方法使用树状结构,称为分级确定性或HD钱包。

      确定性钱包从种子初始化。为了使这些更容易使用,种子被编码为英文单词,也称为助记词。

      在最早的一批比特币客户端(现在称作 Bitcoin Core比特币核心客户端)中,钱包只是随机生成的私钥集合。这种类型的钱包被称作零型非确定钱包。举个例子,比 特币核心客户端预先生成100个随机私钥,从最开始就生成足够多的私钥并且每把钥匙只使用一次。这种钱包现在正在被确定性钱包替换,因为它们难以管理、 备份以及导入。随机钥匙的缺点就是如果你生成很多,你必须保存它们所有的副本。这就意味着这个钱包必须被经常性 地备份。每一把钥匙都必须备份,否则一旦钱包不可访问时,钱包所控制的资金就付之东流。这种情况直接与避免地址重复使用的原则相冲突——每个比特币地址只能用一次交易。地址通过关联多重交易和对方的地址重复使用会减少隐 私。零型非确定性钱包并不是钱包的好选择,尤其是当你不想重复使用地址而创造过多的私钥并且要保存它们。虽然比特币核心客户端包含零型钱包,但比特币的核心开发者并不想鼓励大家使用。下图表示包含有松散结构的随机钥匙的集合的非确定性钱包。

      提示除了简单的测试之外,不要使用非确定性钱包。 它们对于备份和使用来说太麻烦了。 相反,推荐使用具有助记词记录种子的基于行业标准的HD钱包进行备份。

      确定性,或者“种子”钱包包含通过使用单项离散方程而可从公共的种子生成的私钥。种子是随机生成的数字。这个数字 也含有比如索引号码或者可生成私钥的“链码”(参见“ 分层确定性钱包(BIP0032/BIP0044)”一节)。在确定性钱 包中,种子足够恢复所有的已经产生的私钥,所以只用在初始创建时的一个简单备份就足以搞定。并且种子也足够让钱 包输入或者输出。这就很容易允许使用者的私钥在钱包之间轻松转移输入。

      图5-2确定性种子钱包:从种子派生的密钥的确定性序列

      确定性钱包被开发成更容易从单个“种子”中生成许多密钥。确定性钱包的最高级形式是通过BIP0032标准定义的HD钱包。HD钱包包含以树结构导出的密钥,使得父密钥可以导出一系列子密钥,每个子密钥可以推导出孙序列的序列等等一直到无限深度。这个树结构表如下图所示。

      HD钱包与随机(不确定性)钥匙相比,有两个主要的优势。第一,树状结构可以被用来表达额外的组织含义。比如当一个特定分支的子密钥被用来接收交易收入并且有另一个分支的子密钥用来负责支付花费。不同分支的密钥都可以被用在 企业环境中,这就可以支配不同的分支部门,子公司,具体功能以及会计类别。

      HD钱包的第二个好处就是它可以允许让使用者去建立一个公共密钥的序列而不需要访问相对应的私钥。这可允许HD钱 包在不安全的服务器中使用或者在每笔交易中发行不同的公共钥匙。公共钥匙不需要被预先加载或者提前衍生,而在服务器中不需要可用来支付的私钥。

      HD钱包是一种非常强大的管理多个密钥和地址的机制。 如果将它们与标准化的方法相结合,那么这些方法可以采用有顺序的英文单词创建种子,非常易于在钱包中转述,导出和导入。 这些有顺序的英文单词被称为助记词,标准由BIP-39定义。 今天,大多数比特币钱包(以及其他加密货币的钱包)使用此标准,并可以使用可互操作的助记词导入和导出种子进行备份和恢复。

      让我们从实际的角度来看这个。 以下哪种种子更容易转述,在纸上记录,无错误进行阅读以及方便地从一个钱包导出和导入另一个钱包?

      由于比特币钱包技术已经成熟,出现了一些常见的行业标准,使得比特币钱包广泛互操作,易于使用,安全和灵活。这些共同的标准是:

      这些标准可能会因未来发展而改变或可能已经过时,但是现在它们形成了一套互锁技术,这些技术已成为比特币的事实上的钱包标准。

      这些标准已被广泛的软件和硬件比特币钱包采用,使所有这些钱包互操作。用户可以导出在其中一个钱包上生成的助记符,并将其导入另一个钱包,实现恢复所有交易,密钥和地址。

      支持这些标准的软件钱包的一些例子包括(按字母顺序排列)Breadwallet,Copay,Multibit HD和Mycelium。支持这些标准的硬件钱包的例子包括(按字母顺序排列)Keepkey,Ledger和Trezor。

      提示如果您正准备选择一个比特币钱包,那么它应该被构建为一个HD钱包,一个种子被编码为助记词代码进行备份,遵循BIP-32,BIP-39,BIP-43和BIP-44标准,下面章节有所涉猎。

      在[用户故事]中,我们介绍了Gabriel,里约热内卢是一个有进取心的年轻少年,他正在经营一家简单的网络商店,销售比特币品牌的T恤,咖啡杯和贴纸。

      Gabriel使用Trezor比特币硬件钱包(A Trezor设备:硬件中的比特币HD钱包)来安全地管理他的比特币。 Trezor是一个简单的USB设备,具有两个按钮,用于存储键(以HD钱包的形式)并签署交易。 Trezor钱包实施本章讨论的所有行业标准,因此Gabriel不依赖于任何专有技术或单一供应商解决方案。

      当Gabriel首次使用Trezor时,设备从内置的硬件随机数生成器生成助记词和种子。 在这个初始化阶段,钱包在屏幕上逐个显示一个编号的单词序列。

      通过写下这个助记符,Gabriel创建了一个备份(参见表5-1),可以在Trezor设备丢失或损坏的情况下用于恢复。 这种助记词可用于在新的Trezor,许多兼容软件钱包或硬件钱包中的任何一个中进行恢复。 请注意,单词序列很重要,因此,记忆纸备份需要对每个单词都有空格。Gabriel必须仔细记录编号空间中的每个字,以保持正确的顺序。

      提示为了简单起见,Gabriel的助记词记录中显示了一个12个字的助记词。 事实上,大多数硬件钱包生成一个更安全的24个字的助记符。 助记词以完全相同的方式使用,不管长度如何。

      由于是在他的网店的第一次实践,Gabriel使用在他的Trezor设备上生成一个比特币地址。 所有客户对所有订单都使用此单一地址。 如我们将看到的,这种方法有一些缺点,可以使用HD钱包进行改进。

      现在我们来仔细检查许多比特币钱包所使用的重要行业标准。

      助记码词汇是英文单词序列代表(编码)用作种子对应所确定性钱包的随机数。单词的序列足以重新创建种子,并且从 种子那里重新创造钱包以及所有私钥。在首次创建钱包时,带有助记码的,运行确定性钱包的钱包的应用程序将会向使 用者展示一个12至24个词的顺序。单词的顺序就是钱包的备份。它也可以被用来恢复以及重新创造应用程序相同或者兼 容的钱包的钥匙。助记码代码可以让使用者复制钱包更容易一些,因为它们相比较随机数字顺序来说,可以很容易地被转述并且正确抄写。

      提示助记词经常与“脑钱包”混淆。 他们不一样 主要区别在于脑钱包由用户选择的单词组成,而助记符是由钱包随机创建的,并呈现给用户。 这个重要的区别使助记词更加安全,因为人类猜测随机数还是乏术可陈。

      助记码被定义在比特币的改进建议39中(参见附录2 比特币改进协议[bip0039]”)。还有一个不同的标准,有一组不同的单词,是由Electrum钱包使用,并且超过BIP-39。 BIP-39由Trezor硬件钱包背后的公司提出,与Electrum的实施不兼容。 然而,BIP-39现在已经在数十个可互操作的实践案例中获得了广泛的行业支持,应被视为事实上的行业标准。

      BIP-39定义了助记符码和种子的创建,我们在这里描述了九个步骤。 为了清楚起见,该过程分为两部分:

      1-6步是创建助记词,7-9步是从助记词到种子。

      助记词是由钱包使用BIP-39中定义的标准化过程自动生成助的。 钱包从熵源开始,增加校验和,然后将熵映射到单词列表:

      1、创建一个128到256位的随机序列(熵)。

      2、提出SHA256哈希前几位(熵长/ 32),就可以创造一个随机序列的校验和。

      5、将每个11位值与2048个字的预定义字典中的一个字做对应。

      表5-2表示了熵数据的大小和助记码单词的长度之间的关系。

      助记词表示长度为128至256位的熵。 然后,通过使用密钥延伸函数PBKDF2,熵被用于导出较长的(512位)种子。 然后将所生产的种子用于构建确定性钱包并得到其钥匙。

      密钥延伸函数有两个参数:助记词和salt。 密钥延伸函数中的salt的目的是增加构建能够进行暴力攻击的查找表的困难度。 在BIP-39标准中,salt具有另一目的,它允许引入密码短语(passphrase),作为保护种子的附加安全因素,正如我们将在BIP-39中的可选密码更详细地描述的。

      7、PBKDF2密钥延伸函数的第一个参数是从步骤6生成的助记符。

      8、PBKDF2密钥延伸函数的第二个参数是salt。 salt由字符串常数“助记词”与可选的用户提供的密码字符串连接组成。

      9、PBKDF2使用HMAC-SHA512算法,使用2048次哈希来延伸助记符和salt参数,产生一个512位的值作为其最终输出。 这个512位值就是种子。

      提示密钥延伸函数,使用2048次哈希是一种非常有效的保护,可以防止对助记词或密码短语的暴力攻击。 它使得攻击尝试非常昂贵(在计算中),需要尝试超过几千个密码和助记符组合,而这样可能产生的种子的数量是巨大的(2^512)。

      表5-3和表5-5展示了一些助记码的例子和它所生成的种子。

      BIP-39标准允许在推导种子时使用可选的密码短语。 如果没有使用密码短语,助记词是用由常量字符串“助记词”构成的salt进行拉伸,从任何给定的助记词产生一个特定的512位种子。 如果使用密码短语,密钥延伸函数使用同样的助记词也会产生不同的种子。 事实上,给予一个单一的助记词,每一个可能的密码短语都会导致不同的种子。 基本上没有“错误”的密码短语, 所有密码短语都是有效的,它们都会导致不同的种子,形成一大批可能未初始化的钱包。 一组可能的钱包是如此之大(2^512),所以暴力破解或意外猜测基本无可能。

      提示BIP-39中没有“错误的”密码。 每个密码都会导致一些钱包,只是未使用的钱包是空的。

      替代助记词成为第二个因素(记忆中的东西),使助记符本身无用,保护助记词备份免受小偷危害。

      还可以成为一种似是而非的否认或叫做“胁迫钱包”的形式,其中所选择的密码短语导致一小笔资金用于分散攻击者的注意力,使攻击者不再关注包含大部分资金的“真实”钱包。

      然而,重要的是要注意,使用密码也会引起丢失的风险:

      如果钱包所有者无行为能力或死亡,没有人知道密码,种子是无用的,所有存储在钱包中的资金都将永远丢失。

      相反,如果所有者在与种子相同的地方备份密码,则会违反第二个因素的目的。

      虽然密码是非常有用的,但它们只能与仔细计划的备份和恢复流程结合使用,考虑到所有者个人风险的可能性,应该允许其家人恢复加密资产。

      BIP-39以许多不同的编程语言部署为库:

      还有一个BIP-39生成器在独立的网页中实现,对于测试和实验非常有用。 作为独立网页的BIP-39生成器显示一个生成助记词,种子和扩展私钥的独立网页。

      BIP-39生成器可以离线使用,也可以使用这个在线地址.地址转向到这儿了【还得科学上网。译者注】

      1、本文部分内容摘自《精通比特币》第一版中译本,特此说明并致谢。

      我正在发起“和我一起阅读《精通比特币第二版》”活动。

      我希望将认知学习法与《精通比特币第二版》的研读结合起来,尝试总结出一套可行的区块链知识技能快速入门的方法。

      这也将成为我们大家一起合作编写的一本书《认知学习比特币》的雏形(所有有价值的讨论都将成为这本书的素材)。

      而且我更希望通过本次认知学习方法论的实践以及迭代,将这种经过实践的学习方法迁移到更多领域的学习中。

      《精通比特币第二版》中文版第五章钱包2/2

      精力有限,后期修订以github为主,建议大家移步github链接阅读更新版本,感谢理解:

      一、快速术语检索 比特币地址:(例如:1DSrfJdB2AnWaFNgSbv3MZC2m74996JafV)由一串...

      《精通比特币第二版》第四章密钥地址1/3

      精力有限,后期修订以github为主,建议大家移步github链接阅读更新版本,感谢理解:

      精力有限,后期修订以github为主,建议大家移步github链接阅读更新版本,感谢理解:

      《精通比特币第二版》中文版第八章比特币网络1/2

      精力有限,后期修订以github为主,建议大家移步github链接阅读更新版本,感谢理解: