区块链:技术驱动金融
上QQ阅读APP看书,第一时间看更新

1.5 两种简单的加密货币

现在,让我们从密码术过渡到加密货币。我们之前的密码术干货在这里就要开始发挥作用了,今后我们会逐渐看到各部分之间如何相互联系,也会发现哈希函数和数字签名等密码程序的意义。在本节,我们将讨论两种很简单的加密货币。当然,我们也需要学习本书后面大量的内容,才能深刻阐释比特币本身的运作机制。

高飞币

第一个是高飞币(GoofyCoin,此币的创造者叫高飞),它应该是我们能想到的最简单的加密货币。高飞币只有两个规则,第一个规则是指定高飞可以随时创建新币,且这些新创建的币都属于他。

为创建新币,高飞生成一个他之前从未生成的唯一的货币编号(uniqueCoinID),并建立字符串“CreateCoin [uniqueCoinID]”。然后,他使用秘密签署密钥计算这个字符串的数字签名,该字符串与高飞的签名就构成一单位币。任何人都可以验证该新币包含高飞有效签名,因此该新币为有效币。

高飞币的第二个规则是,拥有此币的人可以将其转给其他人。转移一只币不是简单地将币数据结构发送给接受者,而是必须通过密码程序来完成。

假设高飞想把他创建的一只币转给爱丽丝。未达成这个目的,他需要创建一个新的声明表示“将此币支付给爱丽丝”,在此声明中“此币”就是该币的哈希指针。如上所述,身份其实就是公钥,因此“爱丽丝”指的就是爱丽丝的公钥。最后,高飞签署代表该声明的字符串。因为高飞是起初拥有该币的人,他必须签署花掉该币的任何交易。一旦由高飞签署的代表他的交易的这个数据结构存在,爱丽丝便拥有这个币。她可以向任何人证明她拥有这个币,因为她可以展示有高飞有效签名的数据结构。此外,它也指向曾经为高飞所有的一个有效币。因此,该币的有效性及所有权在系统中就不言自明了。

一旦爱丽丝拥有了这个币,她也可以花掉它。为达到这个目的,她创建了一个声明表示“将这个币付给鲍勃的公钥”,此时“这个币”就是她所有的那个币的哈希指针。当然,爱丽丝要签署该声明。任何看到这个币的人都可以验证鲍勃是其所有人。他们可以根据哈希指针链追溯到该币的创建及验证每一个步骤,这就是其合法所有人签署了一份声明表示“将这个币支付给[新的所有人]”,详见图1.10。

图1.10 高飞币交易

注:该图示例了货币创造的过程和被花费过两次的过程。

总结一下,高飞币的规则是:

● 高飞可以通过签署声明表示他使用唯一的货币编号来创建一个新币。

● 币的所有人可以通过签署声明表示“将这个币转给X”(其中X为公钥),将其转给另一个人。

● 任何人都可以验证一只币的有效性,跟随哈希指针追溯到它是由高飞创建,并验证过程中所有签名。

当然,高飞币有一个致命安全隐患。假设爱丽丝通过把她签署的声明发送给鲍勃,即将她的币转给鲍勃,但并没有告诉其他人。她也可以创建另一个签名,声明将同样一只币转给了查克(Chuck)。对于查克来说,这看起来是一个完全有效的交易,而他是该币的所有人。鲍勃和查克似乎都可以有效表示自己是那个币的所有人。这个就是所谓的双重支付(double spending)——爱丽丝将同样一只币花了两次。我们一看就知道货币是不能这样花的。

事实上,双重支付是任何加密货币需要解决的主要问题之一,高飞币没有解决这一问题,因此不安全。

高飞币很简单,其货币转移机制其实与比特币非常相似,但是因为它并不安全,因此并不适合作为加密货币。

财奴币

为解决双重支付问题,我们会涉及另外一个加密货币,我们将其称为财奴币(ScroogeCoin)。财奴币是以高飞币为基础创建的,但在数据结构方面更复杂。

第一个主要概念如下:一个叫财奴的指定实体将负责公布包含所有发生过的交易历史记录的仅增账目(append-only ledger),账目的仅增特性保证了写入这个账目的任何数据都会永久保留下来。如果账目真的为仅增,通过要求所有的交易在被接收前都写入项目,我们可以用其防止双重支付的发生。这样,如果之前币已经转给了一个不同的所有者,大家都可以看到。

为执行这个仅增功能,财奴可以建立一个区块链(我们之前已经讨论过其数据结构),对于区块链,财奴要进行数字签名,因此,这从而就形成了一系列数据块,每个数据块都包含一次交易(在实践中,一种优化的做法是将多次交易放入同一个区块中,比特币就是这样做的),每个区块包含交易的ID、交易的内容,以及上一个区块的哈希指针。财奴数字签名是针对最后一个哈希指针(它约束整个结构中所有的数据),并将签名与区块链一起发布,见图1.11。

图1.11 财奴币系统中的区块链

在财奴币中,只有在由财奴签名的区块链的交易才算数。任何人都可以通过核查财奴在区块中的签名来验证交易是否经过财奴的支持,财奴会确保不会支持企图双重支付,也就是不会支持已经支付过的币的交易。

为什么除了让财奴签署每个区块,我们还需要一个带哈希指针的区块链?这样做是保证仅增特性。因为财奴有可能试图增加或移除交易记录,或者改变已有交易,而一旦有了哈希指针,将会影响到后面所有的区块。只要有人监督财奴发布的最新哈希指针,变化会很明显,并可以被轻易发现。在一个财奴分别签署不同区块的系统中,你需要记录他签署的每一个签名。采用区块链,两个不同的人可以轻易验证他们确实观察到了同样的,由财奴签署的交易记录。

财奴币中有两种交易。第一种是造币(CreateCoins),类似于在高飞币中,高飞可以创建新币的程序,而财奴将其进行了扩展,那就是可以在一次交易中创建多个币量,见图1.12。

图1.12 造币交易

注:造币交易创造多个货币。每一个货币在交易中都有一个序号。其次,每一个货币也有一定的数量,来对应某个数目的财奴币。最后,每一个货币还有一个造币记录,在货币被制造出来的时候对应的公钥。因此,造币交易创造了多个不同数量和归属于不同拥有者的新货币。我们将这些货币称为虚拟货币ID,指的是该次交易中交易ID和货币序号的组合。

造币交易如果是由财奴签署,从定义上说它总是有效的。我们不会担心财奴什么时候有权创建新币或者可以创建多少,正如我们不担心在高飞币中,高飞可以创建新币那样。

第二种交易是付币(PayCoins)。这一交易会消耗币,就是说消除它们,并创建具有相同总值的新币。新币可能属于不同的人(公钥),这一交易必须由每一个支付该币的人来进行签署。因此,如果你是本次交易中将会消耗的某只币的所有人,那么你就需要数字签署该交易,表明你同意花掉这只币。

财奴币的规则阐明,如果以下四个条件为真,付币交易有效:

● 被消耗的币为有效货币,即它们是在之前的交易中创建的。

● 被消耗的币没有在之前的某交易中被消耗掉。就是说,本次交易不是双重支出。

● 本次交易产生的币值量等于消耗的币值量,也就是说,只有财奴才可以创建新币。

● 本次交易被消耗的所有币均有其所有者的有效签署。

图1.13 付币交易

如果所有条件都满足,那么付币交易有效,并且财奴会接受交易(见图1.13)。他会通过将其附加到区块链上,将交易写入历史记录。之后,每个人都可以看见交易发生了。只有在这时,参与者才可以接受交易实际发生了。直至发布之前,它都可能是一个被双重支付抢占的交易,即使前三个条件都被满足。

这个系统中的货币是不可变的——它们不会被改变、细分或者联合。每个币都在一次交易中被创建一次,然后在之后的其他交易中被消耗。但是我们可以通过交易对货币进行细分或联合,来实现相同的效果。例如,为了细分一只币,爱丽丝创建了消耗该币的新交易,然后生成了两个具有同样总值的新币,这两个新币可以再次分配给她。因此,虽然在本系统中币是不可变的,但是它具有除了可变币以外的系统的所有灵活性。

现在,我们来看一下财奴币的核心问题,财奴币的工作原理是人们可以看见哪些币是有效的。它防止双重支付,因为每个人都可以查看区块链,看到所有交易都是有效的,每一只币确实都只被消耗了一次,但其问题是,财奴的权利太大了。他虽然不能创建虚假交易,因为他无法伪造其他人的签名,但是他可以停止支持其他用户的交易,不为他们提供服务并让他们的货币无处可花。如果财奴是贪婪的(正如与他同名的卡通形象一样),他可以拒绝公开交易,除非其他人向他支付强制性交易费。当然了,财奴还可以想要多少币,就给他自己创建多少。或者财奴也可能厌倦整个系统,因此完全停止更新区块链。

这里的问题就是中心化。虽然财奴本身满意这个系统,我们用户可能会不满意。财奴币虽然看似是一个不切实际的方案,但是在很多早期的密码系统研究中,确实假设过一些中央可信机构,还特别被称为银行。毕竟,绝大多数现实世界货币的确有可信发行人(通常为政府造币厂)负责创建货币,并决定哪些钱币为有效货币。但是,具有中央机构的加密货币纷纷在实践中失败。原因有很多,回头来看,我们似乎很难让人们接受有中央机构的加密货币这个事物。

因此,为改善财奴币,并建立一个可行系统,我们需要解决的主要技术问题是:我们是否能让系统“去财奴化”?也就是说,我们是否能放弃中心化的财奴人物?我们能够有一个在很多方面像财奴币一样运作的加密货币,但没有中央信任机构吗?

为回答这些问题,我们需要解决所有用户如何在交易历史记录发生后,一致同意采用一个公开区块链,他们必须一致同意哪些交易有效、哪些交易是实际发生了。他们还需要能够用一种去中心化的方式分配ID。最后,新币的铸造也需要通过去中心化的方式进行掌控。如果我们可以解决所有这些问题,那么我们可以创建一个如同财奴币那样的货币,但确实没有中心化的机构。实际上,这样的一个系统就与比特币非常相像了。

延伸阅读

史蒂芬·列维(Steven Levy)的《密码术》,从一个令人愉悦的、非技术的角度看待现代密码术的发展,及其背后的人和事:

Levy, Steven. Crypto: How the Code Rebels Beat the Government—Saving Privacy in the Digital Age. London:Penguin, 2001.

现在密码术还是一个较为理论化的领域,密码学者使用数学以一种较为正规的方式定义其基础知识、协议以及其他被用户期望的安全特性,并根据关于特定数学问题的计算复杂性中被广泛接受的假设,来证明它们的安全性。本章我们使用到了直觉语言来讨论哈希函数及数字签名。对于有兴趣用更为严格的数学的方式,以及想更深入探索这些概念及其他密码学理论的读者,我们推荐你阅读:

Katz, Jonathan, and Yehuda Lindell. Introduction to Modern Cryptography, second edition. Boca Raton,FL:CRC Press, 2014.

对于应用密码学概述,参见:

Ferguson, Niels, Bruce Schneier, and Tadayoshi Kohno. Cryptography Engineering: Design Principles and Practical Applications. Hoboken,NJ:John Wiley & Sons, 2012.

精读定义SHA-256的NIST标准是了解密码学标准的有效方式:

NIST.“Secure Hash Standards, Federal Information Processing Standards Publication.”FIPS PUB 180-4. Information Technology Laboratory, NIST, Gaithersburg, MD, 2008.

最后,请参考讨论ECDSA签名算法标准化版本的论文:

Johnson, Don, Alfred Menezes, and Scott Vanstone. “The Elliptic Curve Digital Signature Algorithm (ECDSA).” International Journal of Information Security 1(1)2001:36-63.