比特币的密码学
前言
密码学
到目前为止,几乎每个人都听说过比特币。简单来说,比特币是一种数字现金——一种将现金的匿名性与互联网的便利性、自由性和强大性融合在一起的货币体系,可让您在世界各地发送和接收资金,而无需依赖银行或政府等中央机构。
比特币的力量源自一项名为“区块链”的发明。区块链是一种分布式账本,利用参与其中的计算机的综合能力进行操作,从而实现网络权力的分散化。
从技术角度来看,区块链由许多有趣的概念组成 - 分布式数据库和共识(或去中心化治理)都令人着迷。但从根本上讲,区块链系统的基本构建块是密码学。
密码学是一门研究代码的学科——编写代码、解析代码和操纵代码。是的,这包括你小时候拥有的超级秘密间谍解码环,甚至还有猪拉丁语!密码学是一门古老的学科,已经存在了数千年,最常见的形式是密码。人们普遍认为,密码的发明是为了向任何无意接收信息的人隐藏信息中包含的信息。
Atwhay Aboutyay Ymay Omputercay?
自数字计算诞生以来,密码学和计算机就一直存在竞争关系。第二次世界大战期间,英国投入巨资破译安轴通信。由于破译变得太难,手工破译变得难以完成,因此人们竞相开发能够比人类更快破译密码的机器。这最终导致了第一台数字可编程计算机Colossus的开发。
自那时起,计算机和密码学之间的战争愈演愈烈。在许多人称之为“军备竞赛”的这场战争中,许多我们习以为常的计算机系统都严重依赖密码学,而功能更强大的计算机的发明却迫使之前最先进的密码学变得过时。
如果没有加密技术,就不可能加密数据,也不可能确保安全通信,甚至不可能确认您正在浏览一个安全的网站 - 是的,我正在看着你,浏览器中的小绿锁。我们将重点关注支持比特币(一种革命性的加密系统)某些部分的加密技术。
公钥和私钥对
一对里有什么?
如果您曾经使用过比特币,那么您可能听说过私钥。私钥对比特币系统至关重要。它们是证明比特币所有权的机制。这允许用户在网络上授权交易。除了比特币之外,私钥还以多种形式存在,可用于多种用途,大多数熟悉私钥的人都知道私钥是一种发送加密消息的方式。
对于比特币中存在的每个私钥,都与公钥存在 1:1 的关系。可以想象,私钥在任何情况下都应保持私密,不得与任何人共享。相比之下,公钥可以与任何人共享 - 例如,我将公钥放在我的网站上,或将其通过电子邮件发送给客户以接收某些活动的付款,这没有任何危险。从这个意义上讲,您可以将公钥和私钥视为用户名和密码 - 一个允许您识别自己,而另一个允许您证明您就是那个人。但是,与密码不同,私钥一旦丢失就永远无法重置或恢复。因此,私钥是极其重要的数据,应该受到保护,甚至应该小心谨慎。
由于 1:1 保证,公钥和私钥共享一种将它们联系在一起的加密关系。在比特币中,私钥通过椭圆曲线数字签名算法(ECDSA) 生成公钥。作为该算法输入的私钥将始终生成其对应的公钥。但是,由于该算法的单向性,公钥永远无法被逆向工程以生成其对应的私钥。
比特币私钥通常是一个 256 位数字,可以用多种方式表示。
Private Key:
KxeNcRw8mBfyLrnnXQymQkogLjvmn6uJCmSWLRmZ6Mt3Hzfgo1mY
Deposit Address:
1MnU3iyTeej69DKGGKo6vU3H3dKKZ9ZL6u
有很多钥匙!
公钥和私钥对加密技术是比特币地址系统的基础,比特币是一种相当于支票账户的加密货币。只需通过编程即可生成新地址。每当需要新地址时,我都可以使用自己选择的界面(可能是比特币钱包)创建一个。
通常,当我向某人介绍比特币时,他们会立即问“如果有人猜出我的私钥怎么办?”,我回答说“嗯,这是极不可能的。”
但这有多不可能呢?
好吧,作为参考,比特币的总地址空间是 2^160。也就是这么多:
1,461,501,637,330,902,918,203,684,832,716,283,019,655,932,542,976
祝你好运,想象一下。再进一步想想,地球上大约有 2^63 粒沙子 - 包括海滩和海底的沙子。2^63 * 2^63 = 2^126。
这意味着,对于地球上的每一粒沙子,你都可以创建一个新的地球,然后计算所有地球上的所有沙粒 - 但仍然远远达不到比特币的地址空间。
显然,在这种情况下,密码学通过非常大的数字获得安全性。我可以用人类已知的任何手段(当然包括计算机)一遍又一遍地尝试猜测私钥,花上数百万年,但这根本不可能发生。
这非常棒,因为它允许使用比特币创建各种应用程序 - 例如,Decent 创建了一个慈善机构的原型平台,允许使用加密货币进行捐赠。无需限制可以创建的活动数量,也无需限制用户可以拥有的存款地址数量,因为地址数量实际上是无限的。
但如果有人很幸运地猜出了我的密钥怎么办?
说真的,你没看懂。真的。很大。数字。重读最后一节。
最后,公钥和私钥对是密码学中具有多种用途的基本工具。在比特币中,其用途是确认所有权并创建一个可供使用的大型地址池。
请记住,由于密钥数量众多,可以安全地假设我生成的任何密钥都是我的,而且只属于我。因此,比特币系统不需要进一步的所有权证明。否则,在其他系统中,我们传统上会使用我们的身份作为所有权证明。由于比特币消除了这一要求,加密货币就像实物现金一样促进了匿名性,但程度可能更大。
分层确定性钱包
能力越大,责任越大
既然我们已经介绍了比特币中的密钥对,我们可以介绍它们创建的独特方式。私钥让我们完全控制我们的财务 - 这是比特币的目的。然而,在很多方面,拥有完全的控制权是可怕的。如果私钥丢失,与之相关的资金将永远消失。如果有人窃取私钥,他们可以完全访问资金,理论上是这些资金的新主人。而且,如果私钥丢失、被盗或出现任何其他问题,则无法追索。
这对比特币用户来说压力很大。当然,用户可以像对待其他有价值的数据一样,创建备份私钥。但是,私钥应该受到严密保护。私钥绝不应备份在云服务器上或通过任何类型的互联网通信传输。将它们存储在计算机或手机上很危险,因为如果系统被小偷或攻击者入侵,系统上与私钥相关的所有资金都将被盗走。私钥可以存储在防火保险箱中,并埋在偏远荒野的地下 3 米处,但由于使用比特币会为单个用户生成数百或数千个私钥。一个人怎么可能跟踪所有这些密钥?如何存储而不存储?
这时,“分层确定性钱包”或“HD 钱包”就可以发挥作用了。
真是一口气
让我们逐字逐句地解释一下 HD 钱包。“层级”是指按顺序或等级排列,或按顺序放置。顺序在 HD 钱包系统中非常重要。“确定性”是“因果”的一种奇特说法。任何系统中的任何事件总会有结果。而“钱包”是使用比特币的界面,允许您访问、发送和接收比特币。一些著名的钱包包括Electrum、Mycelium和bread。
因此,HD 钱包是一种生成私钥序列的比特币钱包,其中每个私钥由序列中的前一个或“父”密钥决定。该系统已添加到比特币BIP-32中。BIP 是“比特币改进提案”或对比特币进行更改的格式。
与私钥和公钥之间的关系类似,使用 HD 钱包产生的私钥序列由算法的输入和输出之间的单向关系定义。从高层次上讲,比特币私钥是使用“伪随机数生成器”生成的。由于程序定义非常严格且面向过程,因此很难在计算机中捕捉人类的“随机性”概念。因此,这些随机生成器通常需要输入称为“种子”的熵。这有时由其他程序中的随机鼠标移动或按键表示,并且需要更大或“更随机”的熵种子才能“更随机”地生成。伪随机数生成器的一个怪癖是算法思维的结果 - 生成器遵循一系列步骤来产生输出。因此,对于许多算法,单个输入只有一个输出。对于 HD 序列,我们使用先前数字生成的输出(私钥)作为新数字生成的输入,并创建一个密钥“链”。
详细地说,这个过程稍微复杂一些,但就本文的范围而言,链式密钥的定义已经足够了。
为什么这很重要?好吧,考虑以下情况。众所周知,在密钥序列中,每个私钥都是基于某个输入生成的,该输入是前一个密钥。这意味着,只要访问序列中的第一个密钥,就可以生成序列中每个后续密钥。理论上,只需记住一个密钥,就可以获得整个密钥集合的“备份”!
改进改进
BIP-32 定义了一个顺序生成私钥的系统,用于钱包。这样,比特币用户可以通过存储单个“主”密钥来避免被盗或数据丢失。然而,还有最后一个问题——即使是单个私钥也很难记住。它们又长又笨重。这是计算机科学中常见的问题——对计算机系统有用的东西(大数字、数据集和长字符串)往往对人类来说非常烦人。为了方便起见,软件工程师经常花费大量时间来创造将计算机数据“抽象”成更舒适的格式供人们消化的方法。这就引出了BIP-39,它为 HD 钱包协议引入了助记词种子短语。
如果您查看比特币钱包的代码库,您可能会在某处找到一个名为“words.txt”、“wordlist.txt”或类似名称的文件。这是用于生成 HD 钱包助记词种子的单词列表。它包含 2048 个单词,并且提供多种语言版本。
这个过程相当简单。创建 HD 钱包时,它会生成“计算机生成的熵”。此熵被转换为 0 到 2047 之间的数字序列,这些数字用作索引,从单词列表中取出 12 个数字序列并将它们组合成种子短语。
bamboo minor dirt drop mom october theme alpha clump filter vessel twelve
当此过程完成后,生成的种子短语将用作 HD 钱包的种子输入,只需记住该短语即可恢复您的钱包生成的所有私钥。
更多重要数字
当我第一次了解到助记密钥过程时,我担心它不如比特币本身安全。我是对的。可以生成的种子短语总数为 2048^12,即 2^132,小于 2^160 的总地址空间,因此更容易被暴力破解。然而,2^132 仍然是一个巨大的集合(事实上,它仍然大于我们之前讨论的总沙粒数),并且通常足够安全使用。
对于那些感兴趣的人来说,2^132 看起来像这样:
5,444,517,870,735,015,415,413,993,718,908,291,383,296
这个过程的真正价值并不那么明显。这里真正发生的是将计算机数据(在这种情况下是随机数据)转换为方便、人性化的格式。这个种子短语不仅容易记住,而且可以传达(祝你好运,通过电话告诉某人私钥),因此对人来说,它的可用性远高于私钥本身。再一次,软件工程师花在完善软件上的大部分时间是将计算机友好的数据抽象为人性化的数据。计算机和人有着截然相反的优点和缺点,像这样的系统让它们能够以巧妙的方式进行交互。
总而言之,分层确定性钱包或“HD 钱包”系统是通过比特币改进提案 (BIP) 32 和 39 添加到比特币中的。该系统允许用户通过记住单个种子短语来“存储”他们的整个私钥集合,这可用于在丢失时恢复他们的私钥。
哈希现金
原创反垃圾邮件
Hashcash 由密码学家 Adam Back 于 1997 年发明。它被发明为一种阻止垃圾邮件和防止 DDoS(分布式拒绝服务)攻击的方法。Hashcash 通过充当计算机活动的瓶颈来保护系统免受此类攻击,使用一种称为工作量证明(在加密货币世界中有时称为 POW)的概念。
在计算机中,某些活动根据执行这些活动所需的资源量而被称为“廉价”或“昂贵”。Hashcash 之所以得名,是因为它用于通过强制参与者在允许完成操作之前执行特定数量的额外计算来使廉价的计算机过程变得更加昂贵。例如,让我们考虑电子邮件。对于现代计算机来说,处理和发送文本的成本非常低。这对潜在的受害者电子邮件服务器来说是一个问题,因为即使是速度慢且简单的计算机也能够用消息使受害者超载。通过强制发件人执行更昂贵的过程,发件人无法切实地向服务器发送垃圾邮件。因此,服务器可以假设发件人是善意的。
Hashcash 在任何情况下都会通过调整“难度”级别或成功完成交易所需的处理能力来实现其瓶颈。
为何这么难?
那么 Hashcash 在比特币中是如何使用的呢?从某种程度上来说,Hashcash 就是比特币的一切!当你听说挖掘区块、处理交易以及发送或接收比特币时,你实际上听到的是 Hashcash。
简单介绍一下,比特币的创建目标是 10 分钟的区块时间。这意味着软件会尝试允许每 10 分钟将一个新的区块(一组交易)添加到网络中,不多也不少。选择 10 分钟的限制是为了让整个比特币网络有足够的时间保持稳定和同步。
超级计算机之战
10 分钟的区块时间由 Hashcash 及其调整难度保护。比特币之所以有效,是因为网络参与者(矿工)处理交易并将其打包成区块。为了使这些区块有效并添加到区块链中,处理器必须完成大量的处理工作(工作量证明)。这项工作由 Hashcash 证明。
比特币刚开始时,挖矿网络的竞争很低,使用笔记本电脑等简单硬件就可以轻松挖矿。随着竞争加剧,矿工开始购买高级硬件(首先是高端显卡,然后是 ASIC,这是专门为挖矿而生产的专用硬件),这些硬件将提供相对于网络其他部分的竞争优势。这场硬件竞赛导致全球矿工网络使用非常强大的硬件来保持竞争力。幸运的是,Hashcash 及其可调难度使比特币得以生存,而不会因其网络拥有的大量处理能力而或多或少地“超载”。
比特币非常有弹性。它会随着网络可用功率的增加或减少而自我校准,以防止出块时间偏离。区块链每增加 2016 个区块,就会进行一次校准。本质上,如果平均出块时间趋势快于 10 分钟,难度就会增加。如果平均出块时间趋势慢于 10 分钟,难度就会降低。这使得网络能够随着挖矿竞争而扩大规模。
因此,Hashcash 是一种用作工作量证明系统的加密函数。它最初是为了保护电子邮件服务器和网站而发明的,但后来被用于许多领域,并作为比特币挖矿算法而变得更加出名。通过可调难度,Hashcash 允许比特币随着时间的推移而适应并在网络不断增长的情况下保持稳定。
结束语
密码学是一门迷人的艺术,它模糊了计算机与现实之间的界限。在大多数情况下,人们希望计算机是完美的:所有功能都可以归结为“真”或“假”,而计算机总是正确的。密码学引入了“足够好”计算的概念,利用巨大的数字和处理能力来创建“足够好”的系统,以确保安全并与人类世界交互。
比特币在各个方面都使用加密技术,从地址系统到用户体验,甚至挖矿。希望现在你明白加密技术确实是区块链的命脉。
如果您渴望更深入了解区块链所涉及的实际架构,请查看本指南!
免责声明:本内容来源于第三方作者授权、网友推荐或互联网整理,旨在为广大用户提供学习与参考之用。所有文本和图片版权归原创网站或作者本人所有,其观点并不代表本站立场。如有任何版权侵犯或转载不当之情况,请与我们取得联系,我们将尽快进行相关处理与修改。感谢您的理解与支持!
请先 登录后发表评论 ~