在以前的文章中, 我们看到了一个简单的链表概念如何演变为复杂的分布式系统。显然,这是区块链简单的概念演进,但它不是分布式系统出现的唯一方式。分布式系统需要协调、容错、协商一致和多层技术管理(在系统和协议的意义上)。
分布式系统还有许多其他复杂的问题。当分布式系统中的节点也是分散的(从所有权和控制的角度来看)时,安全性就变得至关重要。这就是复杂密码机制发挥作用的地方。巨大的事务量使得有必要处理任何共享或复制数据的性能,从而为扩展、分片和验证分布式数据的概念铺平了道路,以确保它不会失去同步 功能或受到损害。在本节中,我们将讨论一下并不新鲜的盖帘;它们已经为人所知,并且已经研究了几十年。
密码学
分布式系统中的一个重要需求是数据和参与者的安全性。这促使了密码技术的引入。例如,Ralph Merkle在1979年引入了哈希值二叉树(现在称为Merkle树)的概念。块的加密哈希值是由Stuart Haber & W. Scott Stornetta在1991年实现的。1992年,他们将Merkle树纳入他们的效率方案中。
哈希值函数是经过充分研究的标准技术,为许多现代加密技术提供了基础,包括众所周知的SSL证书和http协议。在SHA-1和SHA-2中使用了Merkle哈希值函数,现在称为merker - damgard构造。Hashcash使用SHA-1(1993年最初使用SHA-0, 1995年使用SHA-1),现在使用更安全的SHA-2(实际上由SHA-256和SHA-512组成)。更安全的SHA-3是下一步升级。
分区、缩放、复制和分片
由于区块链的核心是分布式分类账形式的数据库,如何处理数据库规模快速增长的问题变得越来越紧迫。分区、复制、缩放和分片都是密切相关的概念。这些技术过去用于企业系统,现在被用于区块链以解决性能限制。
和区块链一样,这些也不是什么新概念,因为大公司几十年来一直在努力解决这些问题。对于不断增长的数据库来说,直观而明显的解决方案是将其分解为多个部分,并分别存储这些部分。在这个看似简单的解决方案的背后,隐藏着许多技术挑战,例如,应用层如何知道将在哪个“块"找到任何特定的数据记录,如何在数据的多个分区之间管理查询,等等。虽然这些可伸缩性问题在企业系统或已经知道并允许参与者的生态系统(例如,相当于被许可的块链)中易于处理,但在公共区块链中会变得更加棘手。恶意策略的排列似乎没完没了,而实际上也不可能事先列举出来。需要保持合理的匿名性也增加了其解决方案的复杂性。
验证和确认
零知识证明(ZKP)是一种技术,用来证明验证者(另一方,称为验证者),而验证者知道的一些东西,不需要证明者披露什么是验证者所知道的。(这听起来很神奇,但是有许多简单的例子可以说明这是如何实现的,我将在稍后的文章中介绍。)ZKP最初是在Shafi Goldwasser、Silvio Micali和Charles Rackoff于1985年发表的论文《交互验证系统的知识复杂性》中描述的(显然,ZKP早在1982年的时候就开发出来了,但直到1985年才发表)。Zcash是一种基于比特币的加密货币,它使用ZKP(或称为zknoks的变体,由四名研究人员于2012年首次引入)来确保交易的有效性,同时不泄露任何关于发送方、接收方或金额本身的信息。
甚至交易本身都可以通过自动化代码实现,这通常称为智能合约。这是Nick Szabo在1996年首次提出的。尽管名称不同,但考虑到人工智能目前相对先进的状态,这些自动化代码是否可以说是智能合约还存在争议。同样,智能合约也不完全是法律意义上的合同。例如,信用卡交易结合了大量的计算,包括检查余额、欺诈、不寻常的支出模式等,以及在复杂的现代金融交易网络中各方之间的服务水平协议和合约绑定,但我们通常不称之为“智能合约"。相比之下,当前的“智能合约"是相当简单的。
本文地址: https://www.xiguacaijing.com/news/baike/2018/2134.html
赞助商