去中心化数位货币的诞生
我们先来谈谈现金吧!
现金(钞票)是一项非常聪明的发明,它容易辨识却又难以伪造。当你去咖啡厅用现金购买一杯咖啡,并不会有任何第三方的机构跳出来验证你的钞票真伪或是帮咖啡厅受理该笔交易,也就是说「现金的支付」完全是以点对点(P2P, Peer-to-peer)的去中心化方式进行,也就是说只要你愿意出钱购买这杯咖啡,而店家点头同意卖你就可以了,这个过程中不需要任何第三方机构当作仲介。在买咖啡的过程中,唯一需要受到检视的个人资料只有「你的人需要出现在店里」。因此,我们若想要将数位货币用于日常的购买情境,那么最基本需要比照现金的使用情况,把数位货币做得:
- 难以伪造
- 可以在买卖方之间自由转移而不需要第三方机构的认证(去中心化)
这篇文章将解释现在的数位货币是如何做到这两件事情。
数位签章的发明
早在E-gold发明以前(E-gold的缘起请见前一篇文章),人们就已经开发出「数位签章」这类难以被伪造的数位认证方式,这样的认证方式已经广泛的被认可。
数位签章是一个使用数学演算法以认证讯息的方法,它被广泛的用于任何内容形式的数位讯息。而数位签章通常经过层层的加密,其中会经过三个步骤:
- 生成私钥以及一组相对应的公钥。
- 经由数位签名加密演算法,结合一则讯息及一组私钥产然后生出一个签章。
- 再藉由数位签名验证演算法,结合电子签章及加密过的讯息产生一组公钥,这组公钥会决定是否该同意或拒绝使用者的存取权限。
上列三点乍看之下有点难理解,让我们拿我们常用的印鉴(印章)做为比喻:
传统的中国印鉴常由天然的素材制成,例如石头、木头、象牙…等,因此每个印鉴的表面材质都是独一无二,且难以被复制的。相较于手写签名,官方单位或政府机关更偏好用这样的印鉴作为认证方式,以防止伪造。它的好处还包含,当有需要签署多页文件时,也可以盖以骑缝章,进而防止某些页面的更改或是可以马上发现有页面遗漏。至今许多亚洲国家还是保持使用印鉴的习惯。
那么,数位文件应该要如何认证呢?请参考下图。
从图片中我们看到,你拥有的私钥(Private Key)也就是印鉴,代表着拥有帐户(Account)的所有权,你可以藉由它来产生出一组代表你的数位签章(Digital Signature)如印鉴盖在文件上的痕迹,并依照名称产生一组可供任何单位查阅的公钥(Public Key)如同每个人都可以阅读印鉴盖印的文字,也就是说,任何认得「印鉴盖印」的单位可以快速的辨别印鉴的真伪,进而同意或是拒绝接受阅读讯息的要求。
同理可证,我们可以把「数位货币」当作那则经过签章加密过的讯息,因此它非常难被仿造,也就是说,它符合先前提到的(1)难以伪造这项条件。但这样的做法是有可能将同一个货币传送给两个以上的人,也就是所谓的「双重支付(一币多付)」,亦即同一个一块钱可以被花用两次以上。这个问题甚至比先前所提到的问题来得严重,也因为有这种可以无限传送数位货币的可能性,让许多早期数位货币的发展受到限制。
如何避免数位货币无限制的发行?
比特币的创办人中本聪Satoshi Nakamoto如何解决这个问题呢?
我们先用一个简单的例子来看:这边有三个人— 爱丽丝(Alice)、鲍伯(Bob)以及卡尔(Carol),他们三个都想要使用数位货币做交易,且三个人的钱包里都只有一个数位货币,而三位参与者也都同意下列的交易规则:
- 任何新的交易都要经过电子签章并将交易金额与所有人分享。
- 每个人在交易完成后必须在自己的表格上更新所剩余额。
- 如果一个货币被同时被交易了两次以上,以第一个被记录在表格上的交易为基准,若同一笔已经有表格被记录,则第二个重复的交易则会直接被忽略,不会被记录下来。
- 每个人每天都需要核对一次彼此的表格,如果大多数的交易金额相符,则对应的余额会在核对后被确认「正确无误」。
遵照上述的规则,这三个人的交易会如同下图:
表格一(初始帐户余额)
Account Balance --------- --------- Alice 1 Bob 1 Carol 1
首先,鲍伯将一个货币传送给爱丽丝,而卡尔将一个货币传送给鲍伯。所有人都在表格上登记了自己的帐户余额,且这天结束之前,主要的交易者都确认这样的余额没有错误,并产出一个新的余额表,如同下列所示:
表格二(帐户余额)
Account Balance --------- --------- Alice 2 Bob 1 Carol 0
一切运营顺利,你可以想像接下来同样的流程会怎么进行。每个人每天根据交易量更新自己的表格,在一天结束之前则会共同产出一个新的帐户余额表。自此爱丽丝、鲍伯以及卡尔经过简单的多数决达成了共识,这个方法做到了基本的去中心化以及点对点(Peer-to-peer)交易。
然而,有一个人性黑暗面的问题可能发生:有一天,鲍伯与卡尔为了赚钱私下勾结,合力伪造彼此的交易并仿造帐户余额,在这个多数决的系统下,爱丽丝的帐户会被迫接受这些交易,而这个简易的去中心化系统就失去了准确度,因为在这个系统的运作下,「帐户余额是否正确」是由多数人决定的
为了防治这种多数人私相授受的可能性,我们采用一种有效的方法— 也就是「随机」挑选一位参与者的表格,并将表格设定为「正确无误」作为判断基准,让人不知道哪时候自己的表格会被挑到而难以假造。但这种方法在以「人」为单位的时候尚可施行,但若参与对象是「电脑」的时候,我们还是会遇到一个问题— 拥有许多电脑的人有比较大的机率获选成为那个「正确无误」的表格。又为了防范这件事情发生,我们发明了「工作量证明(Proof of Work, POW)」机制。
区块链顺利运转的关键:工作量证明
「工作量证明(Proof of Work, POW)」是一个让任一个运算节点(电脑)花费大量时间和运算资源的「计算难题」,它极为复杂且难以计算,但这个数值一但被运算出来,其他人便可以轻易地拿该组数值去做答案验证。这样的「工作量证明(Proof of Work, POW)」就像是在解决*数独(Sudoku),尽管解题需要花费大量的时间与精力解题,但任何知道题目的人都可以立即「验证」正确的答案。
*数独(Sudoku):如上图,是一种逻辑数学填充游戏。玩家须以数字填进每一格,而每行、每列和每个宫(即3x3的大格)有齐1至9所有数字。游戏设计者会提供一部分的数字,使谜题只有一个答案。
我们将「工作量证明(Proof of Work, POW)」套用在每日帐户余额表格的确认上,让所连结电脑的运算成本变高,并且让它们不断计算难题。至于这些每天需被确认的余额表格则被放上新的计算题以及旧的计算题。(你很快就会明白为什么连旧的计算题都需要被放在表格上。)
拥有了「工作量证明(Proof of Work, POW)」机制,我们得以重新立定新的交易规则:
- 任何新的交易都要经过电子签章并将交易金额与所有人分享。
- 每个人在交易完成后必须在自己的表格上更新所剩余额。
- 如果一个货币被同时被交易了两次以上,以第一个被记录在表格上的交易为基准,若同一笔已经有表格被记录,则第二个重复的交易则会直接被忽略,不会被记录下来。
- 每个人每一天都需要帮自己的表格解开「工作量证明」难题。
- 一但解开「工作量证明」难题,必须将纪录更新在自己的表格上,并且分享给大家以利验证。
- 人们通过在这条链上创建下一张表格,经由接纳先前表格中的计算来表达他们确认表格皆「正确无误」。
事实上,当我们将所有表格「链结」在一起时,任何微小的更动都必须要重新解开一次难题— 不只是单一表格必须被破解,而是所有的表格都需要可以套用同一组答案。为什么必须这样做呢?因为当其中任何一个表格用「工作证明」解开了难题,则必须要将「工作证明」套用在其他表格上面,也就是说,当我们在表格链结的后面再加上一个新的表格时,所有表格都必须再做一次「工作证明」。
从上述表格的例子中,各位读者应该有猜想到这些「表格」所代表的就是区块链上一个个区块,而当所有表格相互「链结」时,我们就称它为「区块链」(虽然区块链讲起来很顺口,但我私下还是喜欢称它为「工作证明链结(Proof-of-work chain)」,因为他被由工作证明所运算出来的难题所连结着)。
下一篇我们一起来了解比特币— 这个所有区块链应用的源头的创办者为什么要创造数位货币。
推荐阅读: