区块链简明教程/Blockchain:Simple Explanation

Blockchain.png

原文:Oleg Mazonka, Blockchain:Simple Explanation
摘要:本文逐步讲解区块链是什么以及如何运作。
术语:区块链、哈希链、比特币、密码货币

简介

区块链是个时髦热词。你也许多次听人提及并认为你应该理解它是什么。读完本文之后,你也许会真的理解。

最初的难题源自这样的想法:将一些事物用数据单位进行描述,以便安全地从一方传递给另一方。假设你在银行账户有一些钱,你想把部分钱安全的转移给别人,通常会采用电子支付——并没有物理意义上的金钱交割。其实这本也友好简单。但是,始终需要有一个可信任银行。有没有可能将一些数据单位存储在我的电脑上代表金钱,然后不经银行而安全转移到别人的电脑上?是的,有这种可能。然而,不考虑代表物则任何数据排列都可以被复制。因而产生著名的“双重支付”① 难题:某个人用同一笔钱进行不止于一笔的电子交易。直到2009年首个区块链密码货币——比特币出现后,这个问题才妥为解决。

①维基百科:双重支付(又称一币多付)是一种数位货币失败模式的构想,即同一个数位token可以被花用两次以上。不像具有实体的符号货币如硬币,电子档案可被复制,所以花用这个行为并不会从原持有者身上移除拥有的状态,也就是"建立"已支付但未移除的货币,加上属于收款者的已支付的同金额货币,或是使收款者凭空多出多重支付的金额,犹如伪钞般,造成通货膨胀而导致货币贬值,从而不再让人信任并愿意持有及流通。

随后几年,许多其他密码货币相继出现,并遵循区块链技术的相同原则,解决了不经由银行的双重支付难题。通过将一个哈希链嵌入另一个哈希链,与某个人相联系的数列因此可以到处传递,但却无法复制并再次支付。哈希链是什么?首先让我们来回忆一下什么是哈希值

哈希函数

哈希函数(Hash function)是一种将任意长度的数据转化为预先固定长度字符串(称之为哈希值)的方法。最简单的哈希函数之一是模运算(modulo operation)。任何字符串都可以转化为数字(有可能会很大),这个数字可以用一个常数进行除法运算,除法运算后的余数即为运算结果哈希值。显然,运算结果会小于常数。这个哈希函数很简单,但同时并不常常被使用,因为人们想要另一属性——单向运算。计算哈希值很容易,但是找出哈希函数的输入值一定很困难,或者说实际上不可能。

如果非要和其他哈希函数进行区分的话,有上述属性的哈希函数有时被称为密码式哈希函数。这类函数以一种错综复杂的方式接收输入数据块,使得反向运算(reversible computation)变为不可能。最著名的密码哈希函数是MD5、SHA1、SHA2。MD5函数运算范例如下:

MD5(”abc”) = 900150983cd24fb0d6963f7d28e17f72

运算结果是一个以十六进制显示的124位字符。
如果以某种形式表示的哈希值,再次被输入哈希函数中,将会得到一个新的哈希值。如果有人重复这个过程,运算结果将结合在一个哈希数列中,因此就获得一个哈希链(hashchain)。

哈希链

哈希链是由一个哈希函数链接在一起的连续同族数据块。下图1是一个哈希链的范例:

1.png

每个数据块包含着哈希值和有效负载。每一区块的哈希值都是根据之前所有的区块计算而得出,每一区块的有效负载为任意数据。这种哈希链的重要特性在于,对任何区块数据的修改,都将影响后续区块的完整性。举例言之,如果第一区块的有效负载改变了,那么第二区块的哈希值也必将改变,然后第三区块的哈希值也将改变,以此类推。

接下来的步骤是授权唯一一个人在链中制造新区块。进行此项操作的方式之一是公用密码技术

公用密码技术

公用密码技术(Public Key Cryptography, PKC)的基本理念与哈希函数类似——单向运算。提供特定数据M,任何人可以计算出加密值Enc(M)。但是,只有知道这个加密值的特殊密钥的人,才能反向计算,例如从Enc(M)反推M。这个过程称之为破译(decryption)。

为实现公用密码技术,首先需要创建所谓的密钥对(pair of keys)——公钥和私钥。公钥用于加密数据,可以让任何人知道。私钥用于破译,必须保密。

下图展示了计算的方向。顶部箭头代表在没有提前知晓私钥的情况下破译的理论可行性。举例说明,远端用户模块(RSA)加密即基于大额数字因式分解的数学属性。

2.png

如果有人找到分解大额数字(即公钥)的方式,那么这个人将可能在不知道密钥的情况下进行破译,即攻破密码。

公用密码技术有两个主要应用场景。第一种应用场景:某方想向另一方发送安全信息,在该等场景下,一方利用另一方公钥加密信息,加密信息可以公之于众,因为仅有有密钥的另一方才能读取信息。除了理论上破解数字的可行性外,这种方法的唯一弱点在于必须首先知晓并信任公钥。为了解决这个问题,互联网https协议中普遍存在着全系统的分层公共证书。第二种应用场景与第一种应用场景完全相反。给定一些数据,Alice用密钥将其加密(或者仅仅将原始数据的哈希值加密),然后公开两组数据:原始数据和加密数据。任何知道公钥的人可以验明:加密数据实际上是使用与公钥配对的私钥计算得出。这个验证扮演着Alice确实如此行为的确认角色。这个过程称之为数字签署,加密的部分称之为数字签名(digital signature.)。

前图2展示的是第一种应用场景。在第二种应用场景下,密钥和公钥互换。我们再一步步来看:Alice从M文档中提取一个哈希值并用他的私钥加密哈希值,然后将文档即加密哈希值公开。其他任何人可以取得文档的哈希值并使用Alice的公钥破译加密哈希值。如果两个哈希值相同,那么意味着Alice确实曾经签署过M文档。数字签名的应用场景在区块链中十分有用。

使用公用密码技术保护哈希链

现在,让我们回到“仅有一个人能在哈希链上增加区块是否可能”的问题上。如果图2中的最后一个区块包含当前拥有者的公钥和前一区块拥有者的数字签名,那么下一区块的创建将需要当前区块(即拥有私钥者)的签名。当在创建新区块时,当前区块拥有者将他人的公钥置于下一区块并签署该区块。因此,任何持有与新发布区块相匹配私钥的人,将成为下一区块的拥有者。数字签名则证实仅有前一拥有者才可以这么做。

图3展示公用密码技术如何在哈希链中加以运用。

3.png

经由公用密码技术授权的哈希链可以扮演保护数字媒介——称之为“通证”(TOKENS)进行安全交易的角色。假设一个哈希链代表一个通证,它也许是真实世界赋予一个特定价值的特定物。最后一个区块的拥有者即为该等价值的拥有者,因为只有他才能将该区块传递给其他人。然而这种哈希链的实现需要一个中央位置,在这里区块得以创建、存储以及被验证。我们回到银行的概念——一个需要被信任的地方。

区块链

假设有这么一个地方(现实中可能存在),有一个持续运转的程序,不断创建用于全球性哈希链的区块。假设你可以将任何你愿意的数据放在这个全球性哈希链的有效负载上。如果这样的地方和程序存在,那么你可以将代表价值的哈希链区块植入这样的全球性哈希链。换言之,这将是另一个哈希链中的哈希链。事实上这种机制称之为区块链技术。

4.png

图4展示的是一个区块数据包含内部哈希链区块的外部哈希链。内部哈希链的区块可以混沌出现于外部哈希链。比较显而易见的情形是旧的内部区块不能在新的外部区块中显示。

就如何组织全球性哈希链,存在不同解决方案。最初在比特币白皮书上提及的特殊解决方案,让比特币(Bitcoin)红极一时。

社交诱因

在比特币网络中,全球性哈希链是一个分布于诸多计算机之中的数据库。这个全球性哈希链包含着许多代表有价通证(称之为“比特币”)的内部哈希链。在这些内部哈希链上创建的新区快称之为“交易”(transactions)因为它们代表着比特币所有权的变更。一个特定比特币的所有者在对应的内部哈希链创建一个区块,并将这个区块作为一项新的交易发布到外部哈希链的下一区块中。发布意味向所有其他已知的P2P比特币参与者发送。当外部哈希链创建区块时,它同时也对外发布了。

任何参与者均可在外部哈希链上创建新区块,以发布区块所含的交易。但这并不容易。为防止混乱,所有参与者遵循一套特定规则——协议(protocol)。任何不按规则出牌的人都将出局。该等协议基于如下三条原则:

(1)创建新区块需要相当的计算工作量(significant computational effort);
(2)创建新区块回报颇丰,因此许多人都全力以赴以成功创建新的区块;以及
(3)当出现分支时,分支最长者获胜。

第一个原则仅要求从区块中提取的哈希值加上从零字节位数开始的随机数据。因此,该等随机数据不断修改,哈希值不断计算,直至零字节条件成就。这种要求使得区块创建异常困难。

另一方面,任何创建区块的人都将收到许多代表特定价值的、新创建的内部哈希链——比特币。这也是协议的一部分。此外,因为比特币代表某种货币,内部哈希链代表该等货币的交易,交易所有人可以将交易价值的一小部分(费用)给予全球性哈希链新区块的创建者。因此,新区块的创建者收到新创建的比特币加上所有从该区块交易中收取的费用。

第三条规则确保有且仅有一个现行有效的数据库副本在众多计算机之间分布。显而易见的是,因为多方都在尝试创建新区块,一些不同的区块将分别独自创建。鉴于传播并非即时性的,新区块可以在那些已独立创建的区块顶端创建。这种情况造就了全球性哈希链分支。第三条规则确保仅有一支分支最长并被视为有效。这一规则运作良好,因为区块创建困难,因此两支以上分支并存的可能性迅速灭绝。

我们可以看出,外部哈希链扮演着有效替代权力实体的中央仓库角色。因为外部哈希链是全球性的,它独立且可靠地存储内部哈希链的点点滴滴,并将通证和他们的所有者捆绑在一起,同时使得双重支付变为不可能。外部哈希链的数据库分布在众多互不信任的各方之间,因此要强制这些各方社群整体性遵循某些外部适用规章(例如政治学)变得更加困难。

何谓区块链?

区块链是存在于其他哈希链中的一组特定组织的哈希链。外部哈希链必须基于一套规则用于平衡实用、简单、动因、信任及权限。其目的在于取代可被人类控制并可能被滥用的中央集权。内部哈希链要求有授权机制,以使得一方能够拥有特定价值的事物。该等授权机制并不必然是公用密码技术。举例言之,Hasq哈希链是一种更简单的哈希链,它仅使用哈希函数作为授权机制。

嘤其鸣矣,求其友声