20年12月26日更新:这是年底假期,Ars员工一直在享受一些急需的停机时间。发生这种情况时,我们会在您想了解的有关比特币的所有内容上重现一些经典的Ars故事,例如2017年的解释器,但可能不敢问。 (由于加密货币的价值甚至没有在两周前达到创纪录的新高,因此想要基本的intel是完全合理的。)该文章于2017年12月15日首次发布,在下面未作更改。
近几周来,比特币的飞涨价格(一种虚拟货币现在价值超过2500亿美元)受到了广泛关注。但是,比特币的真正意义不仅在于其价值的上升。正是技术的突破使网络得以存在。
笔名中本聪(Satoshi Nakamoto)仍然是匿名的比特币发明人,他找到了一种去中心化网络就共享交易账本达成共识的全新方法。这项创新使cypherpunks梦decades以求的全分散式电子支付系统成为可能。
作为我们最近揭示流行加密货币机制的工作的一部分,今天,我们将从基础知识入手,深入地解释比特币的工作原理:数字签名如何使数字现金成为可能?中本聪区块链的发明如何解决了限制早期数字现金工作的双重支出问题?
我们还将探索更近期的事件,例如将区块链社区划分为两个交战阵营的区块大小辩论。最后,我们将展望未来,并讨论为什么比特币的设计可以使其成为未来几年创新的独特沃土平台。正如您将要看到的那样,这里有很多内容需要介绍。
直到1970年代,所有公知的加密方案都是对称的:加密消息的接收者将使用相同的密钥来解密发送者用来对其进行加密的消息。但这一切都随着非对称加密方案的发明而改变。在这些方案中,解密消息的密钥(称为私钥)与加密消息所需的密钥(称为公钥)不同,并且对于只有公钥的人而言,没有实际的方法可以解密消息。找出私钥。
这意味着您可以广泛地发布公钥,允许任何人使用它来加密一条消息,只有您(作为私钥的持有者)才能解密该消息。这一突破改变了密码学的领域,因为任何两个人都可以通过不安全的通道进行安全通信而无需先建立共享机密。
非对称加密还有另一个突破性的应用:数字签名。在普通的公共密钥密码术中,发送者使用接收者的公共密钥加密消息,然后接收者使用她的私有密钥解密消息。但是您也可以翻转一下:让发件人使用自己的私钥对邮件加密,而收件人则使用发件人的公钥对其解密。
由于任何人都可以获取公钥,因此这并不能保护消息的保密性。相反,它提供密码证明消息是由私钥的所有者创建的。拥有公钥的任何人都可以在不知道私钥的情况下验证证据。
人们很快意识到,这些数字签名可以使加密安全的数字现金成为可能。使用经典的示例场景,让我们假设爱丽丝拥有一枚硬币并将其转移给鲍勃。
她会写一条消息,说,我,爱丽丝,将我的硬币转移给鲍勃,"然后通过使用她的私钥加密邮件来签名。现在,鲍勃(或其他任何人)可以使用爱丽丝的公钥解密签名。由于只有爱丽丝可以创建加密的消息,因此鲍勃可以使用它来证明他现在是硬币的合法所有者。
如果Bob想要将硬币转移到Carol,他将遵循相同的过程,声明他正在将硬币转移到Carol并使用他的私钥加密消息。然后,Carol可以使用该签名链(Alice的签名将硬币转移到Bob,Bob的签名将硬币转移到Carol)作为她现在拥有硬币的证据。
请注意,这些都不要求官方第三方授权或认证交易。爱丽丝(Alice),鲍勃(Bob)和卡罗尔(Carol)可以在没有第三方帮助的情况下生成自己的公钥-私钥对。知道Alice和Bob的公钥的任何人都可以独立地验证签名链在密码上是有效的。数字签名与我们稍后将讨论的一些创新相结合,使人们无需银行即可从事银行业务。
我在上一节中描述的通用数字现金方案非常接近真实比特币付款的工作方式。这是真实比特币交易的简化图:
比特币交易包含输入和输出列表。每个输出都有一个与之关联的公共密钥。为了以后的交易花费这些硬币,它需要一个带有匹配数字签名的输入。比特币使用椭圆曲线加密技术进行数字签名。
例如,假设您拥有上图中与公钥D对应的私钥。有人想向您发送2.5比特币。该人员将创建一个类似于交易3的交易,其中有2.5个比特币归您所有-公钥D的所有者。
当您准备好花费这些比特币时,可以创建一个新事务,如事务4。将事务3,输出1列出为资金来源(输出为零索引,因此输出1为第二个输出)。您可以使用私钥生成签名D,该签名可以用公钥D进行验证。然后将这2.5个比特币分配给两个新输出:公钥E的2个比特币和公钥F的0.5个比特币。现在,他们可以仅由相应私钥的所有者使用。
一个交易可以有多个输入,并且它必须花费早先交易的相应输出中的所有比特币。如果一笔交易输出的比特币少于接收的比特币,则差额被视为处理该交易的比特币矿工收取的交易费(稍后会对此进行详细说明)。
在比特币网络上,人们用来相互发送比特币的地址是从诸如公钥D的公钥派生的。地址作为公钥的哈希值(看似随机的短字符串,用作加密指纹)。比特币地址以一种称为Base58Check的自定义格式进行编码,从而最大程度地减少了误输入的风险。典型的比特币地址是" 18ZqxfuymzK98G7nj6C6YSx3NJ1MaWj6oN。
该交易从一个输入地址获取了6.07比特币,并将其分配到两个输出地址之间。一个输出地址得到的比特币略多于5个比特币,而另一个输出地址得到的比特币略少于1个比特币。这些输出地址之一最有可能属于发送方,即发送" change"回到自己身上-另一个属于第三方收件人。
当然,实际的比特币交易可能比到目前为止显示的简单示例更为复杂。上面未说明的最重要的功能可能是,代替公共密钥,输出可以具有以简单的特定于比特币的脚本语言编写的验证脚本。要花费该输出,后续事务必须具有允许脚本评估为true的参数。
这使比特币网络可以强制执行任意复杂的条件,以控制如何使用金钱。 例如,一个脚本可能需要由不同的人持有的三个不同的签名,并且还要求钱不要在某个将来的日期之前花掉。 与以太坊不同,比特币的脚本语言不支持循环,因此可以确保脚本在短时间内完成。