雷锋网AI金融评论按:共识机制是区块链和分布式计算的基础。如比特币采用的PoW(工作量证明)就是一种是让计算工作完成最出色的节点获得系统的数字货币奖励的竞争机制,近年来,PoW共识机制逐步暴露出资源消耗大、运行成本高的问题,一些替代性的方案如PoS也被提出并引起了学术界的极大兴趣。例如康奈尔大学IC3(Initiative for Cryptocurrency and Contracts,虚拟货币及合同倡议)项目的Co-Director 石润婷教授(Elaine Shi)等在2017年提出了基于Sleepy Model的PoS共识,并对其进行了形式化描述和安全性分析。
与我们熟悉的各种加密货币的共识机制不同,Sleepy Model的提出旨在解决今天的互联网规模、数百万计甚至更多节点的情况下,如何保持系统的鲁棒性同时又保持系统效率的问题。石润婷教授认为,虽然区块链技术在虚拟货币得到了成功的应用,目前通用的共识机制不适合于推广到互联网级别规模,互联网规模的分布式系统需要新的理论框架,也需要可验证的安全协议以及实施方案,这也是让区块链技术从虚拟货币走向更广阔应用的一个关键点。
在计算机科学中,为了解决计算机单机性能不足,某些应用中需要更大的存储、更强的计算能力的需求,有研究者将一组电脑连接起来,彼此进行交互以实现一个共同的目标,通过网络相互连接传递消息与通信后并协调它们的行为,这也是“分布式计算”的由来。
随着摩尔定律碰到瓶颈,越来越多的系统要依靠分布式集群架构来实现海量数据处理和可扩展计算能力。而区块链正是为了解决各个节点互不信任,又需要协同工作而产生的,与一般的分布式系统不同的是,一般的分布式系统通过一个共同的中心来实现相互信任,而区块链中的各节点是通过共识机制而实现相互信任,可以说,共识机制是区块链与分布式计算的基础。
关于分布式计算的文献以及密码学文献通常会考虑两种类型的参与者:诚实的和非诚实的。然后会分析上述弹性属性,假设对诚实参与者的比例下限。对于通常部署共识协议的传统环境如Google Wallet等应用程序,其中节点的数量大约是十几个,而在大规模的共识协议(雷锋网注:例如区块链协议)中,不仅用户数量大幅增加,同时达成共识也更为复杂,已有的共识机制不能很好的符合鲁棒性的要求。
在Real World Crypto 2017安全大会上,石润婷教授首次对基于Sleepy Model的PoS共识机制进行了解释,雷锋网结合论文进行了节略改编:
我在这里想和大家讨论互联网规模的共识机制。你们有人可能会记得,去年八月有一天,达美航空的系统完全瘫痪,你无法预订机票,所有航班也被取消,这是因为达美的计算基础设施出现了鼓掌。类似的情况也出现在国家科学基金上,去年七月的时候也发生了系统宕机,你不得不继续等待。好吧,如果我不能飞这我还能忍受,但如果不能做科研,那我要说这就太让我伤心了。
我们关注两点:可复制性、鲁棒性。在计算机科学中,这被称为分布式系统,这一领域已经有了近30年的研究。在分布式系统中有一个非常重要的抽象概念,我们称之为“状态机复制”,这也被称之为“线性”或者“共识机制”。
那么什么是状态机复制呢?这里有一个应用场景:拿Google Wallet来讲,Google可能考虑将其服务器进行备份。你自然不会希望你放在Google那里的钱遭受损失,所以备份是一个好主意。当某个服务器出现问题,在所有这些服务器上会存有线性排序的日志,我们会关注两个安全属性:一致性、活跃度。一致性指的是所有诚实的服务器节点都同意这些交易日志,活跃度指的是,如果一个客户提交了一笔交易,那么这笔交易需要很快被记录在所有服务器中。
问他是:如果某些服务器安全受到了威胁呢?有问题的服务器会背叛其他服务器,这个问题非常重要。当我们讨论共识问题,通常来讲,这些服务器从属于一个团体,我们可以认为这些服务器是相互信任的。今天我们为什么认为比特币令人激动,是因为比特币开启了分布式计算的新的篇章,其提出的分布式共识令人惊叹,也使得互联网规模的共识存在可能。
然而我们知道,互联网存在着数百万计甚至更多的节点,这些节点节点可能不一定在线,有的在线,有的不在线,要形成共识有很多不可预测的情况。同时每个节点都是自私的,因此互相不信任,这也给“互联网规模”的共识机制提出了新的挑战。
我和虚拟货币圈的很多人有过交流,他们或多或少认为目前的共识机制或多或少地无法适应互联网级别规模,原因在于这些共识机制在互联网级别的大规模、复杂状态下鲁棒性并不好。关于互联网规模共识的鲁棒性,这是一个非常大的话题,我在此处不再展开,但我们会从一些基本的问题入手,来解释什么是鲁棒性。
我们刚刚经历了美国总统大选。总共有三亿人(节点),1.6亿人亮相(并进行了投票),如果我们希望,如果这些亮相(投票的人)当中有51%是诚实的,否则我们就不能正确预测选举的结果,这就是一个共识的例子。
这里我们假设一些节点是在线的,一些节点是睡眠的。在线意味着这些节点会主动参与共识协议,而睡眠节点可能会从睡眠中恢复,并继续加入共识协议,这就是一个“Sleepy Model”,关于这一模型我们有这样的额外假设:
作恶节点无法任意行动(无法偏离基本协议规则);
作恶节点可以延迟和修改消息;
在线诚实的节点可以快速接收消息,否则将被视为睡眠节点;
在这一环境中,我们提出的一个非常自然的问题是:
当仅有51%的在线节点诚实,我们能否达成共识?
这当中的3个难点在于:
1)协议没有任何在线节点比例的先验知识。在线节点可能是30%,也可能是1%;
2)而且你无法进行假设,有可能你假设30%在线节点参与协议,但实际只有1%参与协议,而这99%的沉睡节点不会影响1%的在线节点的共识结果;
3)另一种情况是,而在此过程中,会有“沉睡”节点醒来,他们将受到所有之前待处理的信息,参与到共识投票中,随之而来的安全问题。
我们研究的结论可能令你吃惊:甚至在99%的在线节点诚实的情况下,目前所有的经典共识协议都无法在这样的场景中顺利运行。我来简单解释一下,经典共识协议可以分为两类,即同步共识协议和非同步共识协议,在同步协议中可以立即接收信息,而非同步协议中,作恶者可以随意的修改信息和延迟发出。为什么在同步协议中会失效呢?原因很简单,因为一直在线的节点按顺序接收信息,而在“Sleep Model”中,我们允许睡眠节点在苏醒后接收信息。而信息的延迟存在着不确定性。
那么,为什么非同步协议也会失效呢?原因在于在非同步协议中,睡眠节点将会被视为作恶节点。假设某个协议可以在已知数量情况下允许1/3作恶者存在,但如果有99%节点为沉睡节点,那么这些节点被视为作恶节点,这样你无法得到足够选票达成共识。
我们说比特币的中本聪区块链(PoW模式)具有鲁棒性,这有两方面含义:好处是,中本聪区块链在大多数在线节点诚实时可以达成共识;但缺点是:能耗太高。今日用于比特币挖矿的电力高达1.5GW,比美国最大的核电站发电量或者美国10%的太阳能发电量都要大。
我们是否可以在达到中本聪区块链的鲁棒性的同时,又免于支付高额代价?办法是:保留中本聪的区块链结构,但去除PoW共识;其中的挑战在于,在达到这一点的同时保证安全性?
我来简单解释区块链的机制。中本聪区块链将前一个块数据和交易,进行hash,为什么PoW耗费资源?因为哈希函数具有随机性,为了找到适合的解,必须尝试各种随机数求解,而诚实节点只相信“最长的链”,如果某个作恶节点想要否定某笔交易双花,他需要获得大部分哈希算力来保证其提交的块结果被接受。
我们可以将PoW视为“领导人选举”,如果你提出一个正确的解,你就是具备下一个块的出块权并提交交易。我们的想法是:是否可以限定解法的范围,从而达到降低资源浪费的效果?
让我们考虑一个简单的“允许协议”,这意味着我们知道哪些节点参与协议、每个节点都知道其他节点的公钥,稍后我会讲,如何在PoS下无需允许达成共识。假设所有节点有一个一周的同步期,在每一个时间周期,Dan将他的名字、当前时间结果一同计算哈希值,如果小于难度系数,那么Dan将会被选为出块者,并收集信息出块,其他人可以检查Dan是否是正确的出块者,以及通过公钥验证这一区块是否由Dan签署。
问题在于:这个协议是否足够安全?在这一模式下,作恶者的收益更大:当诚实的节点当选,他会出一个块,当作恶者当选,他会出很多块,以及挖未来的块。因此我们做了进一步修正:
1.)每个块的时间戳是严格递增的;
2)诚实节点会拒绝“未来时间区块”。
这样,不诚实节点就不能为所欲为出块了。某种意义上这一协议的安全性得到了保证,但实际上通常不是这样,因为非诚实节点仍然可以使用已经选举的节点和他们的块制造出分叉。
为了证明我们的“休眠共识”机制有效,我们仍需要更多的证明。由于时间关系在此我不再展开,详细内容可以阅读我们的最新论文,在论文中我们介绍了:1)更详细的证明;2)更弱的假设;3)更强大的安全模型结果。我认为这一研究对于银行等联盟链非常有吸引力,每个银行成为一个节点,以去中心化的方式来管理他们的票据,从而实现更快的银行间结算;至于鲁棒性,银行可以随时重启机器进行检修,而无需与其他银行进行协调。
关于互联网级别的共识机制,我们意识到有太多的问题比我们所理解的东西更难以理解,我们需要一个新的理论框架对于这些协议进行分析和推理,同时我们也可能需要安全的协议设计和实现,这对于加密社区来说也非常重要,无论从新的加密协议、或是分布式计算都是如此。另一方面,从理论研究到产生实际影响,这也需要可验证的安全协议以及实施方案。谢谢。
分布式计算及相关密码学文献通常考虑两种类型的参与者:诚实的玩家和作弊的玩家,然后会分析弹性属性以假设诚实玩家的比例下限。
按照假设,诚实的玩家不仅被假定遵循规定的协议,而且在整个协议执行过程中被假定为在线。而在实际场景中,可能会出现数百万玩家的“大规模”共识协议(例如区块链协议),这种假设是不切实际的。在本研究中我们研究分布式协议,玩家的状态可以是在线(警戒)或离线(睡着),他们的在线状态可能在协议期间的任何时候改变。我们希望解决的主要问题是:
我们能否设计出在仅有零星用户参与下仍然保持弹性的共识协议?即,在任何给定的点上,都只有极少一部分用户实际在线参与?
据我们所知,即使我们假设,99%的在线玩家都是诚实的,目前的共识协议在这种零星参与的状态下都会崩溃。
本研究则发现了上述零星参与情况下仍然可以形成共识的可能性。我们提出了一个基于“Sleepy Mode”(沉睡模式)的共识协议,该模式弹性假设只有大多数在线玩家是诚实的。我们的协议依赖于公钥基础设施(PKI),一种通用随机字符串(CRS),并且在Dwork-Naor-Sahai(STOC'98)的时序模型中被证明是安全的。在该模型中,所有玩家被假定为具有弱同步时钟(所有时钟与实时时间的偏差在Δ之内),并且在网络上发送的所有消息都在Δ时间内传送,并且假设存在次指数安全的抗碰撞哈希函数和增强的陷门排列。
一个令人惊讶的发现是,我们的协议明显偏离了分布式共识的标准方法,而我们却依赖中本聪区块链协议背后的关键思路(同时不需要POW工作证明)。最后我们最终观察到,如果大多数在线玩家不诚实,“沉睡共识”是无法实现的。