共产主义和区块链

一、共产自古就是是人们对美好的追求

共产主义(英语:communism;拉丁语:communismus)是一种共享经济结合集体主义的政治思想,主张消灭私有产权,并建立一个各尽所能、各取所需的生产资料公有制(进行集体生产),而且主张一种没有阶级制度、没有国家和政府的社会。在此一体系下,土地和资本财产为人民共同所有。其主张劳动的差别并不会导致占有和消费的任何不平等,并反对任何特权。

我们对比区块链技术的特点和共产特点:

去中心化、分布式(反对任何特权)

自治性、集体维护(进行集体生产)

开放(共享经济集合)

不可篡改(公平)

共产会面临大锅饭导致的生产效率问题,也会带来决策困难的问题,因为要达成每一位人民的共识是一件非常复杂的事情,其中就包括了没有收到通知,故意不表态,口是心非等各种情况,一系列复杂的问题,也是区块链技术需要面对的。

二、区块链实现共产的核心资源

为了解决如此复杂的综合性问题,自然需要各个学科与模块的成功与突破的集合才有可能,我们看看区块链涉及的领域:

分布式、存储、密码学、心理学、经济学、博弈论、网络协议等。

1、区块链技术来源

区块链的演进路径

P2P网络技术:

是区块链系统连接各对等节点的组网技术,学术界 将其翻译为对等网络,在多数媒体上则被称为“点对点”或“端对端”网 络,是建构在互联网上的一种连接网络。

非对称加密算法:

是指使用公私钥对数据存储和传输进行加密和解密。 区块链正是使用非对称加密的公私钥对来构建节点间信任的。

数据库技术:

涉及计算机技术发展的大半历程,是基础性技术,也 是软件业的基石。

数字货币(Digital money)

又被称为电子现金(Ecash)或电子 货币(Emoney),视为对现实货币的模拟,涉及用户、商家和处于中心 化地位的银行或第三方支付机构。数字货币是电子商务和网上转账的基础。现实中数字货币也指一类免密支付的卡,如公交卡。

2、区块链核心组件

共识机制

共识机制是区块链系统中各个节点达成一致的策略和方法。

通信/P2P技术

区块链通常采用P2P技术来组织各个网络节 点,每个节点通过多播实现路由、新节点识别和数据传播等功能。

存储

要实现分布式账本的大规模应用,存储的开销是需要 解决的关键问题之一。

安全机制

三、区块链的关键技术与挑战

1、密码学技术(乌托邦里面的加密技术)

难点:

怎么防止交易记录被篡改?

怎么证明交易方的身份?

怎么保护交易双方的隐私?

2、分布式共识(谁来投票乌托邦要攻打伊拉克到底该不该打?)

核心在于如何解决某个变更在网络中是一致的,是被大家都承认的,同时这个信息是被确定的,不可推翻的。该问题在公开匿名场景下和带权限管理的场景下需求差异较大。

共识问题在很长一段时间内都将是极具学术价值的研究热点,核心的指标将包括容错的节点比例和收敛速度。

3、处理性能(团队大了,各种事情都有走OA,是否浪费了时间?)

如何提高交易的吞吐量,同时降低交易的确认延迟。

4、扩展性(乌托邦里人越来越多,很多人都不认识了,怎么保证民主的问别人意见呢?)

常见的分布式系统,可以通过增加节点来扩展整个系统的处理能力。

对于区块链网络系统来说,这个问题并非那么简单。

网络中每个参与维护的核心节点都要保持一份完整的存储,并且进行智能合约的处理。因此,整个网络的总存储和计算能力,取决于单个节点。甚至当网络中节点数过多时,可能会因为一致性的达成过程延迟降低整个网络的性能。尤其在公有网络中,由于大量低质量处理节点的存在问题将更明显。

比较直接的一些思路,是放松对每个节点都必须参与完整处理的限制(但至少部分节点要能合作完成完整的处理),这个思路已经在超级账本中启用;同时尽量减少核心层的处理工作。

在联盟链模式下,还可以专门采用高性能的节点作为核心节点,用相对较弱的节点作为代理访问节点。

可以简单理解为民主集中制。

5、系统安全(这个不解释了吧)

6、数据库和存储系统(以前私有制东西各方各家,现在社会主义放一起,怎么管理)

区块链网络中的块信息需要写到数据库中进行存储。

观察区块链的应用,大量的写操作、hash计算和验证操作,跟传统数据库的行为十分不同。

当年,人们观察到互联网应用大量非事务性的查询操作,而设计了非关系型(NoSql)数据库。那么,针对区块链应用的这些特点,是否可以设计出一些特殊的针对性的数据库呢?

未来将可能出现更具针对性的“块数据库(BlockDB)”,专门服务类似区块链这样的新型数据业务,其中每条记录将包括一个完整的区块信息,并天然地跟历史信息进行关联,一旦写入确认无法修改。所有操作的最小单位将是一个块。

7、可集成性(乌托邦旁边的国家如果被收购了,怎么合并)

在相当长的一段时间内,基于区块链的新业务系统将与已有的中心化系统共存。

两种系统如何共存,如何分工,彼此的业务交易如何进行传递?

这些都是很迫切的问题。这个问题解决不好,将是区块链技术落地的很大阻碍。

四、挑战如何达成共识问题:分布式系统

1、分布式碰到的第一个问题就是一致性的保障(吃午餐催了服务员三次,结果厨房给你做了三份,谁来买单)

区块链首先是一个分布式系统。

中央式结构改成分布式系统,碰到的第一个问题就是一致性的保障。

在分布式系统中,一致性(Consistency,早期也叫 Agreement)是指对于系统中的多个服务节点,给定一系列操作,在协议(往往通过某种共识算法)保障下,试图使得它们对处理结果达成某种程度的一致。

举个例子,某影视公司旗下有西单和中关村的两个电影院,都出售某电影票,票一共就一万张。那么,顾客到达某个电影院买票的时候,售票员该怎么决策是否该卖这张票,才能避免超售呢?当电影院个数更多的时候呢?

理想的分布式系统一致性应该满足:

可终止性(Termination):一致的结果在有限时间内能完成;

共识性(Consensus):不同节点最终完成决策的结果应该相同;

合法性(Validity):决策的结果必须是其它进程提出的提案。

这类也叫做强一致性。强一致的系统往往比较难实现。很多时候,人们发现实际需求并没有那么强,可以适当放宽一致性要求,降低系统实现的难度。例如在一定约束下实现所谓最终一致性(Eventual Consistency),即总会存在一个时刻(而不是立刻),系统达到一致的状态,这对于大部分的Web系统来说已经足够了。这一类弱化的一致性,被笼统称为弱一致性(Weak Consistency)。

2、共识算法(4人一桌点餐,是一个人点完还是每人分别点呢?)

共识算法解决的是对某个提案(Proposal),大家达成一致意见的过程。提案的含义在分布式系统中十分宽泛,如多个事件发生的顺序、某个键对应的值、谁是领导……等等,可以认为任何需要达成一致的信息都是一个提案。

一般地,把故障(不响应)的情况称为“非拜占庭错误:

一般包括 Paxos、Raft 及其变种。

恶意响应的情况称为“拜占庭错误”(对应节点为拜占庭节点):

一般包括PBFT 系列和PoW 系列算法等。

3、FLP 不可能性原理(每个人都点到可口的,吃不到难吃的,经济实惠的,很快能点完的?鱼和熊掌不可兼得)

FLP 不可能原理:在网络可靠,存在节点失效(即便只有一个)的最小化异步模型系统中,不存在一个可以解决一致性问题的确定性算法。

4、CAP原理(吃个便饭真的需要照顾这么多方面么?一次酒席真的需要嘉宾都要点餐么?)

分布式计算系统不可能同时确保一致性(Consistency)、可用性(Availablity)和分区容忍性(Partition),设计中往往需要弱化对某个特性的保证。

一致性(Consistency):任何操作应该都是原子的,发生在后面的事件能看到前面事件发生导致的结果,注意这里指的是强一致性;

可用性(Availablity):在有限时间内,任何非失败节点都能应答请求;

分区容忍性(Partition):网络可能发生分区,即节点之间的通信不可保障。

5、CAP原理的演变应用(饿的时候点快的,省钱的时候点便宜的,想跳出点餐惯性的就各点一个)

弱化一致性

对结果一致性不敏感的应用,可以允许在新版本上线后过一段时间才更新成功,期间不保证一致性。

例如网站静态页面内容、实时性较弱的查询类数据库等,CouchDB、Cassandra 等为此设计。

弱化可用性

对结果一致性很敏感的应用,例如银行取款机,当系统故障时候会拒绝服务。MongoDB、Redis 等为此设计。

Paxos、Raft 等算法,主要处理这种情况。

算法:

Paxos算法:Paxos 问题是指分布式的系统中存在故障(fault),但不存在恶意(corrupt)节点场景(即可能消息丢失或重复,但无错误消息)下的共识达成(Consensus)问题。

Raft算法:Raft 是对 Paxos 的重新设计和实现。是Paxos 算法的一种简化实现。

弱化分区容忍性

现实中,网络分区出现概率减小,但较难避免。某些关系型数据库、ZooKeeper 即为此设计。

实践中,网络通过双通道等机制增强可靠性,达到高稳定的网络通信。

ACID 原则:

即 Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)。

ACID 原则描述了对分布式数据库的一致性需求,同时付出了可用性的代价。

BASE原则:

BASE(Basic Availiability,Soft state,Eventually Consistency),牺牲掉对一致性的约束(最终一致性),来换取一定的可用性。

6、拜占庭问题与算法(五个商家都说自己是正版肯德基,你怎么点菜)

拜占庭问题更为广泛,讨论的是允许存在少数节点作恶(消息可能被伪造)场景下的一致性达成问题。拜占庭算法讨论的是最坏情况下的保障。

又叫拜占庭将军(Byzantine Generals Problem)问题,是 Leslie Lamport 1982 年提出用来解释一致性问题的一个虚构模型。拜占庭是古代东罗马帝国的首都,由于地域宽广,守卫边境的多个将军(系统中的多个节点)需要通过信使来传递消息,达成某些一致的决定。但由于将军中可能存在叛徒(系统中节点出错),这些叛徒将努力向不同的将军发送不同的消息,试图会干扰一致性的达成。

拜占庭问题即为在此情况下,如何让忠诚的将军们能达成行动的一致。

Byzantine Fault Tolerant 算法

面向拜占庭问题的容错算法,解决的是网络通信可靠,但节点可能故障情况下的一致性达成。

PBFT 算法包括三个阶段来达成共识:Pre-Prepare、Prepare 和 Commit。

新的解决思路

拜占庭问题之所以难解,在于任何时候系统中都可能存在多个提案(因为提案成本很低),并且要完成最终的一致性确认过程十分困难,容易受干扰。但是一旦确认,即为最终确认。

比特币的区块链网络在设计时提出了创新的 PoW(Proof of Work)算法思路。一个是限制一段时间内整个网络中出现提案的个数(增加提案成本),另外一个是放宽对最终一致性确认的需求,约定好大家都确认并沿着已知最长的链进行拓宽。系统的最终确认是概率意义上的存在。这样,即便有人试图恶意破坏,也会付出很大的经济代价(付出超过系统一半的算力)。

后来的各种 PoX 系列算法,也都是沿着这个思路进行改进,采用经济上的惩罚来制约破坏者。

五、挑战如何在达成共识中保密信息问题:密码学技术

1、Hash 算法

Hash (哈希或散列)算法是信息技术领域非常基础也非常重要的技术。它能任意长度的二进制值(明文)映射为较短的固定长度的二进制值(Hash值),并且不同的明文很难映射为相同的 Hash 值。

目前流行的 Hash 算法包括 MD5、SHA-1 和 SHA-2。

这意味着我们只要对某文件进行 MD5 Hash 计算,得到结果为89242549883a2ef85dc81b90fb606046 ,这就说明文件内容极大概率上就是 “hello blockchain world, this is 科技前哨”。可见,Hash 的核心思想十分类似于基于内容的编址或命名。

注:hash 值在应用中又被称为指纹(fingerprint)、摘要(digest)。

性能

一般的,Hash算法都是算力敏感型,意味着计算资源是瓶颈,主频越高的CPU进行Hash的速度也越快。

也有一些Hash算法不是算力敏感的,例如scrypt,需要大量的内存资源,节点不能通过简单的增加更多CPU来获得hash 性能的提升。

数字摘要

顾名思义,数字摘要是对数字内容进行 Hash 运算,获取唯一的摘要值来指代原始数字内容。

数字摘要是解决确保内容没被篡改过的问题(利用 Hash 函数的抗碰撞性特点)。

数字摘要是 Hash 算法最重要的一个用途。在网络上下载软件或文件时,往往同时会提供一个数字摘要值,用户下载下来原始文件可以自行进行计算,并同提供的摘要值进行比对,以确保内容没有被修改过。

2、加解密算法

分为对称加密、非对称加密和混合加密机制

非对称加密是现代密码学历史上最为伟大的发明,可以很好的解决对称加密需要的提前分发密钥问题。

顾名思义,加密密钥和解密密钥是不同的,分别称为公钥和私钥。

公钥一般是公开的,人人可获取的,私钥一般是个人自己持有,不能被他人获取。

优点是公私钥分开,不安全通道也可使用。

缺点是加解密速度慢,一般比对称加解密算法慢两到三个数量级;同时加密强度相比对称加密要差。

3、数字签名

类似在纸质合同上签名确认合同内容,数字签名用于证实某数字内容的完整性(integrity)和来源(或不可抵赖,non-repudiation)。

重要的有HMAC,Hash-based Message Authentication Code,即“基于 Hash 的消息认证码”

4、数字证书

数字证书用来证明某个公钥是谁的,并且内容是正确的。

对于非对称加密算法和数字签名来说,很重要的一点就是公钥的分发。一旦公钥被人替换(典型的如中间人攻击),则整个安全体系将被破坏掉。

数字证书就是像一个证书一样,证明信息和合法性。

数字证书内容可能包括版本、序列号、签名算法类型、签发者信息、有效期、被签发人、签发的公开密钥、CA 数字签名、其它信息等等,一般使用最广泛的标准为 ITU 和 ISO 联合制定的 X.509 规范。

5、PKI 体系

解决了十分核心的证书管理问题。

在非对称加密中,公钥则可以通过证书机制来进行保护,如何管理和分发证书则可以通过PKI(Public Key Infrastructure)来保障。

6、Merkle 树

默克尔树(又叫哈希树)是一种二叉树,由一个根节点、一组中间节点和一组叶节点组成。最下面的叶节点包含存储数据或其哈希值,每个中间节点是它的两个孩子节点内容的哈希值,根节点也是由它的两个子节点内容的哈希值组成。

默克尔树的特点是,底层数据的任何变动,都会传递到其父亲节点,一直到树根。

7、同态加密

同态加密(Homomorphic Encryption)是一种特殊的加密方法,允许对密文进行处理得到仍然是加密的结果,即对密文直接进行处理,跟对明文进行处理再加密,得到的结果相同。从代数的角度讲,即同态性。

8、零知识证明

证明者在不向验证者提供任何有用的信息的前提下,使验证者相信某个论断是正确的。

例如,A 向 B 证明自己有一个物品,但 B 无法拿到这个物品,无法用 A 的证明去向别人证明自己也拥有这个物品。

总结一下:

1、为了达成伟大共产集体共有,集体管理,集团劳动,平等,民主等美好愿望,区块链技术面临着密码学技术、分布式共识、处理性能、扩展性、系统安全、数据库和存储系统、可集成性等重要问题和技术挑战。

2、区块链技术为解决共产难题,以通信、存储、安全机制、共识机制四个核心组件为抓手,综合运用了分布式、存储、密码学、心理学、经济学、博弈论、网络协议等领域能力解决。

3、分布式第一问题就是一致性,人们一直试图通过某种算法(套路)达成共识。FLP不可能性原理从理论上证明了达成一致性是不可能的,因此人们需要另寻他发。于是CAP原理诞生,在一致性、可用性和分区容忍性三者之间此消彼长,牺牲一个可以保全另外两个。于是诞生了很多很多达成一致的套路Paxos、Raft等。如果单个节点有人故意使坏或者撒谎又该怎么办呢?以前是如何去甄别这些节点,现在我们换一种思路,增加提案成本,即便有人试图恶意破坏,也会付出很大的经济代价(付出超过系统一半的算力),这就是PoW(Proof of Work) 算法思路。

4、Hash(哈希或散列)算法是信息技术领域非常基础也非常重要的技术。对于一句话可以算出一个唯一的编码,并且这段编码不可逆。Merkle默克尔树(又叫哈希树)层层嵌套,底层任何数据的变动最上层都会看得到,保障信息安全透明。内容传输过程中需要加解密,包括公钥私钥。数字签名用于证实某数字内容的完整性和来源。数字证书用来证明某个公钥是谁的,并且内容是正确的。PKI体系解决了十分核心的证书管理问题。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180504G12LMV00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码关注腾讯云开发者

领取腾讯云代金券