区块链技术几个重要的坑

近些年,区块链技术飞速发展,引领了互联网领域一次新的技术浪潮,这种新型技术被认为是继蒸汽机、电力、互联网之后,下一代颠覆性的核心技术;并成为最近两年的热门投资方向,如著名投资人索罗斯在2017年年底的时候,把Facebook的股票全部卖掉,投资了一家用区块链发行股票公司Overstock。全球各大互联网公司也大力在区块链领域布局,积极推进区块链技术的落地,如IBM的供应链物流,金融结算服务区块链创业公司井喷般出现,国内区块链企业已达456家。

在区块链技术变得火热的同时,许多新技术出现,区块链技术混淆越来愈平常,公链和私链技术混淆使用,如一些著名公链竟然使用私链的技术来解决速度和扩展性的问题。很不幸的是,在区块链技术快速发展的时候,一些著名的链的基础协议居然还是和几年前一样, 这表明以前发现的问题到今天还是存在没有解决,新出来的技术并未解决以前的问题,例如以下将要讲述的第一个坑。

在2018年,让人惊讶的是,甚至几个世界出名的公链也被人察觉居然部分机制还是一个中心在控制。这和长期标榜“去中心化”的区块链思想直接冲突,表示完全“去中心化”的系统难实现,而且在今天法律制度下(例如美国证券交易监督委员会出的新法规)很难实现。但是哪些中心化机制可以被接受,哪些不能被接受,应该有所讨论。这是第二个坑。

加拿大央行, 欧洲央行, 和日本央行三个世界重要央行在2017年和2018年出的3篇报告,现在区块链容错机制不能达到金融机构的需求已经是共识。区块链不是自己有容错机制吗?有,但现在的容错机制离实际需求差距很远。这是第三个坑。

这些坑还存在今天著名区块链系统里,这给区块链投资人造成了困扰。有人认为,著名公司研发的区块链系统应该比较好,但事实上不是这样。

当然区块链不只有这三个坑,其他坑以后再讨论。这三个都是老坑,几年前已经发现的问题,但直到今天,这些坑还是存在一些区块链系统里面,甚至有的坑今年才引起大家重视。

这些坑都是中国的机会,因为这些著名的链要改是非常难的。但问题是中国真有团队愿意好好打造一个好区块链吗?还是大家只要炒币赚钱?还是只要山寨那些明知有问题的链?

第一大坑:拜占庭将军协议或是“刘关张”共识协议

区块链是一种分布式记账系统。在分布式系统中,最为关键的问题就是一致性问题。一致性问题指的是:对于给定的一组服务器节点,指定一系列操作,在某个协议保障下,使得各服务器节点对处理结果达成一致,其中用到的协议也被称作为共识算法。根据节点信任程度和容错能力,我们将共识协议分为两类:

拜占庭将军协议(节点非互信)

拜占庭(BFT)将军协议则是考虑存在一定数量恶意节点的情况下,当恶意节点出现任意行为时,也能有效的保证数据的一致性。BFT系列算法,是一种确定性容错算法,共识效率高,确认时间短,容错能力稍差,允许1/3以下的恶意节点。而区块链的应用场景就是互不信任的各方通过区块链技术来做生意、开公司、上法庭,解决互不信任的各方的信任问题。图1 演示PBFT的协议,PBFT 是一个实用拜占庭将军协议,如图1所示,该算法经过预准备(Pre-prepare)、准备(Prepare)和确认(Commit)三个阶段达成一致性。

图1 PBFT(BFT协议的一种)

“刘关张”共识协议(节点互信)

“刘关张”协议就是节点之间互信的协议,刘备、关羽、张飞三人桃园结义,互相信任对方,他们互不欺骗对方,三兄弟齐心协力。如果将他们对应于传统的分布式系统各个节点,也就是说各节点只可能出现宕机或是断开连接的情况,不会向其他节点发送虚假消息,理想情况下,互信协议中不会出现恶意的恶意节点(向不同的节点发送不同序号的消息)。

**图2“刘关张”协议**

拜占庭将军协议和“刘关张”共识协议的最大差别在于:

“刘关张”协议有两轮投票,拜占庭有三轮投票。

其中,拜占庭协议的前两轮投票阶段和“刘关张”协议相似。但是在拜占庭协议的第三轮投票中,参与节点需要向其他节点发送他们在第二轮阶段收到的消息。所以,如果没有第三个阶段,拜占庭将军协议就会变成“刘关张”协议。国内一些工程师原本是为了“优化”拜占庭将军协议,结果却是将拜占庭将军协议第三轮去掉变成了“刘关张”协议。

本来认为“刘关张”协议只会在中国出现,但是发现“刘关张”协议也已经技术输出国外,国外一些出名的区块链居然也使用“刘关张”协议。他们也和中国公司一样,自称使用拜占庭将军协议, 其实是用“刘关张”协议。

“刘关张”协议又可以分两种:分布式“刘关张”和中心化“刘关张”。

分布式“刘关张”协议

这种协议用在传统的分布式数据库系统,能保持多个数据副本之间的一致性,如两阶段提交协议、Paxos、Raft等, 这些都是传统数据库的一致性协议。互信协议允许宕机的节点数为1/2,但是一旦黑客攻击了其中的主节点,成为恶意节点,就可能会造成系统内的数据副本混乱,系统瘫痪。

图2、3表示两段式分布式“刘关张”协议, 一个是确认情景,一个是回滚情景。

图2 “刘关张”协议——确认情景

图3“刘关张”协议——回滚情景

如果将数据库的互信协议应用到区块链技术当中,将不能够查验以及抵挡恶意节点,这样的区块链只能够应用在节点之间互相信任的环境下运行。因此,这样的区块链被许多学者认为是一个弱化的区块链。

在中国工信部信通院发布的“可信区块链”白皮书标准里面,“有效防止节点欺诈”是“可信区块链”的一个最低要求,没有达到这个功能就不能称为“可信区块链”。所以,凡使用“刘关张”协议的区块链都不是可信区块链。

而且工信部认为不光需要满足上面的需求,“绝对一致的共识机制”还要满足以下需求:

对于下述情况,共识机制需要保证在小于理论节点数欺诈的情况下,节点间数据能够恢复正确且一致,并且和对外响应结果正确且一致。”
1)任意节点错误响应,包括执行成功对外返回‘失败’、执行失败或者不执行的时候对外返回‘成功’。
2)任意节点向网络中其他节点发送不同的消息请求,例如:系统中有4个节点,请求消息序列为a, b, c, d, e,其中任意一个节点不按照a, b, c, d, e的序列发送给其他节点,把a只发给其中的一个节点,把b,c,d,e发给另外两个节点。
3)任意节点通过修改本地数据,构造本节点校验合法的请求,例如,本节点余额为100单位,修改本地余额为200单位,然后发起200单位的转账。

如果使用这种弱化的区块链,将不能用于有强监管需求的应用里面。例如金融、公检法、政务。

例如,最近亚洲的一个重要国家的首相夫人参与舞弊事件,而政府官员为了保护首相夫人居然篡改文件。然而一年后这舞弊事情包括政府官员违法篡改文件仍然被发现,引起政治风波。

这件事情表明,政务上的区块链必须使用拜占庭将军协议,而不是“刘关张”协议。因为被信任的政府官员也可能参与舞弊, 只有拜占庭协议可以查验说谎的节点, 而且可以防止从外部和内部篡改。

图4分布式“刘关张”协议

中心化“刘关张”协议

中心化的“刘关张”协议使用“原子广播”(atomic broadcast)来做共识。原子广播原来目的在于保证每个参与节点收到同样信息,因为每个节点收到同样信息等于保证每个节点有共识。一个原子广播通用软件是Kafka,而Kafka 是用另一软件Zookeeper完成的。

...
原语一:可靠广播(Reliable Broadcast,RBC)。本质上,可靠广播使得消息最终到达所有的进程一次。可靠广播(RBC)是一个广播原语满足如下特性,对消息m,有:
1)有效性(validity) - 如果一个正确的进程广播m,它最终成功传达了m
2)一致性(agreement) - 如果一个正确的进程成功传达了m,所有最终所有的进程成功传达m
3)完整性(integrity) - m只传递一次,并且是以广播的形式被发送者发送出去。
...
原语二:原子广播( Atomic Broadcast,ABC),其满足可靠广播(RBC)和另外的一个属性:
4)总的顺序(total order) - 如果正确的进程p和q分别传递出m和m‘,p传达m在m‘之前,那么q传达m在m‘之前
...
原子广播是一个可靠的广播,其中值(values)以相同的顺序被发送到每个机器上。注意到这实际上复制交易日志的问题。通俗地讲,该问题可以被称作共识。
...
共识原语的标准定义满足以下条件:
1)终止性 - 每个正确的进程最终能做出决定——【共识特有】
2)完整性 - 每个正确的进程最多只做出决定一次
3)一致性 - 如果一个进程做出了v1的决定, 并且另外一个进程做出了v2的决定,那么v1=v2
4)有效性 - 如果一个正确的进程做出了v的决定,至少一个进程提议了v
...
直观地,共识和原子广播看上去十分类似,主要的差异在于,原子广播本身作为一个协议是连续的,然而共识期望终止。这就是说,每一个可以精简为另一个。共识可以被精简为原子广播通过决定第一个原子广播的值。原子广播可以精简为共识,通过依次运行许多共识协议的实例。然而存在一些微妙的考量,特别是在处理拜占庭故障方面。一个完整的参数空间的关于原子广播精简为共识的描述仍然是一个开放的研究话题。

但是原子广播真的安全吗?是分布式共识,还是中心化共识协议?

如图5,Kafka使用的Zookeeper提供的数据状态存储和主节点选举服务。而Zookeeper是依赖于ZAB(一种从Paxos改造的协议)为其提供非拜占庭容错,即ZAB是一种“刘关张”(传统数据库)协议, 属于弱化的区块链。所以Kafka不能处理拜占庭将军的问题。

而且因为Zookeeper是一个中心化的系统,Kafka 也成为中心化的系统。这个Zookeeper中心系统被攻破后,整个系统就会发生问题。所以,Kafka是中心化的“刘关张”协议,和分布式区块链系统不匹配。

如果有人怀疑Zookeeper不是中心化的系统,可以查Apache [1] 和 IBM [2] 官方网站,以及著名IT 信息网站InfoQ[3],上面都是说是中心化的系统。

Hypeledger就是使用原子广播这种的共识协议,如图6。其中Orderer Service的核心是Kafka集群来完成交易排序服务。对于这种协议,即使右端的节点做拜占庭共识,如果中心化的Orderer Service被攻破了,整个系统还是会陷入瘫痪。

图5 Kafka、Zookeeper、ZAB协议

图6 Hyperledger中心化“刘关张”协议

不光在性能方面,中心化的“刘关张”协议和分布式的“刘关张”协议差别很大,在具体实现上,中心化的“刘关张”协议很容易实现,而分布式的实现起来相对困难。与Hyperledger使用图6的中心化“刘关张”协议实现不同。

??? 总结来说,如表1,根据可信度,区块链可以分为以下三种。

表1:

序号

协议

可信度

例如

1

中心化的“刘关张”协议

*

Fabric+Kafka

2

分布式的“刘关张”协议

***

两阶段提交协议、Paxos、Raft等

3

拜占庭将军协议

*****

PBFT等

第二大坑:中心化的区块链控制

有些区块链为了取得更快的交易速度,采用了中心化的控制,这种区块链称为“伪区块链”。这种伪区块链披着区块链的外衣,却是中心化的系统。在一个中心化的系统中,控制整个区块链的中心节点就是这个系统最为薄弱的环节。如果中心节点故意说谎或者被人攻破,则整个区块链瘫痪。不论是公链或是私链,都可能是中心化的链。

部分公链的支持者会以妖魔化来形容私链(联盟链等),认为联盟链就是中心化的系统。这是商业言语,不是学术言语。在计算机领域,多个并行的执行线程,就是分布式系统,而且中心化的系统也不是妖魔,也不用躲避。中心化银行系统用了如此多年,长期服务国家、社会、家庭、个人,根本没有必要被妖魔化。

传统中心化的系统中有许多好处。安全性由的安全防护系统来完成,防火墙隔离了内部系统,保护系统免受各种类型的网络攻击。现在的许多大型应用都是用中心化的系统。

但是区块链系统不能采取这种中心化方式,因为中心化的区块链和区块链初衷是完全不符合的。如果每一次建块或是每一笔交易都是中心化的行为,那这个链就不是区块链,而是伪链。

实际上,区块链系统应该由“独立的”节点来运行,独立节点就是指每个节点的状态变化不受其他节点的控制,根据共识协议的规定,以及从其他节点接收的有效消息,独立的进行状态转移。区块链系统除了要分布式处理,每个节点还要独立式处理,所以这是一个很难的一个设计。

我们完全不需要妖魔化中心化的系统。在特殊情形下,区块链也可以有中心化的行为, 例如The Dao事件,如果当时当事人没有中心化的处理,相关单位马上就会有几亿美元官司。他们当时做的决定是正确的。但是在一般情形下,区块链必须是分布式的,节点还是必须是独立式处理交易和共识。

第三大坑:区块链功能机制必须需要有其容错机制

什么是容错机制?

一个容错机制乃是保护一个“功能机制”。基于一个功能机制(A),工程师设计一个容错机制B,通常B 是A+容错协议。

区块链基本共识是用投票,而共识算法PBFT本质上是容错机制,即允许系统内存在一定错误(恶意节点)的情况下,还能保证系统投票结果能够保持一致性。

问题是在区块链的设计里面,投票不是功能,拜占庭协议才是功能。当一个容错机制成为功能机制的时候, 那就需要一个自己的容错机制。如下表:

投票(A)是一个功能机制,一个投票的容错机制(B)就是拜占庭协议。

但是在区块链里面,投票不是功能机制,拜占庭协议才是区块链功能机制(B), 所以区块链需要一个基于拜占庭协议的容错机制(C)。这关系可以从下表显示。

任何子系统都可以出错, 任何一步都可以出错。

但是基于拜占庭协议的容错机制是什么?就是“拜占庭协议+容错协议”是什么?

在国外一下学术文章里面有一些这样的研究,但是这些设计离实际应用还非常远,因为在实际系统里面,任何子系统都可以出错,而且在系统恢复的时候仍然可能出错,造成恢复机制非常复杂。但是学术文章里面的容错机制通常只有少数子系统可以出错, 例如投票领导出错(RBFT等协议), 但是实际系统复杂的多。

任何区块链子系统都可以出错代表什么意义?表示通讯子系统可能出错,计算子系统可能出错,投票的时候可以出错,每一步区块链投票都可以出错,数据库可以出错,并行算法可以出错,加解密可以出错。区块链每个功能、每个协议、每一步、每个节点都可以出错。而且出错不一定是“停止错误”,而且可能是“拜占庭错误”,就是有人故意捣蛋,送不同数据给不同节点。所以一个容错的区块链系统是非常复杂的!

如果没有容错的拜占庭协议,任何会带来什么影响?一个简单的错误使得拜占庭协议停止工作,或是导致错误的信息写进区块链数据库里面。前者会造成区块链停止不能前行(区块链性能因此差),后者造成区块链不能维持数据的一致性(区块链功能丧失, 后果更严重)。

根据第二个坑,区块链不应该有中心的控制节点,而每一个节点都可以查验其他节点,并且独立作业。这代表区块链容错机制必须是分布式处理,将使一个区块链容错机制设计变得非常困难。如果是中心化的容错机制,例如由中心控制的恢复系统,这会比分布式的恢复系统容易很多。

如图 7,容错和功能的关系可以从下图来看,

图7,容错机制和功能机制关系图

如果有人怀疑这论点,可以看加拿大央行2017年的区块链实验报告,报告明确指出其所测试系统的容错机制不够加拿大央行报告的第8页多次指出:

验证节点的容错机制不够,加拿大央行在这个系统里面必须是一个验证节点,但是央行需要有完整的信息,央行系统需要进行备份,也会是大数据版的系统。

加拿大央行、欧洲央行和日本央行三大央行报告之后,区块链发展重点不在速度,而是可靠性,容错性和安全性,这是区块链时代的一个里程碑,也代表区块链技术走上成熟期。

?

原文地址:https://www.cnblogs.com/qfdsj/p/9482994.html

时间: 2024-11-05 06:23:24

区块链技术几个重要的坑的相关文章

专访京东孙海波:大牛架构师养成记及电商供应链中区块链技术的应用(转)

http://geek.csdn.net/news/detail/237595 编者按:每个人的成长曲线不同,有的人在研究生之时就已有相当知名的产品和框架,从而在接下来的工作中一路顺风顺水,有的人缺需要经历一个又一个的坑才能成长,不管是前者的聪明高效,还是后者的笨鸟先飞,他们都是在迈着脚步不断地向前.不妨,我们停下脚步看下一些同行,以激励自己更好地前行.CSDN与你相约SDCC 2017之区块链技术实战线上峰会. 2017年9月23日,SDCC 2017之区块链技术实战线上峰会即将强势来袭,本次

区块链技术开发方向 聊区块链+会员生态系统

在现代商业市场中,客流是商业构成的基础.很多商业个体就希望通过"会员制度"绑定.稳定客流,无论哪项商业活动都需要更多的客流来实现经营持续化,掌握了大量的客流量,才能促进更多消费需求.而前不久先达"区块链技术开发+会员生态系统"的思路就给未来商业提出了突破性建议. 就目前的商业体制而言,"会员制度"的确是个不错的想法,但跨行业.地域.商业层级的不定向消费需求现状让会员制无法得到更好的应用,例如传统会员制度有的弊端有4种: 1.对用户:认证步骤繁杂,

主流区块链技术特点及Fabric V0.6&V1.0版本特点

声明:文章内容来源于网络. 一.主流区块链技术特点 二.Hyperledger的fabric V0.6总体架构: 对应的0.6版本的运行时架构: 0.6版本的架构特点是: 结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点:    架构问题:由于peer节点承担了太多的功能,所以带来扩展性.可维护性.安全性.业务隔离等方面的诸多问题,所以0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例中进行业务验证: 三.Hyperledger的fabric V

区块链技术可以帮助汇款机构进行升级

目前无论哪种汇款方式,都有各种中介参与其中,收取一定比例的手续费.而且整个汇款流程需要耗费相当的成本和时间.尤其是跨境汇款的效率和成本问题更加突出.一旦利用比特币交易区块链技术,就可以在成本和效率两方面获得巨大利益.因此目前应当深入了解该技术,才是未来发展的保证. 传统商业模式正遭到颠覆性技术的挑战,该技术发展速度甚至很难赶上.然而如果说有什么可以解决企业和个人遇到的问题,大多还是受欢迎的.其中一个问题是大量外籍人口依赖于现金跨境汇款.海湾地区汇款行业规模达到1000亿美元,单只阿联酋就有190

ICO惨遭团灭,区块链技术是福是祸?

今年上半年,随着以比特币为代表的虚拟货币价格暴增,ICO(Initial Coin Offering 首次代币发行)这种新型融资方式在国内迅速发展,大量山寨币层出不穷.光上半年,通过ICO获得的融资金额已经超过了传统VC的投资,ICO累计融资规模达26.16亿元人民币. 乱象丛生.折射黄金光芒的 ICO 泡沫终于破灭了 现在这场堪称疯狂的资产泡沫,已经破灭.9月2日,由亚洲DACA区块链协会.内蒙古乌海市政府主办的"2017DACA区块链国际高峰论坛"在活动开始前一天突然被叫停,这已经

终于把区块链与物流的关联搞清楚了 区块链的分类 物流业中区块链技术应用的案例

原文 区块链的分类 区块链可以分为三类:公有链.私有链.联盟链. 1.公有链无官方组织及管理机构,无中心服务器,参与的节点按照系统规则自由接入网络.不受控制,节点间基于共识机制开展工作. 2.私有链建立在某个企业内部,系统的运作规则根据企业要求进行设定,修改甚至是读取权限仅限于少数节点,同时仍保留着区块链的真实性和部分去中心化的特性. 3.联盟链由若干机构联合发起,介于公有链和私有链之间,兼具部分去中心化的特性. 去中心化是区块链的最重要特征 区块链技术提供了一种无需信任单个节点.还能创建共识网

002-主流区块链技术特点及Fabric V0.6版本特点

一.主流区块链技术特点 二.Hyperledger的fabric V0.6总体架构: 对应的0.6版本的运行时架构: 0.6版本的架构特点是: 结构简单: 应用-成员管理-Peer的三角形关系,主要业务功能全部集中于Peer节点: 架构问题:由于peer节点承担了太多的功能,所以带来扩展性.可维护性.安全性.业务隔离等方面的诸多问题,所以0.6版本在推出后,并没有大规模被行业使用,只是在一些零星的案例中进行业务验证:

区块链技术(一):Truffle开发入门

以太坊是区块链开发领域最好的编程平台,而truffle是以太坊(Ethereum)最受欢迎的一个开发框架,这是我们第一篇区块链技术文章介绍truffle的原因,实战是最重要的事情,这篇文章不讲原理,只搭建环境,运行第一个区块链程序(Dapp). 安装truffle $ npm install -g truffle 依赖环境 NodeJS 访问https://nodejs.org 官方网站下载安装 系统:Windows, Linux or Mac OS X,推荐Mac OS X,不建议使用Wind

龙爱量子区块链技术是互联网经济一次隆重转型和华丽升级

--中国区块链技术专家 殷秀君 各位,我叫殷秀君,因为我信仰区块链,所以给自己取了一个名字,一个网名叫因子,因果的因,有因必有果.现在,我用10分钟解读一下龙爱量子是如何应用区块链的,就这个问题我谈一谈自己的理解. 中国现在的经济事实上远远没有走出某一个境界,而大众创新.万众创业势在必为,但老百姓的生意其实也没有找到真正的出路,那么科技创新所引发的商业创新能不能解决我们的问题呢? 这个过程就是以量子科技为起点的,这属于科技创新一个很好的起点,这个起点由林跃庆董事长带着大家,带着各位家人找到了全世