《IPFS原理与实践》 —1.2.2 区块链发展

2021-04-20 09:49:44 FIL16888 13482

1.2.2 区块链发展

1976年是奠定区块链的密码学基础的一年,这一年Whitfield Diffie与Martin Hellman(见图1-4)首次提出Diffie-Hellman算法,并且证明了非对称加密是可行的。与对称算法不同,非对称算法会拥有两个密钥—公开密钥和私有密钥。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。这是后来比特币加密算法的核心之一,我们使用比特币钱包生成私钥和地址时,通过椭圆曲线加密算法,生成一对公钥和私钥。有了私钥我们可以对一笔转账签名,而公钥则可以验证这一笔交易是由这个比特币钱包的所有者签名过的,是合法的。将公钥通过哈希运算,可以计算出我们的钱包地址。

 image.png

图1-4 右一为Diffie,右二为Hellman

1980年,Martin Hellman的学生Merkle Ralf提出了Merkle Tree(默克尔树)数据结构和生成算法。默克尔树最早是要建立数字签名证书的公共目录,能够确保在点对点网络中传输的数据块是完整的,并且是没有被篡改的。我们前面提到,在比特币网络中,每一个区块都包含了交易信息的哈希值。这一哈希值并不是直接将交易顺序连接,然后计算它们的哈希,而是通过默克尔树生成的。默克尔树如图1-5所示。默克尔树生成算法会将每笔交易做一次哈希计算,然后两两将计算后的哈希值再做哈希,直到计算到默克尔根。而这个默克尔根就包含了全部的交易信息。这样,能大大节省钱包的空间占用。例如,在轻钱包中,我们只需下载与自己钱包对应的交易信息,需要验证的时候,只需找到一条从交易信息的叶节点到根节点的哈希路径即可,而不需要下载区块链的全部数据。在IPFS项目里,也借鉴了默克尔树的思想。数据分块存放在有向无环图中,如果数据被修改了,只需要修改对应默克尔有向无环图中的节点数据,而不需要向网络重新更新整个文件。值得一提的是,Merkle在提出默克尔树时,分布式技术尚未成型,更别提数字货币了,而他在当时就能察觉并提出这样的方法,实在是令人赞叹。

 image.png

图1-5 默克尔树结构

非对称加密算法和默克尔树数字结构是后续数字货币和区块链的理论基础。而真正将密码学用于数字货币的尝试,则晚了许多。数字货币兴起于1990年的数字朋克(CyberPunk)运动,它是由一批热爱网络的极客们推动的。数字朋克们大多是密码学的专家,对于个人隐私十分向往,希望建立一套独立于现实中的国家、等级制度以外的空间。其中最典型的代表是David Chaum,他最早提出了盲签名技术,并将其应用到了Digit Cash项目(又名Ecash)中。盲签名是一种保护隐私的签名方式,它的签名者对其签署的消息不可见。比如,用户需要签署一个转账信息,而这一信息需要银行签名,用户为了保护隐私,不希望银行看到其具体的转账对象,就可以使用盲签名。David在他的论文中提出了用盲签名实现匿名货币的想法,具体方式是用户在本地计算机的Ecash程序中以数字格式存储现金,再交给银行进行盲签名。这套系统已经与当时的银行系统非常接近了,差一点获得了成功。但是Digit Cash始终需要中心化的银行服务器支持。在后续,没有一家银行愿意再支持他的项目,最终项目失败了。数字朋克运动中诞生的系统及关键人物如表1-1所示。

表1-1 数字朋克运动中诞生的系统及关键的人物

image.png

在Digit Cash失败后的几年里,人们几乎放弃了数字现金的构想。仅有少数数字朋克继续着研究。一个名为Hashcash的想法是在1997年由当时同为数字朋克的博士后研究员Adam Back独立发明的。Hashcash的想法很简单:它没有后门,也不需要中心第三方,它只使用哈希函数而不是数字签名。Hashcash基于一个简单的原理:哈希函数在某些实际用途中表现为随机函数,这意味着找到哈希到特定输出的输入的唯一方法是尝试各种输入,直到产生期望的输出为止。而且,为了找到这样一个符合条件的输入,唯一方法是再次逐个尝试对不同的输入进行哈希。所以,如果让你尝试找到一个输入,使得哈希值前10位是0,你将不得不尝试大量的输入,你每次尝试成功的机会是(1/2)10。这就是工作量证明的早期来源,也是矿工们每天在重复做的事情。他甚至在技术设计上做了一些修改,使其看起来更像一种货币。但显然,他的方案不能检验节点是否作弊,不能作为真正的数字现金。

还有两位有杰出贡献的数字朋克—Hal Finney和Nick Szabo,他们经过重新考虑将技术整合了起来。Nick Szabo不仅是一位计算机科学家,同时精通法律。Szabo受到David Chaum的启发后,希望利用密码协议和安全机制,提出了数字合约的构想。数字合约能在网络上不依靠第三方协助而是利用程序来验证并执行合同,它与传统合同相比更安全,并且减少了烦琐沟通的成本。这对后续的加密数字货币设计有着极大的影响。比特币网络可以提供非图灵完备的脚本语言实现部分智能合约功能;以太坊则进一步在EVM上运行Solidity语言,提供了图灵完备的智能合约环境,这也为后续分布式应用开发奠定了基础。

Nick做出的贡献还不只是发明了智能合约,在2008年,他发起了Bit Gold项目。在项目计划书中,Nick阐述的Bit Gold架构与现在的比特币完全相同,同样是工作量证明机制,同样是链式网络结构,同样的新区块包含旧区块的数字指纹,包含时间戳等诸多特性。然而,最终Bit Gold项目还是没有顺利完成。目前,Bit Gold可查寻的源头只有在Bitcoin Talk论坛中的帖子,后续的可查证资料就很少了。有一些比特币爱好者们一度认为Szabo就是中本聪本人,不仅因为Bit Gold与Bitcoin的也相似之处令大家充满想象,甚至是在词法和句法上,中本聪的比特币论文与Bit Gold论文也有相似之处。而且Nick家不远的地方,有一位叫中本聪的日本人,大家猜测这是Nick为了掩人耳目而故意隐藏自己的身份。Nick本人对此表示否认,并觉得这是个很搞笑的八卦。当然这也成为数字货币里最大谜团,究竟中本聪是谁呢?

再之后,到了2009年,中本聪发表了比特币论文。他提出了一整套加密协议,而不仅仅是加密货币。比特币使用计算机程序控制货币的发行,发行总量2100万枚。比特币的账本记录在成千上万台计算机上,黑客无法入侵;每个账户都是加密地址,你不知道谁在花钱,但是每个比特币的流通都被记录,你知道它的来源和去向的地址。比特币是第一个达到上述全部思想的项目,整合了之前30多年的技术积累。

比特币在设计之时,考虑到网络的稳定性和抵御恶意攻击,它使用的是非图灵完备的脚本语言(主要不能使用循环语句)。2013年,Vitalik Buterin 认为,比特币需要一种图灵完备的脚本语言来支持多样的应用开发。这个思路没有被比特币社区支持,于是 Buterin考虑用更通用的脚本语言开发一个新的平台,这就是后来的以太坊以太坊在大致思路上与比特币相似,在账户状态、UTXO、地址形式上进行了一些优化。其最大的亮点在于,开发了Solidity智能合约编程语言和以太坊虚拟机(EVM)这一以太坊智能合约的运行环境,用于按照预期运行相同的代码。正因为EVM和Solidity,区块链的平台应用(DAPP)迅速兴起了。以太坊平台提出了许多新用途,包括那些不可能或不可行的用途,例如金融、物联网服务、供应链服务、电力采购和定价及***等。时至今日,基于DAPP的各类应用还在迅速发展,新的市场和需求在进一步被发现。后续区块链会如何发展,我们拭目以待。


首页
产品
新闻
联系