一文读懂区块链(一)
原文在这里。文中假定Amazon在区块链上存储用户的购物交易,并以此为例介绍了区块链公链的基本概念和工作原理、区块链与比特币、区块链的优劣以及区块链的前景。本文主要介绍公链的基本概念和工作原理、区块链与比特币。
声明:本作品采用署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)进行许可,使用时请注明出处。
在最初学习区块链时,你可能会接触到这样的定义:“区块链是一个分布式的、去中心化的公开账本”。
这样的定义比较晦涩难懂,实际上区块链是很好理解的。
什么是区块链?
如果这项技术很复杂,那么它为什么被称为“区块链”?就最底层来看,区块链实际上就是由一些块串的链,当然这里所说的"并不是传统意义上的块"和“链”。在本文中,当我们提到"块"和“链”时,我们实际指的是存储在公共数据库(“链”)上的数据(“块”)。
区块链上的“块”由一系列数据信息组成。具体来说,包含以下三部分:
- 区块上会存储你最近在Amazon上的购物信息,包括购物日期、时间和金额等。
- 区块上会存储参与交易的用户信息。假如你从Amazon上购买了一件商品,那么块会记录你的名字和Amazon.com,Inc.(AMZN)。除了使用的你的真实姓名,你也可以使用不带任何身份信息的唯一的“电子签名”(例如用户名)来记录你的购物交易
- 区块还会存储它区别于其它区块的信息。就像你我使用姓名来区分他人一样,每个区块都有一个唯一的哈希值来区分自己和其它区块。哈希是由特定算法生成密文。再回到你在Amazon上交易,在上一件商品还在运输途中,因为一些其它原因,你决定再买一件。即使你的新订单跟之前的一样,鉴于它们的唯一编码,在区块上我们还是可以区分出它们。
在上面的例子中,区块只存储了一条来自Amazon的交易,但在现实生活中并不是这样的。Bitcoin的单个区块最多可以存储1M的数据。基于交易的大小,这意味着单个区块甚至可以存储成千上万笔交易。
区块链是如何工作的?
当一个区块存储数据时,它将被添加到区块链中。顾名思义,区块链是由多个区块串联在一起组成的。要将一个区块添加到区块链中,必须经历以下四个过程:
- 交易必须产生。回到上面Amazon购物的例子。在匆匆点击多个付款确认后,你冲动消费了。就像上面说的,通常情况下,一个块中包含了成千上万条交易,所以你的交易会跟其他用户的一起被打包到一个区块中。
- 交易必须被验证。在购买之后,你的交易必须经过验证。对于其他公开的信息记录,如证券交易委员会、维基百科或你当地的图书馆,会有人负责审查新的数据条目。但是,对于区块链,这个任务留给计算机网络来完成。当你从亚马逊购买商品时,电脑网络会迅速检查你的交易是否按照你所说的方式进行。也就是说,他们确认购买的细节,包括交易的时间、金额和参与者。(稍后会详细介绍这是如何发生的。)
- 交易必须存储到块中。在你的交易验证无误后,它将会被放行。交易的金额、你的数字签名和Amazon的数字签名都会被存储到区块中。在区块中,可能有成千上万个类似的交易。
- 区块必须有哈希值。就像天使获得翅膀一样,一旦区块中的所有交易都验证通过,区块就必须获得一个标识唯一身份的哈希。它也会得到最近一个本加入到区块链中的区块的哈希。哈希完成后,这个区块就可以添加到区块链中。
新的区块添加到区块后中,对所有人而言,它都是公开的。如果你看一下比特币的区块链,你会发现你可以访问交易数据,以及何时(“时间”)、何地(“高度”)和谁(“转接”)将区块添加到区块链的信息。
区块链是私有的?
任何人都能查看区块链的内容,用户也可以自行决定是否已节点的形式将自己的计算机加入到区块链网络中。这样之后,他们的计算机就会区块链的副本,当有新的区块添加时,区块链会自动更新,就像Facebook的新闻Feed,每当发布新状态时,它就会实时更新。
区块链网络中的每台计算机都有一份它自己的区块链副本,这意味着每个区块链都有成千上万的区块链副本,比如,在比特币网络中就有上百万份副本。虽然这些副本都是相同的,但要在计算机网络中传递这些信息会使这些信息更加难以操作。就区块链而言,没有一个权威的中心来操作区块链。相应地,黑客攻击时就需要修改区块链网络中的所有副本。这就是为什么区块链被称为“分布式”账本。
然而,纵观比特币区块链,你会发现你并不能获取到发起交易的用户的身份信息。尽管区块链上的交易并不是完全匿名的,当用户的私人信息尽局限于他们的数字签名或用户名。
这就引出了另一个重要的问题:如果你不知道是谁向区块链中添加区块,那你怎么信任区块链或支撑它的计算机网络?
区块链安全吗?
区块链引入了多种方式来解决安全和信任问题。首先,新增的区块总是按照时间顺序线性存储。也就是说,新增的区块总是被添加到区块链的末尾。如果你翻看被特比的区块链,你会发现在链上的每个区块都有它的位置,被称为高度。截止2020年1月,比特币的高度已经超过了615,400。
在区块被添加到区块链上之后,它将很难被撤销并且块中的内容也很难被修改。这是因为每个区块都有自己的哈希值,以及前一个块的哈希值。哈希值由一个数学函数创建,该函数可以将数据信息转换为由数字和字母组成的字符串。不管用什么方式修改了消息,它的哈希值都会改变。
接下来介绍区块链为什么是安全的。
假如有黑客修改了你的Amazon订单,让你实际为你的订单支付两倍的金额。由于订单的金额被修改了,那么块的哈希值就会改变。而下一个块中扔包含的是旧的哈希值,这样黑客为了完成他们的攻击,就需要更新下一个块的信息。然而这样的话,这个块的哈希值就又会改变。下一个块也需要这样的操作,一直到区块链的最后一个块。
为了修改一个块,黑客需要修改区块链上排在这个块后面的所有的区块。要重新计算这些哈希值,需要庞大到无法实现的算了。换言之,一旦区块被添加到区块链上,要修改它将变得非常困难,而要删除它更是不可能的。
为了解决信任问题,区块链网络对那些想向区块链中添加区块的计算机执行了测试。这些测试被称作共识模型,要求用户在参与到区块链网络之前先证明他们。最常见的例子就是被用在比特币中的“工作量证明”(Proof of Work)。
在工作量证明系统中,计算机必须证明他们为解决一个复杂的数学问题做了工作。如果一个计算机解决了问题之一,那么它将有资格向区块链中添加区块。但实际上这个向区块链中添加区块的操作并不容易,在加密货币世界中,这一操作被称为挖矿。在2020年1月,比特币网络中解决这些复杂数学问题之一的概率为15.5万亿分之一。为了解决这些复杂的数学问题,计算机必须执行耗费大量算力的程序。
工作量证明并不能让黑客攻击称为不可能,但它能让他们做大量的无用功。如果黑客想在区块链上发动一次攻击,那么他们必须拥有超过区块链网络上50%的算力,这样才能吞没网络上的其他的参与者。有鉴于比特币区块链的巨大规模,所谓的51%攻击计算是毫无价值的,甚至是不可能的。
区块链 vs. 比特币
区块链的目标是让数字信息可被记录和传播,但不能被修改。这些概念在没有接触过区块链技术之前是很难理解的,所以,我们先来看下最初的区块链应用是如何工作的。
区块链技术最早是由Stuart Haber和W. Scott于1991年提出的,这两位研究员想实现一种文档时间戳不会被修改的系统。但是知道差不多20年后,2009年比特币出世,区块链才有了它的第一个实际应用。
比特币协议建立在区块链之上。在介绍数字货币的研究论文中,比特币的匿名创建者中本聪(Satoshi Nakamoto)将其称为“一种完全对等,没有可信赖的第三方的新型电子现金系统”。
它的工作原理如下。
世界各地都有人拥有比特币。世界各地大概数百万的人至少拥有一部分比特币。假设这些人中的一部分想将他们的比特币用于日常开销。区块链就由此开始。
在使用印刷货币时,货币的使用是由一个权威的中央机构进行控制和确认的,通常是银行或者政府,但是比特币不受任何人控制。取而代之的是,比特币的交易是由计算机网络确认的。这也就是为什么比特币和区块链被称为去中心化。
当用户使用比特币向其他用付款时,比特币网络上的计算机竞速确认这笔交易。为了完成这项工作,用户需要在他们的计算机上运行程序,尝试解决名为“哈希”的复杂数学计算问题。当一台计算机通过哈希这个区块解决了这个问题,它的计算工作同样确认了这个区块上的其它交易。正如我们上面了解到的,完整的交易会公开的,且被以区块的形式存储在区块链上,这表明它成为不可更改的。就比特币和其它区块链而言,成功确认区块的计算机会获得加密货币形式的回报。通常这一过程被称为挖矿。
尽管区块链上的交易是公开记录的,但用户数据不是,至少不全是。为了规范比特币网络上的交易,参与者必须运行一个名为钱包的程序。每个钱包都由两个唯一且不同的加密秘钥组成:公钥和私钥。公钥是交易发起和撤销的地址。也是作为用户数字签名出现在区块链账本中的秘钥。
尽管在比特币中用户使用他们的公钥来接受付款,但并不能从公钥中取得私钥。用户的公钥是他私钥的缩写形式,由一个复杂的数学算法创建。相当复杂的方程式,使得从公钥反推出私钥几乎是不可能的。基于这个原因,比特币技术可以认为是安全的。
公私钥基础
对于公私钥,你可以把公钥当做学校的储物柜,私钥就是柜子的密码。老师、同学甚至你的死对头都可以往你这个公开的储物柜里塞信件,但只有拥有这个储物柜唯一密码的人才能从中取回里面的东西。不过需要注意的是,学校储物柜的密码会保存在校长室,但在区块链网络中没有一个中心数据库来保存私钥。一旦用户丢失了他们的私钥,那他们也就丢了他们的比特币钱包。
唯一公链
在比特币网络中,区块链不仅是网络中的用户分享和维护的账本,它还是达成的共识。当用户加入网络时,他所使用的计算机会接收一份区块链的副本,当有新的区块加入时,副本会自动更新。但如果由于人为失误或者黑客攻击,导致他所维护的区块链副本与其它的副本都不相同呢?
区块链协议通过共识过程来避免多个支链的存在。在存在多个不同的区块链副本的情况下,共识协议认定最长的支链为合法链。区块链中用户越多,意味着区块会更快添加到链的末尾。依照这样的逻辑,记录区块链的永远都是那条被最多用户信任的链。共识协议是区块链技术最大的优点之一,也是它最大的缺点之一。
理论上的黑客证明(Hacker-Proof)
理论上,这条规则有利于黑客,被称为51%攻击。这样的攻击是如何产生的呢?假如比特币网络中500万台计算机。要在网络上实现多数攻击,黑客需要控制至少超过250万台计算机。这样做之后,就可以实现记录新交易的一次或一组攻击。他们可以先发起一笔交易,然后在撤销它,这样的结果就是刚花出去的比特币还在他们手里。这种攻击,被称为双花,可以完美的伪造出一份证明,然后让用户用相同的比特币消费两次。
就比特币的区块链规模来说,这种攻击是很难实现的,因为这需要攻击者控制上百万的计算机。2009年比特币第一次提出时,只有10个用户,当时很容易通过控制网络中的大多数算力来发起攻击。所以区块链的这一决定性特征被认为是新兴加密货币的一个弱点。
用户担心的51%攻击实际上限制了对区块链的垄断。在“Digital Gold: Bitcoin and the Inside Story of the Misfits and Millionaires Trying to Reinvent Money”,纽约时报记者Nathaniel Poppe提到了一个名为“Bitfury”的组织,汇集了成千上万的高性能计算机以区块链上获得竞争优势。他们的目标是挖掘尽可能多的区块,赚取比特币,当时每个比特币的价值约为700美元。
Bitfury
然而在2014年3月,Bitfury已经拥有了接近比特币网络全网50%的算力。他们没有计算增加自己的算力,而是选择约束自己,并承诺永远不会超过40%。因为Bitfury知道如果他们选择计算增加算力,比特币将会贬值,因为用户担心51%攻击。换言之,如果用户失去了对区块链网络的信任,那么存储其上的信息将毫无价值。因此,区块链用户只能将他们的计算能力提高到开始赔钱之前的水平。