区块链权益证明(PoS)的去中心化难题:主观性与远程攻击
相较于工作量证明(PoW)的客观、直觉、易于验证,权益证明因为仰赖过去的状态做为共识基础,存在正确性环环相扣的问题。
工作量证明vs 权益证明
工作量证明做为比特币发明之初就存在的共识机制,最大的优点就是简单:矿工需要算一百兆次,验证只需要验算正确的那一次,易守难攻,但缺点也很明显,挖矿的无意义运算很浪费资源。
权益证明舍弃低效率的挖矿猜数字游戏,改用投票表决的方式产生共识,任何持币超过一定数量的人都可以参与投票,票多者胜。
易验证的安全性沉淀
相较于权益证明,验证需要有过去每个人的持币量的先备知识,工作量证明简单粗暴,你不需要知道币的分布、全局状态、过去的任何一笔交易,只要看区块头就知道合法,所以如果你有天不小心在路边捡到两条链,没什么好犹豫的,更长、累积工作量更多的链就是对。
基于物理法则,工作量证明区块链上的交易,在被矿工打包后,不只安全,随着未来有更多区块接在后面,这个区块被回溯的机率就越来越低,也就是交易「沉淀」到更深、更安全的地方。所以我们常看到交易所和商家会有「n 个区块」的确认等待设计,就是要等款项变得更像是不会跑掉。
区块链的最终性
权益证明区块链不存在安全沉淀的效应,因为「区块X 的正确性」仰赖「区块X-1 的正确性」,又仰赖X-2, X-3, …,所以如果你对整条区块链的状态(谁有多少币)一无所知,那往前给你再多证据也未必能说服你,毕竟伪造区块,也就是状态转移,的成本非常非常低。
然而,权益证明的支持者会告诉你,我们有最终性(finality)这个工作量证明没有的超赞的东西。也就是说,如果你确信区块X-1 是对的,那当区块X 产生的瞬间,它对你而言就永远是对的,根本不需要等什么沉淀。
理由很简单,因为工作量证明的潜在矿工是未知、是无限多的,很难知道现在世界上有多少能挖矿的设备,这甚至超越时间跨度,也就是未来的算力也可能回来挖现在的区块,所以仅管越来越安全,却永远不可能确信100% 不被反转。如果有外星人掏出一台异次元电脑,瞬间做了超越全地球电脑运算力的工作量,那区块链上的任何交易,都是有可能被逆转的。
这时候,权益证明的有限矿工就显得很重要了。对于「区块X 是否正确」问题,有投票权的母体仅是「所有在区块X-1 有持币的人」,而当这群人当中的2/3 已经投票(且保证不会跑票),那区块X 就永远地敲定了。
主观性
回到「你有天不小心在路边捡到两条链」的情境,这对专业节点/矿工来说当然不是问题,他们随时都在同步新区块,总是能根据共识规则选边站。但业余使用者难免会离线一段很长的时间再回来。有天当你连上网,却发现有两组人传给你两条完全不同的链,在权益证明的情境下,你是没办法马上知道该选哪一边的,甚至可以说,即便你补足了离线期间的每个区块,这两条链谁好谁坏仍然是凭感觉,看你相信谁,也就是「主观」的。
要克服主观性对业余节点近用区块链的威胁,唯一的办法是每个区块产出时都立刻达到最终性(不可分叉),但这等同于要求「每一个矿工」都「永远活跃在线上」且「知道状态和每一笔交易」并「随时投票表态」,这样的标准太严苛,很容易让新区块难产,甚至整个链停滞,实务上不可行。
远程攻击
共识演算法的设计中,最重要的指标就是「抗恶意行为」的程度。工作量证明的术语「51% 攻击」指的是:这个区块链能容忍一些坏人存在,只要他们掌握的算力不超过整个系统的一半就没关系。
对于攻击发起者,我们只能假设他不要太强;对于其他诚实中立(共识系统中不存在善良的概念)的参与者,我们则希望透过经济机制的设计,引导他们做出促进共识收敛的行为。
在工作量证明系统分叉时,矿工选择在较短链上挖矿是不划算的,因为挖矿奖励可能会消失,平白浪费算力。而权益证明的矿工因为不用真的用设备耗很多电做运算,同时在两个分叉上押宝理论上是可行的,但如果每个矿工都这样做,分叉就永远不会收敛。为了强迫矿工选择,我们会惩罚在同个区块高度的不同区块都投票的人,减少挖矿奖励,甚至没收资金。
可以说,权益证明在处理分叉上更强而有力。工作量证明的矿工如果两边挖矿,顶多没赚到钱;权益证明矿工两边挖的话非但不会赚,甚至会损失本金,吓阻力显然大上许多。但是当攻击目标是遥远的过去时,权益证明却比工作量证明脆弱,甚至可以说是束手无策。
如前所述,工作量证明的区块链拥有不断沉淀的安全性,恶意攻击最近的区块或许可行,但要恶意攻击一年前的区块,必须要重做一年份的工作量,成本超级高,也很容易被发现。相较之下,权益证明区块链的记帐不需要物理性的消耗设备和电力,攻击一分钟的区块和一年前的区块的成本相差无几。
想像某人在一年前秘密地掌握了大多数的币(投票权),并且在一年间表现正常,从不作恶,然后慢慢的卖币退场。但就在完全脱手后,他忽然从一年前那个他占有过半投票权的时间点,瞬间伪造了整年份的历史,一个完全由他一手伪造的分叉链。对不知情的节点而言,这条链完全合法,对其他节点而言,就算想惩罚他(他确实有重复投票),他在主链上也已经没有币可以被罚了,这就是所谓的远程攻击(long range attack)。
缓解主观性与远程攻击的方案
对工作量证明链而言,矿工和持币者是脱钩的,权益证明则否。权益证明的问题,基本上就是共识机制和区块链状态高度耦合的后遗症,衍生出的包括共识有效性、活性、轻节点实作等等的问题得靠额外的机制处理。
链外共识
一种简单有效的方法是定期发布区块链的里程碑(milestone),这种方法对工作量证明和权益证明都适用。比方说,圣人明君,伟大全能的以太坊创办人Vitalik,可以固定在他的Twitter上发布整数区块的block hash,告诉大家第九百万块就是0x388f34dd9....d8e142960e3不会错,甚至直接更新节点实作,把里程碑写死在程式码里面,就可以有效引导新加入的节点不会走到坏人的链上,可以称作PoS + PoR (reputation)的共识机制。
合并工作量证明
另一种方法是合并使用两种共识机制,比方说原本2018 要上线但忽然被整组砍掉的Casper FFG,就计画要在原有的ETH 1.0 链上叠加一层由智慧合约实作的权益证明。也就是出块仍然由原本的矿工负责,再让持币者投票做双重验证,矿工不再只跟随最长链,而是要同时考虑这个链是否违反投票结果。既可以享有最终性,也能累积工作量避免远程攻击。
不过后来以太坊开发者的大头们决定放弃上这版,改直接推出一步到位的PoS + sharding 的真・ETH 2.0。在这个版本中预计也有合并工作量证明,但不是本来的双轨制,而是用一种叫VDF 的特殊演算法+ 专用硬体,同时提供工作量和重要的链上随机数产生器(RNG)。
VDF (verifiable delay function) 和本来的挖矿有些许不同,它虽然也有计算困难验证容易的特性,但并不能靠堆叠矿机来平行加速,而是要用由某几家硬体厂商联合开发的可信机器,保证计算的耗时总是在某个范围内,从而提供近似工作量证明的客观性和安全沉淀。
中心化
回到权益证明高度耦合区块链状态的问题,这本质上是「自己证明自己对」的困境。实务上为了能运作,为了避免来自一年前矿工的超时空打击,势必得比工作量证明多出更多需要信任的环节:要相信节点实作给的信任根(像是genesis block)、要相信别的节点提供的状态、要相信验证者和出块矿工不会作恶或联合审查。
实务上,为了确保可用性和活性,接受一些程度不一的中心化妥协方案在所难免,差别只在于你更愿意相信社群大神的信誉还是硬体厂商不会偷做改良设备的职业操守。但话说回来,工作量证明也有自己的中心化议题,大矿池、ASIC 厂商垄断等等,不会有系统能保证完全的去中心化,只能在已知可用的几个方案里面,尽量挑选比较好的,稳定中求进步了。
声明:本站所提供的资讯信息不代表任何投资暗示, 本站所发布文章仅代表个人观点,仅供参考。