本文中,我们简要地辩论关于 PoS 协议里,大家普遍认为仅次于的一朵乌云——长程反击( long range attack );内容还涵括了两种目前现行的或预期的解决办法:很弱主观性( weak subjectivity )和前向安全性密钥( forward-secure keys )。最后,我们明确提出了一种新的末端自由选择规则,网卓新闻网,使得长程反击成本更为高昂;这种末端自由选择可以融合现有的几种方案,作为防治长程反击的额外措施。
本文是区块链协议及涉及主题的系列文章之一,我们持续致力于高质量的区块链技术内容创作;欲了解更加多当前技术现状的全面概况,请参阅我们关于 Layer 2 方法、随机性、分片论文等涉及文章(编者注:中译本闻文末)。另外请求注目我们的推特或重新加入 Near Protocol 频道,防止错失内容改版。长程反击在 PoW 中,用于最久链自由选择规则可以取得令人十分失望的属性:除非蓄意攻击者掌控了全网多达 50% 的算力,不然无法反败为胜已证实一段时间的区块。但是在 PoS 中没这种特性。
特别是在是当区块生产者建完块且拿回质押的代币后,对他们来说,用作创立区块的密钥很久没价值了;这时候攻击者可以尝试以近高于创立区块时质押的代币金额去出售这些密钥。与 PoW 有所不同,因为 PoS 没出块之间强迫延时的机制,所以卖到密钥后,攻击者需要在数分钟内用上一条精于主链的伪链,并被末端自由选择规则所拒绝接受。有两种方法需要防止上述问题:很弱主观性( Weak subjectivity )拒绝全网节点周期性地检查近期的区块,并索要那些 “重组了过分久远的记录” 的区块。
只要充足频密地检查区块,使得在获释质押代币的时间段中,认同包括一次以上的检查,那么节点就总有一天会自由选择攻击者创立的最久链,因为敌手从放入保证金的检验者一处出售的私钥,必然不能从 “过分久远” 处开始创立区块(因此节点不会拒绝接受掉这些区块)。很弱主观性方法的不足之处在于,虽然早已不存在于网络中的节点会被攻击者愚弄,但是对于首次重新加入网络的节点来说,他们没充足的信息来辨别哪条链是再行被创立的,因此新的节点不会偏向自由选择攻击者创立的较长链。
为了防止这种情况,新的节点必须以某种方式在链下理解关于主链的科学知识,这在本质上就是拒绝他们自由选择信任网络中的某个主体。前向安全性密钥( Forward-secure keys )还有一种方法是拒绝区块创建者在出块后,在很短的时间内或马上封存他们用来建块的密钥;可以在每次建块时创立新的密钥对,或是通过 前向安全性密钥 结构(该结构容许在公钥保持一致的情况下,转变私钥)来已完成。
这个方法倚赖于节点是真诚的,并且严格遵守协议。因为一旦区块创建者告诉未来的某个时间点,可能会有人要卖他们的密钥,则密钥价值不为零,区块创建者就没动机去封存密钥。且不说拒绝在某个特定时间点,不会有大比例的区块创建者不愿改动他们的文件且去除私钥并不现实;这种倚赖大多数参与者 真诚因应 的协议,与倚赖大多数参与者是 理性 的协议,两者间所带给的安全性确保并不有所不同。
PoW 就是创建在大多数参与者是理性的且会展开指使的前提之上的,其末端自由选择规则和外用女巫反击也都倚赖这个假设。我们建议的末端自由选择规则参照右图:区块 B 在主链上充足前段的方位,所以产生 B 时大多数(或所有)的世在位检验者都早已把保证金放入来了。攻击者需要认识这些区块生产者,并获得其中 ~2/3 的私钥;因为这时候密钥对于区块产生者来说早已没价值,所以攻击者能以近高于实际建块质押的金额来购买这些密钥。
因为 PoS 系统没所谓稀缺资源( 译者录:PoW 中算力匮乏),攻击者需要在十分较短的时间内创立一条精于主链的伪链。我们必须一种末端自由选择规则,使得用户(还包括第一次终端网络的用户)会将攻击者创立的链视为主链——不论攻击者建构出有多长的伪链,以及有多少蓄意检验者为其亲笔签名背书。本文建议的末端自由选择规则步骤是:从创世纪区块开始,针对每个区块通过以下规则自由选择其子块作为下一个合法区块:1. 当前区块被主链使用后,对状态展开快照。
2. 所列当前时刻,持有人代币的所有账户,并制成对照表(公钥 → 持有人金额)。3. 对于每个候选子块,根据对照表,找到子块及其各自子树(子块后面接着的区块)中签订过最少一笔交易的公钥,并检验之。4. (检验)算数出有每个候选子块及其各自子树中,签订过最少一笔交易的公钥所移往的代币总量;自由选择移往代币总量最少的子块作为合法的下一个区块。
从图中的例子来说,当前区块是 B ,候选子块是 C1 和 C2 ;C1 的子树是所有合规主链上的区块, 而 C2 的子树是攻击者创立的。从 B 块状态快照开始,计算出来签订过最少一笔交易的公钥所移往的代币总量(包括代币移往和质押代币交易),作为主链(C1 )的分数;攻击者创立的链( C2 )分数计算出来方式完全相同,但是因为不存在纠错维护,所有 C2 及其子树中的交易都是由攻击者创立的。从 B 块状态快照开始,假设在主链( C1 )上,计算出来签订过一次及以上交易的公钥所移往代币总量为 p ;而攻击者创立的链( C2 )上,只不存在攻击者购买的密钥所创立的交易,这些公钥所移往代币总量为 q ,则 qp 总有一天正式成立。如果攻击者创立的链期望取得更高的分数,则从 B 块状态快照开始计算出来, C2 及其子树中的交易总额必需小于 p ,所以攻击者还必须获得账户中总额小于 (p - q) 的密钥(而且这些密钥在主链 C1 及其子树中还无法签订过交易)(不然这些额度就算入了 p)。
但攻击者这时候就困惑了,因为这些密钥持有人还没在主链展开任何交易,所以他们的账户在快照状态时还有资金,所以攻击者无法用高于快照状态中的金额来获得这些密钥。
本文来源:欧博官网abg-www.demeikang.com.cn