我们需要什么样的共识算法



  • 我们花了两篇来探讨安全性问题,在这里,我们来回顾一下之前的结论——

    1,首先,无论POW还是POS的核心争议都是:我们应该以什么样的标准,是用算力还是用权益,来决定节点1)是否能够参与系统共识,也就是参与系统的运营,维护乃至治理;2)在系统中有多大的话语权。
    2,接下来,我们的结论是,其实从安全的角度讲——最理想的状况中,真正适合决定节点是否能够参与系统的,是他们对于系统的责任感。如果一个矿工,无论是POW还是POS,对于这个系统的安全性并不在意而只考虑盈利的话,那么他们的存在对于系统的安全性有害无益——因为他们的话语权可以很容易被利益收买。而无论是算力还是权益,我们其实是希望能够反映节点对于系统的责任感。
    3,接下来,责任感实际上是和在系统中的利益挂钩的,因为权利和义务是对等的,如果在系统中没有利益,你也无法要求他们对于系统有责任。同时,这个利益越大越好,最好是能和整个系统的价值,至少,和系统的日交易量相当。因为他在系统中的利益决定它双重支付的代价,而双重支付的代价则决定了系统的安全性。系统的安全性,至少要在系统的日交易量同一个量级,我们才至少有可能让双重支付没有那么容易成功,因为交易所至少能观察到短时间内大量的资金流动。
    4,于是,POS在这里就展现出了对于POW的优势——因为对于大部分区块链系统,权益可以很好地代表他们在系统中的利益,而因此,能够更好地反映他们对于系统的责任感。
    而与之相对的,POW中节点的参与权和话语权是和算力挂钩的,在大众的理解之中,这种“外部性”使得它比没有和实物关联的POS更加安全。然而,在这一点上,实际上这种“外部性”带来的是安全性的天然劣势。因为无论采用何种外部资源,这个系统的安全性就不再与系统本身的价值挂钩,而仅仅与挖矿收益(即参与共识带来带来的收益)挂钩。而挖矿收益在系统价值中的占比天然远远小于权益在系统中的占比。于是,在两个区块链系统体量相当的情况下,POW中维护系统安全的节点在系统中的利益远小于POS。
    而这点的危险性我们在前文中已经讨论过了,它的结果就是,一旦矿工在其中的获利赶不上其他投资的时候,他们可以很轻松地撤出或者出卖自己的算力,于是这个系统的安全性就会下降。然而,在现实之中,我们常常把目光投向这种获益的成本(获取算力的成本,或者电费),尤其是沉没成本(矿机费用)上,这实际上导致了我们严重高估了系统的安全性,因为沉没成本通常与长期的收益相当,而实际的攻击成本仅仅是短时间,例如一小时的挖矿收益。
    因此,实际上我们得出了这样一个结论——当我们用参与者在系统中的利益作为参与共识的证明,并且每个参与者的利益都占到系统价值中不可忽视的一部分的时候,系统的安全性是最强的。
    但这就同时得出了另一个似乎完全与区块链的概念相悖听起来十分荒诞的结论——
    如果共识完全交给在系统中拥有100%权益的节点来做,系统的安全性是最强的。
    于是,就是说,其实中心化系统的安全性是最强的?

    但这个看起来十分荒谬的结论其实有两个问题:
    第一,这样的系统和传统的中心化公司和企业并不相同,因为并不是每个企业的所有者或者实际控制者都对企业负有无限责任。
    第二,也是我们之所以需要区块链的一个问题,就是我们对于中心化系统最大的担忧不是它作恶的代价大小,而恰恰是他们作恶的成本无法估计,无法量化。这里的问题在于,我们说的作恶成本,并不仅仅限于系统内,而同样,作恶收益,也不仅仅限于系统内。的确,如果一个节点拥有50%权益,他肯定没法在链上,从双重支付自己的钱里获得收益。但同时,它可能有其他链外的方式可以获得收益,例如来自竞争对手的收买、做空等。而这一点,恰恰是中心化系统最大的软肋。对于中心化企业,即便是最透明的上市公司,我们也无法获知他股东的所有收益来源,因此,也就无法量化他们能够通过作恶在系统外获得多少利益。而对于去中心化系统也是如此,只不过,这样在系统外的获益的事情多数是不合法的,至少在攻击之前是需要保密,不能被大众获知的。所以,在去中心化系统中,我们认为不同的节点在系统外都能够获益,并且还能够合谋保密的可能性很小,以至于我们可以忽略这种可能。但是,一旦在去中心化系统中的共识被大节点所控制的时候,这种系统外的风险又会增加。
    换句话说,之前的安全分析中没有考虑到的部分,是节点在链外可能的作恶回报。越中心化的系统,从链外获益的可能性就越高,风险就越难以评估。因此,无论是POS还是POW,当区块链中大节点过于集中的时候,我们又会面临和中心化系统一样的问题——我们无法量化系统的安全性,于是,只好把安全性寄托于对于节点的信任,而不是可量化的作恶成本上。
    但这实际上是任何共识算法都无法避免的问题,既然区块链是部署在现实之中的系统,既然区块链的节点是被人或者机构所拥有的,既然区块链就是被用来解决信任问题的,那么,我们就不得不考虑这些节点的确是有可能在链外获益的可能,于是,我们也必须去考虑——这些节点是谁,他们采用这个区块链干什么,他们的利益何在,以及他们有没有可能合谋。如果我们忽略了这点,实际上就是在说,如果都采用同样的共识算法,有同样的币值,一个所有大节点都是有前科的诈骗犯的币,以及一个所有大节点都是普通用户的链,或者一个所有大节点都是世界500强企业的币同样安全,因为三者作恶的成本在链上是一样的。这既不科学,也不现实,更不经济。实际上,在现实之中,我们一直都是这么做的——我们本来就更倾向于相信大投资机构,大企业,著名学者,甚至,各种大机构和高校出身的人,因为我们倾向于认为他们是诚实的。
    这听起来似乎很政治不正确(在区块链的语境里),毕竟,这听起来就像是许可链,就像是KYC(银行业惯用的对于用户的背景调查),而和比特币匿名、非许可、和任何人有台电脑都可以参与挖矿的理念相悖。然而从安全性的角度讲,这样才是足够安全的——
    我们需要负责的共识节点,所以他们必须在系统中有较大的利益。兴趣使然的挖矿其实并不对安全性有贡献。
    同时,我们需要知道节点的身份,于是,我们才能知道他们有没有通过在链上作恶从而在现实中获益的可能,才能知道他们有没有作恶和合谋的动机,甚至,也许能够量化他们在现实中的作恶成本。
    而这两者的理想状态应该是平衡的——当大节点都是诈骗犯时,我们有足够的理由怀疑他们有在链上作恶然后在链外获益的方法;但当大节点都是大公司时,由于链上的利益对于他们不值一提,他们也有足够的动机为了保护他们在链外的利益,而放弃链上对于他们的蝇头小利。
    一个理想共识节点是——
    1,他在链上拥有利益,而这个利益对于他而言是足够重要的,所以,他们会诚实地参与共识——也就是说,共识节点应该足够“大”。
    2,同时,我们希望有足够多的“大”节点参与共识,所以我们可以尽可能地避免中心化造成的链外获益风险。
    3,并且,我们希望清楚这些节点的身份,至少,了解他们的背景,能够确信在作恶之后(1)链上的损失对于他们十分重要,(2)他们在链外获益的可能也不大,甚至,他们可能会额外受到链外的损失。
    于是,我们得出了一个相当离经叛道的结论。
    一个最安全的区块链,并不是人人都能参与挖矿的区块链。
    一个最安全的区块链,是一个有相当数量的,有现实身份和链上利益双重担保的大节点参与的区块链。
    于是,在安全性上,POS对于POW有天然的优势——因为POS可以保证参与共识的节点有线上的利益。同时,POW允许节点无需许可参与共识的性质,实际上对于安全性只有反作用。而且,虽然中心化的POS也仍旧有安全风险,但是并没有证据(反而有现实中的反例)证明,POW不会和POS一样会中心化。

    看到这里,也许很多人会表示不屑一顾——
    你说的这些全是从安全性上分析的,POW的其他优势你怎么不提了?
    比如说,POW可以如同比特币一般,不需要什么权益拍卖,只需要一个挖矿算法就可以直接启动并且很快获得相当高的市值和与市值匹配的安全性,这样的性质降低了项目启动的门槛也降低了公众加入的门槛,这才是区块链的真正意义。如果按我们所说,一个安全性高的区块链还需要对节点加入的资质进行审查,那么这样的系统和中心化系统又有什么区别?人人都能加入,人人都能参与才是区块链技术的核心所在。
    又比如说,关于POW优势的另一个重要观点是——POW的中心并不是不变的,因为算法会改进,矿机会过时,矿场的电价会浮动,而矿池的进入门槛也很低,随时可能由于新的竞争者出现而洗牌。
    于是,相比于POS中不变的“大节点”,POW是个更为去中心的算法。

    关于第一个问题,实际上我的答案很简单——天底下没有免费的午餐。我们在前文中已经论述了——那些看似很高的算力值其实并不直接反映在安全性里,而人人都能加入的区块链实际上对于安全性有害无利。于是,的确,POW系统只要一个挖矿算法就可以启动了,然而,POW系统也不用花什么代价就能摧毁。
    关于第二个问题,需要分成两部分看。
    首先,我们能不能因此说POW是去中心的。
    答案是否定的——前文中我们也做了分析,只要POW是赚钱的,就会有以赚钱为第一目的的职业矿工出现,于是就会诞生ASIC,诞生矿场,诞生矿池,于是算力会变得中心化。前文中我们已经分析了这个逻辑链条中每一环之间的关系和例外情况。我们的结论是,这个结局是无法避免的。
    所以说,POW的中心会变这一点,并不会让POW变得不那么中心化。只不过,这个中心并不是永久的。而在这市场洗牌期间,也许我们会短暂的看到一些“去中心”的迹象,例如在算力市场在供应链条上的每一环都出现了多个竞争者。然而,只要之前的逻辑牢不可破,我们最终还是会回到一个中心化的稳定状态。这种循环,实际上对于许多行业都不陌生——互联网,手机,电脑,芯片……没有哪个行业的中心是永恒不变的,但是这并不妨碍这些领域仍旧市中心化的。
    于是,我们来到第二部分,这样的一个中心会周期性改变的系统,是不是一个比中心不变的POS系统要更好?但这又是一个伪问题,因为实际上我们还没有见过一个真正POS的区块链所以我们无从得知POS是不是中心不变的——如果问POS的支持者,他们会给出同样多的依据来证明POS也是中心会变化的,比如:因为如果中心不变会导致币价下跌,大持币者有足够的理由在下跌之前抛掉手中的币来保护自己的利益。
    所以,对于这个问题,我的观点仍旧和之前一致——我们其实没有任何理由认为“算力”是治愈“中心化”的万灵药,第一,我们不应该因为中本聪采用了POW就认为算力是区块链共识算法中不可或缺的一部分,对此,我们已经有无数的其他共识算法予以佐证;第二,除了算力之外,我们其实可以用任何外部的资源作为参与的证明(当然,算力是实现起来最容易的一种)。然而,除了便于实现,算力作为一个外部资源,并不比内部的“权益”更有安全性,也不比其他资源来得更“去中心化”;第三,如果一定要给“算力”这样的外部资源找一个优于“权益”这样的内部资源的理由,是一定可以找到的,例如上文提到的电力资源的去中心化属性,例如随着技术进步带来的周期性的算力市场洗牌等等,然而,一方面我们可以同样可以给内部资源找到另一些优于外部资源的理由,同时,我们还可以给其他的外部资源找到另一些优于算力的理由(这个,看看之前各种POx的山寨币的白皮书就有一大堆),而以上论述的“中心周期性改变”就是一例——我们一方面我们也可以说POS也会导致中心周期性变动,我们甚至还能再找到另外一种资源可以让这个周期更快,而另一方面,我们其实并不知道这东西就一定优于中心不变(我感觉这个问题讨论下去会有些敏感)。因此,我不认为这方面的理由应该被纳入POW和POS的比较中进行考量。

    于是,其实纵览这两篇超过万字的长文,再加上前面的那一段,我们其实只说了三件事情。
    1,POW中50%攻击成本低。
    2,POW必然会变得中心化,因此实际上被50%攻击的风险很大。
    3,除了易于实现之外,POW其他方面对于POS的优势站不住脚。
    然后,看到这里,估计有很多人看出我的套路了——其实你不就是在说,POW不安全,然后除了安全性之外POW之外其他的优点都是末节——那你得出来的结论可不就是POW不行吗?
    但是POW还有其他方面的优势啊!例如POW的算法易于实现,易于验证,在现实中有长时间的应用和检验,同时,POW项目非常易于启动,不需要特殊的设备,复杂的算法和代币拍卖,在初期由于获币成本低,可以吸引大众参与,然后构建社群,激发系统的价值,使得整个系统的安全性和价值一起,如同比特币一样相互促进着上升,同时,还有上述的中心会周期性变化的属性,还有由于有外部性所以安全性更不容易直接随着币价下跌而下跌,而是有算力市场作为缓冲的属性。于是,一个更理所当然的结论不应该是——
    “由于POW和POS(或者其他的什么算法)在这些属性上各有千秋,所以它们各自适用于不同的场景,于是他们会在现实中并存,不同的区块链可以用不同的算法。”
    以上,似乎是个更流行的看法,也是个更模棱两可和左右逢源的看法。
    但并不是我的看法。
    我的看法其实已经表达的很明确了——
    没错,我认为在安全性面前,其他的特性都是末节。
    于是,同样的,我认为安全性上逊色的算法,就是差一些的算法。
    于是,我们又回到了上次我们想要讨论的但还没有讨论的问题上——
    我们需要什么样的共识算法。

    其实,以上的论点放在2-3年前可能关注度会更高,而现在抛出来不少媒体都表示性质缺缺。在很多人看来,就算我写扩容、分片或者链下技术,都已经是属于前两年的,过时了的东西了。更何况是POW,安全性这种似乎从n年的公链项目爆炸的年代就在讨论,结果到了大部分公链都死了也没有结果,于是到现在双方都决定各退一步说:“两者互有优劣适用场景不同”的话题。
    那么,我为什么还要写这个问题?为什么不去写一些更热门的话题,例如Defi,例如链上治理,例如Staking Economy,例如价值捕获,例如生态建设等等……
    因为在我看来,这个问题并不过时,而且,从未这么重要过。
    因为以上的所有问题,在我看来都是安全问题。
    因为区块链本身,解决的就是安全问题。
    “安全”是指这个系统能够可靠地按照我们的设想,做它该做的事
    那么,什么是共识算法的安全性?
    一方面,在之前的两篇中我们已经介绍了——“所有人都认为的安全”,并不是真正的安全性。同时,“在现实中没有被攻破”,也并不是安全性的保证。
    那么,理论上的安全呢?有了论文,有了数学证明,总该够安全了吧。
    其实也不尽然。
    从理论上,我们可以从分布式系统的方法证明共识算法是拜占庭容错的,或者,可以从密码学的角度证明其中所有采用密码学的机制都是安全的,我们还可以用Bitcoin backbone protocol里的模型证明某个算法适用于区块链共识,因为它拥有和比特币一样的特性,然而所有这些关于安全性的证明都是基于某些理论上的模型或者假设,而并不代表它们在现实之中就一定是安全的。
    例如,BFT里关于超过2/3诚实节点的假设,对于不同的算法,这个假设的成立与否是不一定的——如果你要求诚实节点安装某个客户端,这个客户端每十分钟验证1MB的交易,那么多数节点可能可以是诚实的;但如果这个算法要求诚实节点每秒钟验证1M的交易,那么很多带宽和计算能力达不到要求的节点显然是无法完成的,于是,在BFT的模型里,这些节点就会变成“不诚实”的。而这个时候,如果说每个节点能够收到相应的激励的话,他们又会变得诚实起来。于是,一个证明是拜占庭容错的算法,未必在现实中是安全的,而一个能容错1/3的算法,在现实中,也未必一定比容错1/5要更安全。
    另一个例子就是,不考虑自私挖矿的话,比特币从理论上来讲是“安全的”,因为我们的假设是“恶意节点无法控制超过50%的算力”。但是实际上我们之前已经说了,实际上这个假设本身并不实际,首先获得50%算力的难度很低,其次在实际之中一些POW项目50%以上的算力就控制在一个或几个节点手中。
    换句话说,实际上,即便在学术界,目前也没有一个确切的定义,或者说一个公认的,非常贴合实际的模型来描述现实中对于区块链系统“安全”的标准,于是,我们也无从证明,到底什么才是“安全”的共识算法。于是,可能与很多人的期望不同——一个能够证明的,安全的共识算法,只是说明了它在某些假设下和某些模型中的安全性。虽然这总比没有证明好,但是,在我们还在寻找一个能够更好地描述区块链的模型的现在,说这种算法就是我们在寻找的“安全”的共识算法,区块链系统用了他们就可以高枕无忧了,还为时过早。

    那么,什么才是“安全”的区块链共识算法呢?
    这里我说的安全并不是传统信息安全里面讲的安全。
    这里,“安全”是指这个系统能够可靠地按照我们的设想,做它该做的事。
    这件事,是在我看来,凌驾于其他一切属性之上的,区块链共识算法的首要责任。
    因为,区块链的首要责任,也是安全。
    这又是一个相当“非主流”的观点——我猜很多人会说:“区块链的首要责任不是去中心化吗?”
    当然,我承认,去中心化很重要,去中心化是区块链最大的特点,是区块链与中心化系统最大的不同,如果没有了“去中心化”,那么区块链也就不能称之为区块链了。
    但是,别忘了比特币诞生于整个密码朋克小组的初衷,我们需要去中心的原因,不还是因为我们不相信中心化系统的安全性和可靠性,也就是说,虽然一个中心,例如银行,例如政府,告诉我它会做一些事,告诉我们“这是数字货币,这里面的钱记在我的系统里是安全的,请放心”,但是,我们其实并不完全相信它会遵守它和我的约定,而可靠地做这件事吗?
    但是,我们,这里指所有区块链领域的从业者,都应该记住一件事——
    我们需要区块链,但其他人并不在乎,他们需要的是一个更好的系统——无论它是中心化的,还是去中心化的。
    所以,我们需要去中心,但它的目的是,我们需要通过提供一个去中心的区块链,使得我们能够更好地量化它的安全性,而不需要依赖于对于某个中心的信任,最终,得到一个比中心化系统更安全的系统。
    因此,如果天平的两边是去中心和安全——那么无论如何我都会选择安全,如果天平的两边是一个“更去中心但不那么安全的系统”和一个“不那么去中心但更安全的系统”,那么我无论如何都会选择后者。但是,在目前的阶段,我们确实需要去探索性地尝试那些“不那么安全但是更去中心”的方法,但是请一定谨记,如果我们都往这个方向走,并且不回头地走得太远,那么最终被抛弃掉的,将不是一个系统而已,而是整个区块链技术。

    因此,在我看来,安全是第一位的。
    换言之,我们可以不在乎一个区块链是不是能够“有效地”做它该做的事,是不是能够“快速地”做它该做的事,是不是能够“足够去中心地”做它该做的事,甚至,我们可以不在乎它是不是能够“节能地”做它该做的事,我们更不在乎它做事的方法是不是足够简洁,足够优雅,足够吸引所有人参加生态建设,或者是不是能够自行启动,自行进化,自我治理,自发形成一个健康的生态……
    因为除了“可靠”这一点,其他的我们早就在中心化系统里实现过了。
    没错,我们也许的确只知道如何在中心化的场景下实现以上的这些,而不知道如何在去中心化的情况下实现这些,而这点的确是目前学术界和工业界研究的重点,也是目前媒体和这个圈子聚光灯下的焦点。
    然而,如果没有安全性,这一切都成了无源之水无本之木。
    因为我们无法回答的问题是——
    即便我们能够做出一个去中心化的系统,即便我们找出了以上一切的去中心化实现方法,但是,如果实现这些所有功能的系统不可靠,安全性无法量化,甚至说,最终安全性还是主要取决于对于某个中心、某个创始人、某家公司、某些矿工的信任,那么我们究竟是为什么要放弃已然成熟的中心化方案,来使用区块链系统?
    换句话说,我们之所以推崇区块链,投入这个领域之中,不就是因为我们认为一个中心化系统不够“可靠”,因此,我们希望用“算法”来代替“信任”,用“机器”来取代“人”吗?
    更何况,正如我以上所说——其实,一切我们正在讨论的,归根结底仍旧是安全问题。因为无论是链下技术,链上治理,激励机制,生态建设,经济模型……所有的这些,只要在链上实现,就都会回归到区块链共识算法的安全问题——
    如果共识算法不安全,凭什么相信节点会执行链上治理投票决定的决策?
    如果共识算法不安全,凭什么认为节点会诚实地对于激励进行分配?
    如果共识算法不安全,凭什么认为它天然就成了所谓价值互联网的基础设施?
    如果共识算法不安全,凭什么可以将区块链当做一个可信第三方使用,在上面构建侧链、支链,运行Dapp,并且搭建一整个生态?
    这也是我之所以认为这篇东西并不过时,而且,恰恰需要在此时出现的原因——
    最近以来,关于共识算法问题的降温和公链的退潮,让资本和舆论都开始追逐新的话题和项目。于此同时,也带了了这种盲目乐观地将共识算法当做一个成熟的基础设施的幻觉,而完全忽略了一个事实——
    我们最常用的,也是最司空见惯的被认为是绝对安全的POW,实际上远比我们认为的要不安全得多。以及,我们其实一直在讨论的POW vs. POS的问题,始终都没有一个结果。所有人都在憧憬区块链的未来,设想着怎么围绕区块链搭建生态,怎么利用区块链重塑经济,怎么通过区块链改变世界的时候,只有很少的人和很少的声音在关注究竟这个区块链究竟能不能用,安不安全。
    因此,我们始终需要这种回归本质的讨论和研究——我们,究竟需要怎样的共识算法。以及,一个真正安全的区块链,应该是什么样的。

    我们需要一个衡量区块链安全的标准

    这个问题,其实从前面一段的分析中我已经表达了我的看法——一个区块链的共识算法的第一标准,是能够可靠地实现它设计的功能。我们必须知道,当我们用算法来代替“信任”的部分,得出的共识一定是可靠的,而且,它的可靠程度是可以量化的。否则,整个区块链就毫无意义,因为它能做到的一切中心化系统也能做到,甚至做得更快更好,然而,我们确并不能确定它比中心化系统更可靠。
    这种可量化的安全,仅满足于“我们觉得是安全的”的层面是不够的,停留在“从来没有发生过”的层面也是不够的,甚至,停留在“我们可以从理论上证明”的层面,在早些年的探索时期也许还勉强够用,放在巨量资本已经开始在上面搭建生态的现在,也显得捉襟见肘了。我们需要一种量化的分析方法和模型,来计算一个共识算法的安全性,更理想的状况是,我们能够根据共识算法的应用场景需求,来具体量化每一个属性的安全性。
    比如,一个安全的哈希函数,我们可以计算出需要多少计算能力才能“破解”它(找到一个冲突),于是,我们可以根据相应硬件的价格和时间,量化出哈希函数的攻击成本。同理,我们也可以算出椭圆曲线加密的攻击成本。实际上,在信息安全的领域里,这样的分析从理论到实践上,都是十分常见的。
    现在,我认为,是时候将这样的模型扩展至区块链的领域了,尽管,将这种模型扩展到区块链的领域,我们需要克服许多困难——
    最核心的问题就是,我们要怎么定义安全,以及怎么定义攻击,而这点对于区块链而言并非易事。
    以比特币为例,如果我们以密码学的标准来评估比特币的话,它的安全性是漏洞百出的——比如,对于哈希函数,我们认为只要有比穷举更好的方案,这个哈希函数就是不安全的。但是,对于比特币,且不说最著名的“自私挖矿”的问题。单从比特币链上存在的空块来看,很显然矿工有比“诚实”地挖出区块更有利的方法。有人可能会说——等等这并不影响安全性。但其实这影响到了比特币的活性,就如同“粉尘攻击”,也是影响活性的攻击。
    而这也是目前对于区块链共识算法安全性的证明的局限所在——想要证明算法的绝对安全,我们就只能在假设的实际性上作出牺牲——例如,我们需要假设50%以上的算力是诚实的,或者2/3以上的节点是诚实的,而无法顾及这种假设背后的现实性,比如,是否有足够的激励让这些节点诚实地去执行算法中的每一个步骤,或者,在应用的场景下,我们是否能做出这样的假设。这种做法的弊端在之前的POW算法容易被51%攻击的分析中已经很明显了——我们当然可以对于所有的资源都做出“大多数人都诚实的假设”,但是,如果这个假设在现实中并不成立,那么采用这个假设证明了安全性也毫无意义。
    另一方面,共识算法的安全性是与它的应用场景相分离的。对于一个共识算法是否安全,我们要么通过BFT证明“它可以达到拜占庭容错”,能够对于所有数据达成一致和活性,要么通过Bitcoin Backbone Protocol的模型证明我们可以得到一个增长的,一致的账本。也就是说,前者,我们将区块链视为一个拜占庭容错的分布式数据库,后者,我们将区块链视为某种类似比特币的分布式账本。然而,在此之上区块链的应用却已经远超分布式数据库和账本的范畴了。例如,对于分布式账本,一致性的重要性高于活性(所以可能很多人会认为空块不算是对于比特币安全性的破坏)。因此,比特币的POW算法并不保证交易的活性,而仅仅保证能够被上链的交易的活性,同时用交易费的模型鼓励矿工尽可能地将交易添加上链,即保证“交易费给得足够多”的交易的活性。然而,当将这种共识算法用于其他对于交易活性要求高的应用时就可能会出现严重的问题——例如FOMO3D实际上就是受到了针对于以太坊交易活性的攻击,而尽管比特币以及以太坊的模型不保证交易活性这件事对于业内人士都不是秘密,但是不可否认的是,既然以太坊或者其他的区块链具有这样的应用,在共识算法安全性分析的时候把这种情况排除在外,本身也说明了这个模型并不完备。

    因此,我们需要一个更实际,从应用出发,面向目标和场景的对于区块链安全性的评价标准,并且:
    1,相比于每一个机制的可证明的安全性,我们更关注这个系统是不是能够达成它应有的功能。
    2,相比于在一些条件限定下的绝对安全性,我们更关注在现实语境下的相对安全性。这点和我们之前的分析是一致的,也就是说,我们更关心——想要破坏这个系统,使得它没法做它该做的事情的代价有多大。
    3,然后,对于“应有的功能”相对应的特性,我们应该根据实际情况来分析他们的重要性——例如,对于货币,一致性、活性、抗审查、匿名的需求是什么取决于场景。如果黑市是需求的话,那么匿名可能需要摆在活性之上,但如果把交易和支付作为场景的话,我们应该参照一个支付平台的要求去考虑他们之间的权重。
    以上的定义并不严谨,但是毕竟这只是一个提议,我们不是在写论文。
    从这个角度来讲,其实对于数字货币的共识算法而言,我们并不用去考虑51%攻击,长链攻击,无利益攻击这些方式和相应的条件,也不用去关心在怎样的假设下通过什么样的算法可以防止他们的出现。我们该关心的的问题是——
    我们需要付出多大的代价才能破坏一致性,进行一次双重支付攻击:于是,我们可以判断这个系统可以承载多少价值,而一笔交易的数额超过多少的时候,我们就需要考虑双重支付这种可能,并且相应地提高确认时间,或者,仔细审视各个节点的动态。
    我们需要付出多大的代价才能破坏活性,每延迟一次出块或者一分钟达成共识:于是,我们可以知道需要即时确认的交易中,我们有可能会遭到多大的损失。然后,对于FOMO3D这样的“游戏”,我们会知道当一个币卖到多少钱的时候,就已经可能不安全了。
    我们还需要知道需要付出多大的代价才能破坏抗审查:于是,我们可以知道,比特币其实并不是一个完全自由的货币,当代价足够高的时候,我们是可以消灭掉某个地址的活性的。
    然后,对于匿名货币,我们需要知道多大的代价,可以破坏匿名性,于是可以追踪到一笔钱的来历,或者是标记一个地址的身份。
    以上,是对于“货币”这个功能而言的——这是我们的起点。
    而之后,最理想的状态是,我们应该对于区块链所能实现的所有功能,判断它们所需的性质,然后,量化它们的安全性。
    那么,在这里,去中心化的位置在哪里呢?
    对于去中心化的要求,已经融入安全性的标准之中了——毕竟,去中心化是手段而不是目的:
    一个过于中心化的系统,将面临着和中心化系统同样的风险,即作恶的成本不可控。
    而同时,一个过于中心化的系统中,共识算法也将失去意义。
    因此,在安全性标准中,我们必须也将它的去中心化程度纳入考量。
    1,我们需要衡量实际参与共识节点的大节点的数量。
    2,我们需要知道这些节点的信息,来评估他们在链外获益或者合谋的可能性。
    3,同时,我们还需要确定,这些节点确实有能力维护这个系统的安全。
    正如之前所说,一个理想的,安全的区块链系统,是由足够多数量的,身份已知的大节点来维护的。
    于是,我们需要知道:
    1,他们是否有足够的动力来维护这个系统——他们是否有足够的收益。
    2,这个系统的结构是否稳定——他们是否也能够决定系统的发展方向。换言之,我们怎么保证未来整个系统还是有足够的大节点来维护,而不是共识节点会由于系统未来的发展方向与期待不符而逐渐退出或者分叉,重新导致中心化。因此,我们需要评估的决策机制是否能够代表共识节点的权益。
    3,同时,我们还需要保证,所有在系统中有利益的群体,都应该能够参与共识。
    于是,我们需要激励机制,链上治理等等其他的机制——
    一切,归根结底都是安全问题。

    写在最后
    这是我关于POW和POS讨论的最后一篇,这三篇的内容和长度都远远超出我的预期,可能是进入这个领域以来看到听到的东西太多,积攒了很多东西不吐不快的缘故。之前,我写过专业的在区块链领域的顶会上发表的学术论文,也一直致力于在知乎上写一些客观的和中立的科普性文章,我一直致力于避免的,就是在这个本来就混乱的行业中引入新的混乱——因此,我一直只写一些已经成为这个领域基础的论文和技术,但不愿意写太多新的、未经证实或者检验的结论,尽管有些结论我认为是正确的。甚至于,即便我的文章已经被接受甚至发表,我也不太愿意在我的专栏里介绍它们。
    然而这一个系列和之前我写过的所有文章都不同,这一篇里更多的是个人的观点和判断,其中,我可能提出了不少“政治不正确”的,“大家不喜闻乐见”的,“在业内尚有争议”的,或者“所有人都知道但是没有人愿意说”的观点,因此,自从文章发表以来也或多或少引起了一些争论——而这些都是我原来一直想要避免的。之所以做出这样的改变,其实关键的原因还是我在文中说的那点——资本和市场追逐新噱头的脚步是不会停下等技术发展的,于是,当这个领域所有的人似乎都已经开始盲目乐观地考虑长期发展的时候,我们需要反思一下——我们做的这些东西,真的“够安全”吗?


Log in to reply