浅谈无需工作量证明的加密货币
Iddo Bentov1,Ariel Gabizon2,Alex Mizrahi
(Computer Science Dept., Technion; chromawallet.com)
译者:shylocks ([email protected])
摘要:本文研究了那些并没有使用 PoW(工作量证明)协议的加密货币。这些协议通常采用 PoS(权益证明)协议,也就是采用了一种使担任验证工作的人获得在系统中相关权限的协议。我们对拥有较多矿工的系统进行了分析。最后,提出了一种基于 PoS 的新协议,并讨论了它为解决已有协议中存在问题而采取的方法。
关键词:加密货币;权益证明;区块链
0 郑重声明
原文 : Cryptocurrencies without Proof of Work,相关权利归属原作者。本译文仅供学术交流使用,禁止用于一切商业用途,转载译文请注明出处。译者才疏学浅,译文难免出现缺点和错误,欢迎读者批评指正。
文中包含大量 \(\LaTeX\) 公式,推荐使用 Chrome 浏览器获得最佳的浏览体验。
1 介绍
??????比特币分布式的特点使得任何人在任何时间、任何地点都能成为一名「矿工」。因此,分布式的「挖矿」工作保证了比特币系统的安全性。矿工们不断的「挖矿」代表他们消耗大量的计算资源来进行随机碰撞实验,从而解决复杂的密码学问题,这被视为对支付节点的工作量证明。在比特币系统中,工作量证明是为了对交易信息的有效性进行确认,包栝该信息是否由特定的发送者发出、发送者是否拥有被交易货币的所有权以及该货币有没有被多次使用等。
??????率先完成工作量证明的矿工,被视为刚刚在网络中广播交易信息之人的支持者。所以,每个矿工完成工作量证明的能力取决于他具备多大的计算能力。因此,单个矿工如果具有总算力的 \(p\%\),他每次就有大约 \(p\%\) 的可能性完成对新交易信息的确认,尽管一些「自私挖矿」之类的因素有可能影响这个概率。
??????如果 PoW 系统中的大部分算力都遵循比特币协议,那么时间一长,用户对交易信息可靠程度的信心将越来越大。
??????根据 PoW 协议,每个矿工使用产生电力的稀缺物理资源与挖矿设备,从而获得密码学意义上的稀缺资源——一种可以在比特币系统中交易的货币形式。
??????那么下面的一个问题就显得十分有趣:是否存在一种分布式的加密货币系统,它像比特币一样安全,但对其交易安全的保障又不消耗大量电力资源呢?
??????那些不用消耗电力资源的加密货币协议通常依赖于 PoS(权益证明)协议,比如说把将与系统相关的权益作为股份,去奖励维护系统运行的人。这些人被称为权益代表,而权益代表们也乐于维护 PoS 系统的安全,因为当系统安全受到威胁时,他们持有的份额将会减少。同时,和比特币一样,一名持有总货币数 \(p\%\) 的权益代表,有 \(p\%\) 的概率成为下一块区域的权益代表。
??????我们运用术语「纯」PoS 协议来表示那些完全不依靠 PoW 而是依靠 PoS 的加密货币系统。据了解,权益性证明在[31]中被首次提出,尽管该论文着重于讨论 PoW 与 PoS 混合而成的变种加密货币系统。
??????当遭受 51% 攻击的威胁时,基于 PoW 的加密货币将变得不安全。同样,当足够多的权益代表联合攻击时,基于 PoS 的加密货币安全性也将受到威胁。如果绝大部分权益代表都想参与对纯 PoS 加密货币系统的攻击时,这个系统是否应该继续存在便无须言明了,所谓最好把这种大规模的袭击当作永远不会发生的事情。同样的攻击在 PoW 系统中不一定发生,在某段时间内,即是大部分算力可能处于外部攻击者的控制下,这个系统的绝大部分矿工仍希望这个系统处于一个良好运行的状态中。更多的内容请参阅第 3 节以及[4]。
1.1 相关著作
??????在相关著作中[4],作者指出:混合协议既依赖于 PoW,又依赖于 PoS,目标是将 PoW 与 PoS 的优点揉合进一个系统,但这个系统只选了两种协议中的一个作为主要协议。
??????在相关著作中[1,9],一种 PoW 的替代协议是基于数据储存的,尽管 \(Proof of Space\) (空间证明) 的参与者仍然使用 PoW 协议,因为它是一种固有的时空交易协议。最近以来基于空间证明的加密货币协议其研究进展值得思考[22,23]。也有一些加密货币协议虽然依靠 PoW 保证其安全性,但又要求矿工使用磁盘存储来实现其他目的[21]。在任何情况下,基于空间的证明机制仍然需要消耗大量的物理稀缺资源,这与本文的重点不符。
1.2 本文结构
??????本文的主要贡献者已在上文提及。在第 2.1 节中我们分析了一个已存在的 PoS 系统。在第 2.2 节中我们提出了 PoS 协议的新标准,分析了它的优点,并且讨论了它比之其他加密货币系统是否更加安全。在第 2.3 节中我们提出了新标准的一种变体,探讨了它在安全性、公平性和效率方面的平衡程度。在第 3 节中我们解释了与 PoW 系统相比,PoS 的历史记录点更重要,并提出了关于处理这项问题的建议。在第 4 节中我们解释了如何发行一个「纯」PoS 协议加密货币系统的第一批货币。
2 「纯」PoS协议
??????PoS协议存在两个明显的问题:如何将加密货币公平地分给权益代表,以及当交易节点是利己者时网络的脆弱性。对于第一个问题,PoW 提供了一种简单的解决方案,将发电资源转换为系统中的货币。我们在这里提供了对第二个问题在已知 PoS 系统中的分析,并解释了本文——《浅谈无需工算量证明的加密货币》和 Dense-CoA 协议是如何解决这个问题的。即便考虑到贿赂式攻击的可能性[29],第二个问题在 PoW 系统中也表现得没有那么严重。
2.1 点点币(PPCoin)系统
??????PPCoin系统是一种纯PoS系统,同时,PoW 仅被运用在货币的发行中。在 PPCoin 系统中,权益代表在下图情况中可以建立新的区块:
\(hash(上一区块,UTC时间戳,txtout_A) \leqslant d_0\cdot账户余额(txout_A)\cdot币龄(txout_A)\)
??????在上述公式中,当前秒数代表UTC时间戳(允许一定误差),因此协议将计算限制在每秒钟一次,防止当前权益证明被用于建立下一区块。如果一个新区块建立的时间与本地时间不在误差范围内,交易节点会认为这个新区块是无效的。账户余额\((txout_A)\)代表当前账户余额\(txout_A\),因此如果权益代表A具有控制\(txout_A\)的公钥\(sk_A\) ,那么他可以用\(sk_A\)对该块的有效性进行签名来创建新的区块,并将该签名附加为条件成立的证据。这就代表拥有 50 枚 PPCoin 和 10 单位币龄的权益代表比拥有 5 枚 PPCoin 的权益代表更有可能建立下一区块。第 2.1.3 节解释了币龄\((txout_A)\),第 2.1.4 节解释了上一区块。变量\(d_0\)根据当前状态动态取值,协议规定每隔 10 分钟需创建一次新的区块,当权益代表在一个时间段内在线量较少时,\(d_0\)就会增加。获胜区块链是具有最大权值的区块链,即具有最多区块的区块链根据其 \(d_0\)大 小进行加权排序,并且 PoS 区块的权值可被忽略。
??????尽管在 2014 年,PPCoin 拥有超过 100 万美元的市值,PPCoin 协议仍具有如下问题:
2.1.1 账本分叉问题
??????对于每一秒钟有 Pr?[某区块被验证] ≈ \({\frac 1 {600}}\),因此同时验证多个区块的时间 ≈ 36000秒 ≈ 4天。权益代表可以通过同时计算多个分叉链来实现利益最大化,而这将造成完全不同的区块链。单个权益代表通过只计算一条支链或保持计算所有分支链来赚得更多的收入,但这也可能使他所持有的货币在区块链分裂后变得毫无价值。这种将手背在身后的策略并不是一种纳什均衡:如果所有权益代表都使用这一策略,那么对单个权益代表来说,计算所有分支链是更优方法,因为它对网络整体波动的影响很小。网络传输的延迟意味着账本出现分叉的频率更高,因为权益代表会将相互矛盾的数据段发送到根节点,即使这些数据段并不是在同一时间被验证的。更糟糕的是,当一个理智的权益代表想通过计算区块$ B_i $ 算出 \(B_i\) 的邻接区块 \(B_{i+1}\) 时,他会选择同时计算链 \(B_1\dots B_i,B_{i+1}\) 和链 \(B_1 \dots B_i\) 来增加他的预期收入。因此权益代表们更愿意拒绝承认比他们正在计算的区块时间戳更晚的区块,即使对链 \(B_1 \dots B_i,B_{i+1}\) 和链 \(B_1\dots B_i\) 同时计算成功,权益代表遵循的规则也不会选择由于传输延迟而较晚收到的链。
2.1.2 贿赂攻击
??????攻击者可以轻易地获得双倍于成本的收入。当商家等待网络确认这 6-区块货物的交易信息时,攻击者开始在网络中广播,对目前相对最长的不包含这次交易的主链进行奖励。当主链足够长时,攻击者开始放出更大的奖励,奖励那些在包含此次交易的链条中挖矿的矿工,以鼓励更多的权益代表参与这次攻击。即使攻击者攻击失败,受贿的权益代表也不会损失任何东西。只要货物的总价值大于贿赂的总价值,这种攻击就是成功的。相比之下,纯 PoW 加密货币系统中贿赂攻击需要贿赂大多数矿工:参加攻击的矿工需要在攻击链上耗尽算力。通过估算矿工参与攻击的数量,来评估成功概率也是一项几乎不可能完成的任务。
2.1.3 币龄加和攻击
??????在 PPCoin 协议 v0.2 中,币龄 (\(txout_A\)) 与值为 \(txout_A\) 的持币时间成正比,且没有上限。这意味着持币时间较短时计算出新区块的概率很低,但随着时间的增长,计算出新区块的概率也会增大。通过增加持币量较少的权益代表计算出新区块的概率,使得持币量不再遵循指数分布,同时持有大量货币的权益代表也能在短时间内计算出新的区块。由于没有很好的方法进行股权分配,所以币龄在算法中特别有用。
??????然而,这也意味着攻击者可以通过等待来增加计算出区块的机会。打个比方,如果一个攻击者持有总货币量 10% 的货币,等到其平均币龄比其他矿工的平均币龄高出 5 倍时,他将能算出连续的新区块,因为在这种条件下,他算出下一区块的概率接近 50% 。
??????在 PPCoin 协议 v0.3 中,币龄的最大值得到了限制,在持币 90 天后,币龄不再增加。也就是说在某种条件下,平均币龄接近于 \(60\cdot60\cdot60\) ,攻击者的等待便毫无用处。当货币总数高于\(2\cdot90\cdot60\cdot60\)时,大部分未使用的货币在产生一个新区块之前会闲置超过 90 天。
??????现在这种攻击的效率大大降低了,但币龄缩小的贫富差距也变大了。
2.1.4 拒绝权益证明的选择性攻击
??????持有大部分货币的权益代表能够算出相当比例的新区块,因为算出区块的可能性与权益代表的持币量成正比。因此,这样的权益代表一会儿就能够算出具有连续区块的区块链。
??????我们可以建立一个简单的模型来分析这种情况,当一个权益代表持有总货币的 \(\frac 1 M\) 时,其算出一块区块的可能性是 \(\frac 1 M\),算出 k 块连续区块的可能性是 \((\frac 1 M)^k\)。当权益代表拥有超过 k 块区块时,这种近似是准确的,并且币龄也不会对结果造成任何影响。我们可以将一个权益代表产生 k 个连续区块的平均块数作为指数分布的均值,这个值等同于 \(\frac 1 {{\frac 1 M}^k} = M^k\)。
??????如果商家在确认交易前需要等待 k 个确认信息,那么当权益代表能够生成 k 个连续区块时,就有机会攻击该商家,因此发动攻击间的平均等待块数为 \(M^k\)。举个例子,当一个持有总货币数 1?4 的权益代表参与挖矿时,每算出 \(4^6=4096\) 块区块就能算出一个 6-连续区块,如果每 10 分钟算出一个区块,那么每隔一月就能算出一个6-连续区块。
??????一个能算出 k-连续区块的攻击者想要尽快知道算出它的时间点,使得他有足够的时间对商家发出交易信息(他想进行虚假交易的)。如果算出下一区块权益代表的身份来自于一个底熵过程,并且这个过程的参数仅取决于前一区块的身份,那么攻击者可以通过暴力模拟算出在某个时间点能创建k-连续区块的概率。为了使这个概率不可被算出,PPCoin 每 6 小时更改一次「权益调节器」的值,该「权益调节器」取决于前一区块交易信息,是公式中「上一区块」的一部分。因此,希望获得连续算出 k 个区块机会的权益代表可以提前大约 6 小时知道这个值,所以他有足够的时间来发起攻击。如果协议要求以更短的间隔算出新的权益代表,将为权益代表们打开一扇新世界的大门,他们可以重复地进行权益证明从而让自己更快地算出未来的区块。
2.2 纯PoS系统的行动链协议
??????我们在这里说明的 CoA(行动链)协议是纯 POS 协议,用来解决账本分叉问题(2.1.1),规定只有一名权益代表可以创建下一个区块,并通过交叉协议保证早期账本分叉历史中身份的随机选择性。
??????CoA 协议是一个基于部分「行动证明」核心元素的协议,即通过一个 \(FTS(follow-the-satoshi)\) 程序算出下一个持币代表的身份。这个程序以 \(satoshi\)(加密货币的最小单位)的索引作为输入,地址从 0 开始,到 \(satoshis\) 的总数,然后获取该 \(satoshi\) 被分到的数据块,并追踪这个 \(satoshi\) 转移到的地址,直到找到当前拥有这笔 \(satoshi\) 的权益代表。请注意,如果 Alice 具有 6 枚硬币而 Bob 具有 2 枚硬币,那么 \(FTS\) 选中 Alice 的概率比选中 Bob 的概率高 3倍,不管他们持币所在的区块是否分散。这就意味着因为 FTS 程序,持有连续区块货币的权益代表而在挖矿过程中不具备任何优势。
??????CoA 协议具有如下参数:最大货币数量 \(2^k\) ,子链长度 \(w \geq 1\),链条长度 \(l=k×w\),筛选器 \((comb)\)函数:\({\{0 , 1\}}^l→{\{0 , 1\}}^k\),算出新区块的最小间隔时间 \(G_0\),最小股份总量 \(C_0\) ,奖励总量 \(0 \leq C_1 < C_0\),双重交易安全间隔 \(T_0\)。CoA 的创建过程与区块链的创建过程一样,该区块链由一组连续的区块组成。
$ \overbrace{\Box \Box \dots \Box }^{t} , \overbrace{\Box \Box \dots \Box }^{t} , \overbrace{\Box \Box \dots \Box }^{t} , \dots $
??????CoA协议的规则如下:
CoA协议
- 1 每个区块由一个权益代表算出,其身份是固定且公开的(正如将在下面解释的那样)。矿工收集在CoA网络广播中认为合适的交易信息,并且创建一个包含这些信息的区块 \(B_i\) ,上一区块的哈希值,当前时间戳,指数 i,用私钥算出的这些参数的签名。
- 2 每个新创建的块 \(B_i\) 都与假定均匀分布的比特位 \(B_i\) 相关,该比特位 \(B_i\) 用一个方程算出,例如采用 \(hash(B_i)\) 的第一个字节。
- 3 算出区块 \(B_i\) 与区块 \(B_i\) 的间隔至少为 \(|j-i-1| \cdot G_0\)。打个比方,新的四块区块 \(B_i,B_{i+1},B_{i+2},B_{i+3}\) 应当被矿工 \(A_i,A_(i+1),A_(i+2),A_(i+3)\) 算出,但是矿工 $ A_{i+1},A_{i+2}$ 不在线,那么 \(B_{i+3}\) 与 \(B_i\) 的时间戳间隔至少为 \(2G_0\) . 如果网络中的节点的时间戳相对于本地时间差距太远,则网络中的节点将认为新创建的区块无效。
- 4 在一组合法的区块 $B_{i_1} ,B_{i_2},…,B_{i_l} $创建后,网络中的节点将会产生一个 k-bit 种子 \(S^{B_{i_l}}=comb(b_{i_1},…,b_{i_l})\)。函数 \(comb\) 能简单地将输入(如 \(w = 1\))串成链条,并在第2.2.1节中探讨了几种替代方法。
- 5 然后种子 \(S^{B_{il}}\) 通过 \(FTS\) 程序以交叉方式算出下 \(l\) 个矿工的身份。也就是说,如果存在下 \(l\) 块有效区块 \(B_{i_l+j_1},B_{i_l+j_2},…,B_{i_l+j_l}\), 那么遵循协议的节点将通过调用 \(FTS\) 程序,使用参数 \(hash(i_l, z , S^{B_{i_l}} )\)算出应当创建块 \(B_{i_l+j_1+z}\) 的矿工的身份。
- 6 如果算出的 \(satoshi\) 属于 \(c (c<C_0)\) 枚货币中未支出的一部分,那么权益代表还必须附上一个辅助签名,证明他控制了剩余 C_0-c 枚货币,否则他将无法创建有效的区块。算出的 \(satoshi\) 和辅助签名部分都不能用于创建新区块的前 \(T_0\) 块。如果应该创建第 $ i^th$ 块区块的权益代表 \(A_i\) 签署了两个不同的区块 \(B_i,B_i`\),则应创建新区块中前 \(T_0\) 块的任何权益代表 \(A_j\) 都可以将其创建的区块作为证据,以便没收 \(A_i\) 拥有的至少 \(C_0\) 个硬币。在权益代表 \(A_j\)获得 \(C_1\) 枚被没收的硬币之后,其余没收的硬币被销毁。
- 7 「三停矿」黑名单准则:如果 \(txout_0\) 有连续三次创建区块的资格,但控制 \(txout_0\) 的矿工未创建这些区块,那么 \(txout_0\) 会被列入黑名单以创建未来的区块。也就是说,从下 \(l\) 名矿工开始,如果使用参数 \(hash(i_l,z, S^{B_{i_l }})\)带入 \(FTS\) 程序算出的结果为 \(txout_0\),那么所有遵循规协议的节点会跳过 \(z ? 1\) 而直接来到 \(z + 1\) 。如果 \(txout_0\) 通过正常交易消费掉了,那么 \(txout_0\) 包含的 \(satoshi\) 便不再被列入黑名单。
- 8 如果网络节点发现多个存在竞争关系的区块链,那么认为由最多区块组成的那条区块链是主链。
??????规则 5 中的交叉方式非常重要。否则,竞争的权益代表可能通过种子演算出不同的下 \(l\) 个身份来延伸链条,这就引入了分支风险,因为系统为了达到扩展不同分叉的目的,算出的下一身份总是有效的。这种固定过程可以确保除非 \(≈l\) 名矿工想要绕过主链上的分支而创建隐藏的分支,否则只有一个矿工有资格创建下一区块。由此避免了合法的分支风险。
??????与比特币不同,CoA 很难受到自私挖矿攻击,因为权益代表们不会通过阻止其他矿工创造区块来创造更多的收入(如果奖励不仅仅来源于交易费用,参见第 2.2.2 节)。这也可以通过 CoA 没有难度调整规则来推断,这种规则说明比特币中区块的创建过程不是无记忆的,所以自私挖矿攻击在比特币的挖掘过程中具有潜在价值。
??????规则 6 中的惩罚措施将在 \(T_0\) 块区块后终止,最终诚实的权益代表必须重新获得其保证金的控制权(另参阅第3节)。权益代表可以将他的货币分成多块交易,这样 \(T_0\) 块中只有一个交易是非法的。如果 \(C_1≈C_0\),攻击者可能会进行双重签名,并在下一区块中发布双重签名作为证据,赎回他的保证金,所以令 \(C_1 \leq \frac {C_0} 2\)比较好。
??????再次强调,在 \(l\) 子链区块的整个交易过程中,CoA 不需要使用一个规则来冻结每个符合条件的矿工获胜 \(satoshis\) 的交易。这种规则既不可取也没必要。由于货币的时间价值,主动冻结资金会使整个系统对矿工的吸引力降低,所以这种规则是不可取的。相反,如果 CoA 矿工希望通过参与挖矿获得奖励,就必须冻结其部分资金。未经允许的冻结规则仅适用于阻止发生如下情况:在早期,与攻击者共谋的权益代表将他的硬币交易给攻击者,而攻击者要求矿工在线并提供他的签名,因为攻击者正在创建替代攻击链 –这两种攻击方式很难区分。
??????如果 \(l\) 非常大(在极限情况下 \(l=\infty\) ,即相当于通过轮询调度法(round-robin)来选择矿工的身份),那么攻击者可能通过抢先算出未来的连续区块包含的 satoshis 来进行双花攻击(也叫双花攻击,见 2.2.3 节)。另一方面,较小的 \(l\) 使系统更容易受到未来身份的影响(见2.2.1节)。不仅如此,如果函数 \(comb: k ' < k\),攻击者就可以轻易得知未来的交易情况。在 \(k '=10\) 的情况下,攻击者可以在下一个可能的区块组中,购买 \(satoshi\) 所处于的连续区块,攻击者就有 $ \frac 1 {1024}$ 的概率成功进行双花攻击。对于 CoA 协议的参数,最好采用如下参数: \(k = 51\)(对于每 \(108satoshis≈\)约 \(2100\) 万硬币),\(w = 9\) 作为函数 \(comb\) 在迭代的强函数中使用(见 2.2.1 节),\(l=459\), \(G_0=5\)分钟 ,\(T_0=5000\) 。CoA 协议参数的动态性调整也是有意义的。
??????从用户的角度来看,CoA 协议应当是这样的:在通常情况下,以小于 \(G_0\) 分钟的间隔创建区块。直到下一个 \(G_0\) 之前,每个符合条件的矿工都希望通过收集交易信息来赚取收益,从而避免上一区块的胜利者延长其区块来获得下一区块的风险。与比特币平均 10 分钟的间隔相比,将 \(G_0\) 设置为较低的值,比如令 \(G_0=5\) 是比较合理的,因为区块创建者之间不会相互竞争,而网络连接速度上的差异对于挖矿的影响较小。
??????规则 7 中的「三停矿」规则是为了规避在大量权益证明未进行的情况下系统算力下降的风险。例如,如果总区块的一半未被算出,那么系统总算力应等于 \(2G_0\)。因此,在最糟糕的情况下,矿工丢失了他的私钥,以至于他和其他人都不能获得他名下硬币的所有权,他控制的每块区块都会在三次未算出新区块后被加入黑名单。即便 CoA 网络即便丢失了一半区块,也能保持相当于 \(G_0\) 的算力。如果矿工找回其丢失的私钥,他可以像之前一样恢复交易,从而恢复其创建新区块的资格。CoA 协议可以将任何数字设置为「停矿」的上限,但 \(s = 1\) 可能会导致黑名单更新地相当频繁。因此,基于黑名单维护的复杂性,令 \(s = 3\) 比较合理。
??????上文提到的极限情况 \(l=\infty\) 可以重申如下:有一个用于防御双花攻击的加密货币协议,既不需要 PoS 协议,也不需要互不信任的恶意挖矿者。①:它需要拥有第 \(i\) 枚硬币的参与者设定其区块的广播周期 (例如 5 分钟),②:对双花攻击者的惩罚非常严重。很可惜,假设①并不现实,而假设②也无法普及的,因为它取决于攻击者在双花攻击中付出的成本与攻击者的匿名性。此外,任何分布式的加密货币系统都可能产生遵循不同协议的分支链,因此设定一个协议至关重要,使得协议的平衡性有利于挖矿的矿工们。
2.2.1 使用整体影响较小的函数来改善区块链的分叉选择
我们选了创建当前区块链的权益代表 \(A_1,…,A_l\) ,将他们对创建下一个区块链权益代表的不同选择方式进行了对比。其基本框架如下:
- 在第 \(i\) 轮,矿工 \(A_i\) 将算出并向网络广播一个均匀分布的比特位 \(b_i\)。
- 选出矿工 \(A_1',…,A_l'\) 作为下一区块链的前 \(l\) 个矿工。将 \(hash(i_0+i,comb(b_1,…,b_l ))\) 导入 \(FTS\) 函数算出 \(A_i'\),其中 \(i_0\) 为矿工 \(A_1'\) 的索引。而 \(comb∶{ \{ 0,1 \} }^l \to { \{ 0,1 \} }^k\) 应当是个普通函数,使得 \(2^k\) 至少等于系统中的硬币总数。
设 \(s \triangleq comb(b_1,…,b_l )\),即 s 是我们用来选择下一组权益代表(即成功算出下一区块的矿工)的「种子」。那么主要问题是如何选择函数 \(comb\) ,使 \(s\) 的选择不太可能受到集合 $ { A_1,…,A_l } $ 的任意子集影响,导致选择新权益代表 $ { A_1‘,…,A_l‘ } $ 的可能性降低。这与 Russell 和 Zuckerman [27]所研究的「集体抽样问题」非常相似,这种问题常出现在密码学和分布式计算的深入研究中,如领导选举问题和集体抛币问题(参见[3])。事实上,我们可以直接使用他们的「集体抽样问题」结论中的函数 \(comb_\alpha\),但没这样做的原因有两个。
- 他们的函数需要使用一个相当复杂的「组合矩形碰撞集」进行构造,这在实际中很难以可操作的方法实现。
- 他们使用的构造参数也不符合我们所考虑的参数范围 - 当种子的值 - \(2^k\) - 在参与者数量「可以看作幂函数模型但不是幂函数」时,例如 \(2^k=2^{r \cdot l}\) 在 \(r<1\) 的情况下。
接下来,我们将提供一些函数 \(comb\) 的模型。为了直观地分析不同函数模型的优点,我们着重于分析当前主链中拥有最后区块的权益代表 \(A_l\) ,能自选为下一区块链\(\{ A_1',\cdots ,A_l' \}\) 中获胜者的概率。我们将这个概率设为 \(\mu\)。让我们做个简单的假设,之前的矿工确实是随机选出比特位 \(b_i\) 的,并且函数 \(hash\) 是个随机数。假设权益代表 \(A_l\) 拥有系统中总货币数的 \(q\) 分之一,设 $p=1-(1 - q)^l $ ,那么权益代表 \(A_l\) 随机选出一个比特位的概率 \(\mu = p\) .
简单映射:让 \(comb(b_1,b_2,…,b_l) \triangleq b_1\circ b_2\circ \cdots b_l,b_i\) 是由权益代表 \(A_i\) 提供的随机比特位。而 \(A_l\) 能自选为下一区块链中获胜者的概率为 \(\mu\) , \(\exists b' \in \{0,1\},i \in \{1, \dots ,l\}\) 使得 \(hash(i_0 + i,comb(b_1,…,b_{l-1},b' ))\) 的结果与 \(FTS\) 程序中权益代表 \(A_i\) 具有的任一 \(satoshis\) 产生映射。
复杂映射:假设存在正整数 \(w (l =k\cdot w)\),将 \(l\) 个权益代表分成 \(w\) 人一组:
\(A_1,\cdots,A_w,A_{w+1},\cdots,A_{2w},\cdots,A_{(k-1) \cdot w+1},\cdots,A_{k \cdot w}=A_l\)。每组选用强函数来确定种子的一个比特位。将种子的第 \(i^{th}\) 比特位设为 \(s_i\), 对于\(b_{(i-1) \cdot w+1},…,b_{iw}\) 有 \(s=comb(b_1,b_2,…,b_l)?s_1○s_2○…s_k\)。在比特位 \(b_i\) 全是随机选出的情况下,大部分输入都是随机的比特位,所以 \(s\) 也是随机的。再次分析 \(A_l\) 能自选为下一区块链中获胜者的概率 \(\mu\). 使用斯特林近似可以算出这个概率大概为 \(1- \sqrt {\frac 2 {πw} }\) , 而种子的最后一个比特位 \(s_i\) 将有接近 \(100%\) 的可能性由前一区块链的权益代表决定。这是因为当 \(w\) 名参与者随机选择一个比特位时,「恰好」有一半比特位出现的概率是\(\frac {\dbinom{w}{\frac w 2}} {2^w} ≈ \frac {\frac {2^{w+1/2} } {\sqrt{ \pi w}}} {2^w} =\sqrt{\frac 2 {\pi w} }\).
在这种情况下不存在 \(\mu=p\),尽管「它本应当成立」。在这种情况下,\(A_l\) 获胜的概率能够达到 \(≈2p\). 总共有 \(\mu ≈2p \cdot (1- \sqrt {\frac 2 {πw} }) + 2p \cdot \sqrt {\frac 2 {πw} }\)。 在 \(w\) 足够大的情况下,将比之前用的函数 \(comb\) 更接近于「正确的」概率 \(p\)。
使用整体影响较小的函数进行改良:上文提到,不使用函数 $comb_\alpha $ 的原因有两个。第一,使用随机集作为输入时,函数 \(comb_\alpha\) 将返回一个随机的比特位。换句话说,这是一个「平衡」的函数。如果任意输入参数 \(w\) 都是随机选出的,那么函数的概率将低于$ - \theta(\frac 1 {\sqrt{w}}) $. 有比这个概率更低的平衡函数吗?如果有,我们可以用它来更好地构建函数 \(comb\) 。事实证明,这是一个关于布尔函数「影响」的问题,最初在[3]中被提出,并在 Kahn, Kalai 和 Linial 的论文[15]中提供了相应研究数据,表明上述概率可以比 \(\Omega (\frac {\log? w} w)\) 还低。Ben-Or 与 Linia 给出了这样的函数:TRIBES 函数。将 \(w\) 个权益代表分成 \(\log?(w)\) 人一组,取每组比特位的 AND 运算结果,然后取所有结果的 OR 运算结果。但是,TRIBES 函数并不拥有高效的结构。
如何防止互相勾结的权益代表干扰结果:现讨论如下情况:一个权益代表的集合 \(C\subseteq \{A_1, \cdots ,A_l\}\) 试图干扰函数 \(comb\) 的结果。简单的来说,我们做出以下假设
- 同之前一样,集合外 \(l-c\) 名诚实的权益代表随机选择输入的比特位。
- 最坏情况下的假设,集合中 \(c\) 名权益代表在提交他们的比特位之前看到了这些人所提交的比特位。
- 我们通过函数 \(comb\) 算出种子的距离(统计学意义上的)是否均匀分布测试函数的性能:对于\(\xi >0\),有 \(\{0,1\}^k\) 上的概率分布 \(P\) 与任意集合 \(T?\{0,1\}^k\) 关于 \(\varepsilon\) 近似,而 \(P\subseteq T\) 的概率最大为 \(\frac {|T|} {2^k}+\varepsilon\)。换句话说,与该事件发生的「正确」概率相比,这种假设成立的概率最多增加一个因子 \(\varepsilon\) 。
??????Kamp 和 Zuckerman 认为在这种情况下,我们尝试解决的问题就是为那些被看到的比特位构造一个提取器。
??????使用术语定义函数 \(comb∶ \{0,1\}^l \to \{0,1\}^k\) 是关于集合 \(C\) 任意大小 \(c\) 的一个\(\varepsilon -\)提取器,并且在看到诚实的权益代表所提交的比特位之后,集合 \(C\) 中的权益代表可以使用任何策略决定他们提交的比特位,\(comb(b_1,b_2,\cdots ,b_l )\) 产生一个 \(\varepsilon -\)近似的均匀分布输出。[16]给出了 \(\varepsilon -\) 提取器的如下构造 – 这与之前用迭代函数(如图 1 所示)代替强函数时起到效果相同。
\(KZ(b_1,\cdots,b_l)\):
- 设 \(w=3\cdot {\frac c \varepsilon }^{\frac 1 \alpha},α=log_3(?2)\).令 \(l=w\cdot k\).
- 使用迭代函数对连续的 \(w-inputs\) 集合进行运算,输出 \(k\) 个比特位。
??????对迭代函数的分析[3]能够证明函数 KZ 是一个 \(\xi -\)提取器。将 \(\varepsilon\) 设为期望的统计误差,\(k\) 设为期望的输出长度, \(l\) 设为链中玩家的总数,函数 KZ 可以处理大小 \(c\le \varepsilon \cdot (\frac 1 3 \cdot \frac 1 k)^α\) 的集合。
??????另一方面,[16]同样指出任何这样的 \(\xi -\)提取器都可以处理大小 \(c≤\varepsilon \cdot 10 \cdot \frac l {k-1}\) 的集合。
对于 \(\alpha > {1}/{2}\) 的情况,使用这种 \(comb\) 函数的性能比最优性能少一半。在这种假设下,不诚实的权益代表是睁眼玩家,即他们在参与之前就看到了诚实的权益代表的选择。这种保守的假设具有一定的意义,因为占据区块链末端的权益代表更容易联合起来影响种子。
2.2.2 程序合法的联合攻击
??????权益代表有时会产生联合起来跳过主链最后几个区块的想法,把最后几个区块当作不存在的区块,就可以使自己的区块链变长,以便对前面区块的权益代表收税。为了打破他们这种不切实际的幻想,系统让诚信的用户在每次交易中提交已知最新区块的索引信息。比如说,主链上的最后一个区块是 \(B_i\), 它包含一个信息段 \(tx_0\) 表明存在块 \(i-1\),一个新的信息段 \(tx_1\) 表明块 \(B_i\) 已被广播到网络中。那么创建 \(B_{i+1}\) 的权益代表就不能无视 \(B_i\) 来收取 \(tx_0\) 和 \(tx_1\) 的费用,因为 \(B_i\) 必须在包含 \(tx_1\) 的链中。用户甚至可以在他的交易信息中提交当前正在被创建的区块的索引,但这意味着用户需要在当前权益代表离线前发出另一条交易信息。联合的权益代表在参与此类攻击时会使拥有区块的总价值降低,所以这种攻击策略不一定有益。同样,系统也可以通过膨胀货币奖励权益代表、销毁交易费用的方式来防止这种攻击,尽管这种方式增加了系统受到贿赂攻击的可能性(参见第 2.2.3 节)。
2.2.3 CoA系统中的贿赂攻击
\(\Box \rightarrow \stackrel{\stackrel{\text{支付信息}}{\downarrow}}{\boxdot}\rightarrow\Box\rightarrow\Box \rightarrow \stackrel{\stackrel{\text{商户发出商品}}{\downarrow}}{\Box}\)
如何成功对 CoA 协议进行双花攻击:
在本例中,共谋的权益代表创建了包含 5 个区块的复制品
通过发送一个冲突的交易信息,使得区块链发生分支
$ \Box \rightarrow\boxed{\cdot} \rightarrow\Box \rightarrow\Box \rightarrow\Box \stackrel{\stackrel{\text{冲突的交易信息}}{\downarrow}}{\boxed{\times}} \rightarrow\Box \rightarrow\Box \rightarrow\Box \rightarrow\Box$
图 2 在 CoA 系统中的双花攻击
??????假设商家从防止双花攻击的角度出发,设定包含交易信息的区块数量应为 \(d\) ,那么他在看到区块链 \(B_{i_1} ,B_{i_2},B_{i_3},\cdots ,B_{i_d}\) 中区块 \(B_{i_1}\) 所包含的交易信息后就会发货。攻击者现在可以贿赂 \(d+1\) 名或更多的权益代表,奖励在目前相对最长的、不包含这次交易的主链上挖矿的权益代表 \(i_{d+1},i_{d+2},\cdots ,i_{d+d+1}\), 让他们继续挖矿,使不包含此次交易信息的链成为主链。如果其中一些人拒绝贿赂,攻击者将需要贿赂超过 d+1 名权益代表。由于理性的权益代表不会毫无理由地参与攻击,所以攻击的成本至少为 \(\mu (d + 1)\),其中 \(\mu\) 是贿赂每个权益代表的平均金额。
??????有Pr [{攻击成功}] <1,因为一些权益代表不想接受贿赂、一些理性的权益代表认为参与这样的攻击无利可图、攻击者的资金也不是无限的。当 \((\mu + F’)\cdot Pr[\{攻击成功\}]> F\cdot (1 - Pr[ \{攻击成功 \} ])\) 时,理性的权益代表会选择接受贿赂,其中 \(F\) 和 \(F’\) 分别是该权益代表将在主链和攻击者链中获得的收入。当部署 2.2.2 中的安全协议时,有可能存在 \(F' = 0\),因为只要攻击者的链条较短,矿工也可以继续在主链上进行交易。总的来说,攻击者可能需要花费比 \(\mu (d + 1)\) 更高的成本才能攻击成功。
??????在图 2 中展示了在CoA系统中进行双花攻击的前景。
??????攻击者不能简单地贿赂算出区块 \(B_{i_1} ,B_{i_2},B_{i_3},\cdots ,B_{i_d}\) 的权益代表,以无风险的方式创建长度为 \(d\) 的攻击链,因为如果系统发现这些权益代表对区块进行双重签名,他们持有的区块将被没收。而上述情况与第 2.1.2 节形成了鲜明的对比,与 CoA 系统的矿工不同,PPCoin 的矿工们在短时间内采取的策略是参与攻击,当攻击失败时前者将失去收入 F。这是由系统协议决定的,在 CoA 系统中,下一个符合条件的权益代表身份是固定的,而PPCoin系统允许权益代表创建区块时使用的时间戳有一定延迟(参见2.1节),这意味着 PPCoin 对于双重签名的处罚有漏洞可钻。也就是说,一个诚实的 PPCoin 矿工首先签名了一个较短的链,然后意识到(由于传播延迟)对较长的链签名不会受到惩罚。因为算出下一区块是一个低概率事件,PPCoin 矿工会不由自主地参与贿赂攻击。而对这种诚实错误(或者是权益代表之间的恶意竞争)的惩罚是很难确定的。
限制该问题的条件(参见[17]),矿工必须从这两个决策中选择一个(**),
- 遵守协议在已知最长链上继续挖矿。
- 接受攻击者的贿赂,对攻击链进行签名并在攻击链上继续挖矿。
根据假设,这种限制是合法的。可以将罚款设为一个足够高的数值 \(C_0\),使得双重签名的行为对矿工不具有吸引力。为了保证对双重签名处罚的有效性,该协议建立在每个子链记录着签名证据的基础上,玩家参与攻击的收益便是攻击者的贿赂金额减去保证金 \(C_0\)。这意味着我们在本节中只能讨论子链短于 \(T_0\) 的情况,而在第 3 节我们将讨论基于较长子链的攻击。
??????目标证明选择决策 1 的矿工居多。事实上,下文将证明在特定情况下不会发生攻击,因为矿工无法选择决策 2。
??????为了分析商家对 CoA 系统阻止双花攻击的信任程度,让我们对 CoA 网络中权益代表参与双花攻击的比例作出合理假设。
??????比例假设:设 \(\rho > {1}/{2}\)。在最长的区块链中,对于 \(K\) 个或更多个未被创建的,至少创建这些区块的中 \(\rho \cdot K\) 块。
??????尽管这是一个简单的假设,但它是合理的,因为 CoA 网络的交易安全源于权益代表的参与。我们并不认为大部分权益代表都是利他主义者(即便违背自身利益,也要遵守 CoA 协议)。尽管利他主义会使得系统安全性更高,但大部分权益代表不会这样做。
??????设区块 \(B_0\) 包含一些特定的交易信息,\(\delta\) 表示在区块 \(B_0\) 之前参与率 $ \le \frac {1} {2} $ 的最大链中缺失的区块数量,\(\rho '\) 表示区块 \(B_0\) 之后最长链的密度。
??????在下图中,\(\delta =3\),\(\rho '={10}/{14}\) .
\(\cdots \ \Box \Box \ \_ \ \Box \Box \Box \Box \Box \ \overbrace{\_ \ \_ \ \_ \ \Box \ \_}^{\delta \ =\ 4\ -\ 1} \ \overset{B_0}{\Box} \ \overbrace{\Box \Box \ \_ \ \Box \Box \Box \ \_ \ \Box \ \_ \ \_ \ \Box \Box \Box \Box}^{\text{密度:}\ \rho '=\rho}\cdots\)
??????结论 1:设 $\delta$ 为权益代表新建区块获得的平均收入。假设权益代表的选择仅限于决策中(**)。对于攻击者,区块 \(B_0\) 的价值为 V。如果原则上攻击者不希望丢失硬币,那么只要商户在发货之前等待链S ( S满足 \(V<\delta (\rho ' S-\delta +1))\) 延伸到区块 \(B_0\),本次交易就是安全的。
??????证明:使用第 2.2.2 节中描述的函数,可以认为竞争链中的区块无法相互交易,与攻击者合谋的权益代表可以通过其他方式赚得 \(\varepsilon\) 枚硬币,进而要求攻击者的贿赂超过这个数字。存在 (1-ρ^‘ )S+δ 名能够参与攻击的权益代表已经丧失了新建区块的机会,因此在最糟糕的情况下,商户能料到他们将免费帮助攻击者。而攻击者需要对剩下的 S+1 名权益代表每人支付 \(\varepsilon\) 枚硬币的贿赂费用,$V<\varepsilon (S-(1-\rho‘ )S?-?\delta?+?1)=\varepsilon(\rho‘ S?-?\delta?+?1) $表明这样的攻击无利可图。
上述证明只给出了一个粗略的结果,因为它没有涵盖关于攻击的所有方面。特别是对于攻击者回收的硬币(在攻击成功的情况下),因为在双花攻击时,加密货币系统可能发生贬值的情况,可能这些硬币将具有较低的购买力。在后文中有更详细的建模分析,因为这样的分析对比特币或其他基于工作量证明的加密货币都很有价值。
??????结论 2:如果结论 1 的密度假设成立,那么只要商户等到链 \(S\) 延伸到区块 \(B_0\) 之后,交易一定是安全的。在这种情况下双花攻击不合法,其中 \(S\) 满足 \(V<\varepsilon (\rho S-\delta \ +\ 1)\)。
??????证明:根据比例假设,认为 \(K>\delta\),并且由于商户等到链 \(S\) 延伸到区块 \(B_0\)之后,\(\rho' \ge \rho\)。那么由结论 1 可以得出 \((1-\rho)S+K \ge (1-\rho' )S+\delta\).
??????为了更好地理解这些式子,让我们用具体的数值代替参数。比如说 \(\rho=7/10,k=20,\varepsilon=10,V=100\)。有 \(10\cdot (7/10\cdot S\ -\ 19)\ >\ 100\),令 \(S = 42\) 即可满足上式了。这意味着商户在发货前需要等待\(\leq 42\cdot 5\) 分钟或 3.5 小时,以便 CoA 根据 \(G_0\ =\ 5\) 分钟防御双花攻击。
2.2.4 纯 PoS 协议的变种 –密集型 CoA 协议 (Dense-CoA)
??????Dense-CoA 协议是 CoA 协议的变种,在该协议中,算出下一个区块的权益代表的身份很快就能知道,目的是使共谋攻击和贿赂攻击变得难以执行。协议另一个优点是使得合法的权益代表难以获得违法的收入。Dense-CoA 协议的缺点是易受大股东的 DoS 攻击,并且它需要更庞大的通信网络和空间复杂度。
??????在 Dense-CoA 协议中,每个区块由 \(l\) 名权益代表组成的小组创建,而不是由单个权益代表创建:
\[
\qquad \quad \qquad \, l \begin{cases}
\circ \ \ \circ \ \ \circ \ \ \ \circ \ \ \circ \ \ \circ \ \ \ \circ \ \ \circ \ \ \circ \ \ \cdots \ \vdots \ \ \ \ \vdots \ \ \ \ \vdots \ \circ \ \ \circ \ \ \circ \ \
\end{cases} \\
\qquad \quad \ \ \ \Downarrow \;\; \Downarrow \;\; \Downarrow \\text{区块链}\ : \ \Box \ \ \Box \ \ \Box
\]
设 \(h:\{ 0,1 \} ^n \to \{ 0,1 \} ^n\) 是一个单向排列。假设区块 \(B_{i-1}\) 与由创建 \(B_{i-1}\) 的权益代表生成的种子 S 相关。决定哪些交易包含在区块 \(B_i\) 中的权益代表 \(A_i\) 的身份,由 \(hash(i,l,S^{B_{i-1}}\) 带入 \(FTS\) 函数算出,剩下的参与到区块 \(B_i\) 创建过程中权益代表 \(A_1,A_2,\cdots,A_{l-1}\) 的身份,由 \(hash(i,j,S^{B_{i-1}})\) 带入 \(FTS\) 函数算出,其中 $j\in { 1,2,…,l-1 } $。这 l 名权益代表参与了两轮协议来创建当前区块 \(B_i\) :
- 在第 1 轮中,对于每个 \(j \in \{1,2,\cdots,l \}\),权益代表 \(A_j\) 选择一个随机数 \(R_j\in\{0,1\}^n\),并将 \(h(R_j )\) 广播到网络中。
- 在第 2 轮中,对于每个 \(j \in \{1,2,\cdots,l-1 \}\),权益代表 \(A_j\) 对数据段 \(M \triangleq h(R_1)\circ h(R_2 )\circ \cdots \circ h(R_l )\) 签名,并且将这个签名 \(sign_{sk_j} (M)\) 与原像 \(R_j\) 广播到网络中。
??????我们要求 Dense-CoA 协议支持多签名[5,14,18,20],因此 \(A_l\) 可以将签名 \({sign_{sk_j} (M)}_{j=1}^l\) 合为单个签名 \(\hat{s}(M)\)。而 \(\hat{s}(M)\) 的大小仅取决于签名方案的安全系数(而不是 \(l\)),这比验证 \(l\) 个普通签名(ECDSA)更快一些。
??????因此,权益代表 \(A_l\) 签名并广播由她希望包括的交易信息(Merkle 树的根节点)组成的区块 \(B_i\) ,前一个区块 \(B_{i-1}\) 的散列,当前时间戳,索引 \(i\) ,\(l\) 个原像 \(R_1,R_2,…,R_l\) 和签名 \(\hat{s}(M)\)。为了验证区块 \(B_i\) 是否合法,网络节点调用 \(h\) 来计算函数 \(h(R_1 ),h(R_2 ),\cdots ,h(R_l )\) 的值,并将结果复合得到值 \(M\),用来检验签名 \(\hat{s}(M)\) 对于控制权益代表 \(A_1,A_2,\cdots ,A_l\) 获得 \(satoshis\) 的公钥 $pk_1,pk_2,\cdots,pk_l $ 的合法性。
种子 \(S^{B_i}\) 由 \(hash(R_1\circ R_2\circ \cdots\circ R_l )\) 算出。即便只有一个权益代表 \(A_j\) 提交了一个随机数 \(R_j,S^{B_i}\) 在数学中也与随机数无异。假设n足够大,那么 OWP h 将对原像攻击有一定的抵抗力(译者注:OWP 协议是一个公开的所有权登记协议,可以理解为“账簿”)。
??????如果这 \(l\) 名权益代表中一些人处于离线状态或者以其他方式拒绝签名,那么在时间 \(G_0\) 之后,遵循该协议的节点将令 \(t = 1\) 并以 \(hash(i,tl+j,S^{B_{i-1}} )\) 带入 \(FTS\) 函数从前一区块 \(B_{i-1}\) 中算出替代这些人的 \(l\) 名新代表,其中 \(j\in \{1,2,\cdots,l\}\)。应在新块 \(B_i\) 中指定起始索引 \(tl + j\) ,以便简化对区块的验证,并且 \(B_{i-1}\) 和 \(B_i\) 之间的时间戳间隔至少为 \(tG_0\)。与CoA 一样,诚实的节点认为拥有最多有效区块的是获胜链,并且忽略相对比本地时间戳相差过大的区块。
??????CoA 协议的参数 \(C_0,C_1,T_0\)(参见 2.2 节)Dense-CoA 协议同样可以使用。
??????参数 \(l\) 应被设为一个足够大的数值,以抵制大股东持续地控制种子 \(B_I\) 并使自己在下一区块链中获胜。比如说,为了让拥有 5% 或 10% 总股份的权益代表必须算出约 \(2^{100}\) 个哈希函数才能自选为下一区块链的获胜者,需令 \(l=23\) 或 \(l=30\)。如果我们设 \(G_0=5 min,l=23\),一个拥有 10% 股份的攻击者有 \(1-{90/100}^23≈91%\) 的可能性成为权益代表 \(A_1,A_2,…A_l\) 中一员,并且拒绝参与下一区块的创建过程。因此在发生此类攻击时,需要平均 56 分钟来创建下一个有效的区块(实际上少于 56 分钟,因为在最后一个区块之前的链也可以作为最长的有效链)。
??????总体而言,Dense-CoA 协议和 CoA 协议之间的主要区别在于,Dense-CoA 协议在防御双花攻击方面比 CoA 协议具有更高的安全性,但是对大股东通过 DoS 破坏加密货币系统方面的防御较弱。此外,Dense-CoA 协议禁止权益代表影响种子,从而获得比应得收入更多的奖励,除非他与其他所有参与创建下一个区块的权益代表互相勾结。由于原像 \(R_1,R_2,\cdots ,R_l\) 需要被储存在每个合法的区块中,Dense-CoA 协议的处理效率低于 CoA 协议。同时,其独有的两轮协议创建连续区块的过程需要更大的通信量来维护。
3 分布式账本的共识确立
??????任何分布式加密货币系统,对于共识账本内节点记录无需付出任何代价,这也意味着无须付出算力和成本即可由早期节点开始创建一个不同的分支链。这就带来了麻烦,一个拥有少量股权或者根本没有的攻击者,可能会试着用上述分支链来替代当前共识账本发动攻击,这样他可以获得大量收入。此外,出于发动攻击也不会遭受损失的理由,自私的权益代表也会试着发动这种攻击。
??????在纯 PoS 系统中,这种风险会以如下形式表现出来。对于最初在系统中持有硬币的参与者,他们花掉了这些硬币换取其他商品,他们便不再是这个系统的权益代表。这些参与者可以从自身控制系统的角度出发制造假账本。这种攻击具有一定的可能性,因为他们在当前系统没有股份,所以从他们的视角来看这种攻击无需代价,也不会造成恶劣影响。
??????说得更详细点,让我们来看看这种攻击在 CoA 或 Dense-CoA 系统中的例子。即使是一个拥有少量硬币的权益代表,也可以分割主链并创建一个具有足够时长的支链,由自己创建后续的区块。但根据区块的时间戳准则,其他参与者将拒绝承认此支链(尽管它包含更多的区块),因为未来的时间戳相对于当地时间而言过于遥远。因此,如果当前在线率为 \(p%\),而参与此次攻击的权益代表在历史账本上占有 \(q%\) 的硬币控制权,当 \(q>p\) 时意味着攻击成功。而 \(p%= 1\) 不太现实,并且在系统早期,持有 \(q%(q%>p%)\) 股权的参与者互相勾结是合理且无成本的,所以这种攻击看起来相当危险。
为了防御这种攻击,我们对 CoA 和 Dense-CoA 协议进行了扩展,提出了哨卡法则,如下所示:
- 用 \(T_0=2T_1\) 表示 2.2 节中防御双花攻击的安全间隔。
- 每 \(T_1\) 个区块的间隔区块被设定为哨卡区块:起始区块是哨卡区块,并且任何在哨卡区块 \(T_1\) 个区块之后的区块是候补哨卡区块。
- 当遵循该协议的节点首次收到候补哨卡区块 \(B_j\) 时,将 \(B_j\) 对于区块 \(B_i\) 延伸,使得 \(j=i+T_1\) (如果有一些权益代表离线,则 \(j>i+T_1\) ),它将区块 \(B_i\) 固定,使得对起始区块到 \(B_i\) 中任意区块的改动都是不合法的,尽管 \(B_j\) 所在的支链有可能由于竞争失败而放弃 \(B_j\) 。
参见图3,由于双花攻击的安全间隔为 \(T_0\),创建区块的权益代表只有在哨卡区块确定后才能使用创建的区块,这种攻击的威胁将会变小(在 \(C_0\) 很大的情况下)。
\(\dashrightarrow \Box \rightarrow \Box \rightarrow \boxed{C}\rightarrow \underbrace{\stackrel{\stackrel{A_i\text{对}B_i\text{签名}}{\downarrow}}{\Box}\rightarrow \Box\rightarrow \Box\rightarrow \Box\rightarrow \stackrel{\stackrel{\text{哨卡区块}}{\downarrow}}{\boxed{c}}}_{T_1}\rightarrow \underbrace{\Box\rightarrow \Box\rightarrow \Box\rightarrow \Box\rightarrow \stackrel{\stackrel{A_i\text{能使用被签名的区块}}{\downarrow}}{\boxed{c}}}_{T_1}\rightarrow \Box\rightarrow \Box \dashrightarrow\)
图 3 在\(T_0 = T_1 + T_1\)区间中哨卡法则的演示
但是,这钟哨卡法则有两个严重的问题:
- 1 新加入分布式网络的节点无法分辨他们收到的哨卡区块是否可信。
- 2 由于广播时延,攻击者们可以通过广播一个长度为 \(T_1+1\) 的竞争链,在网络节点之间产生不可逆转的分支。
??????第一个问题可以利用加密货币系统外部的「信任网(Web of Trust)」协议来处理。也就是说,不了解系统当前状态的参与者,应当从可靠渠道那里获得初始区块至最新哨卡区块的区块链数据。
??????第二个问题也可以自行解决,如果矿工发现自己正在竞争链中弱势链上挖矿时,可以将工作转移到对立链上。当 \(T_1\) 的值较大时,第二个问题将不可能发生。在第 2.2 节中提出的参数代表着拥有 \(T_1+1\) 块区块的分支链在共识账本中存在了超过一周的时间。
像比特币这样基于 PoW 协议的系统也能从哨卡法则中获益,因为该法则以更有效的方式引导新加入网络的节点。比特币的哨卡法则也可以防御 DoS 攻击,这种攻击生成大量低费区块组成竞争链,除非该链累积的工作量证明数量大于当前最优链,本地客户端将销毁接收到的攻击链信息,从而防止 DoS 攻击。CoA 系统和 Bitcoin 系统都可以使用 SNARK(参见[13])来表示由哨卡法则生成的共识账本状态(也称未使用硬币的集合),通过向新加入的节点发送 SNARK 而不是发送整个共识账本。虽然 CoA 的哨卡依赖「信任网」协议,但比特币可以无理由地使用 SNARK 哨卡,因为 SNARK 可以证明从起始区块到当前状态总是满足 PoW 协议,新加入的节点与已存在的节点对当前的共识账本具有相同的信心。
4 货币发行
??????对于未使用 PoW 协议的加密货币,将初始货币分给权益代表的一种简单方法是进行 IPO 或者进行拍卖(译者注:IPO = Initial Public Offerings 即首次公开募股)。然而,这也意味着货币发行是由中央控制的,无法体现系统分布式的特点。在这种发行方式引发的担忧不止存在于 PoS 协议中,因为任意系统的大股东都可以轻易地操纵市场。
??????我们建议使用 PoW 协议发行初始货币,然后让这些货币在加密货币系统中流通,使得新算出货币的价值与算力成本挂钩(参见[30])。可以在发行过程中规定使用电力和设备算出货币的成本,会发生如下情况:
- 如果每张货币的价值超过其生产成本,那么矿工们会登入更多的采矿设备以固定成本挖矿,这将算出大量新币 - 这意味着通货膨胀。
- 如果每张货币的价值低过其生产成本,那么一些矿工将会退出,然后产出新币的数量减少 - 这意味着通货紧缩。
??????为了固定生产成本,我们只需要取消比特币系统的难度调整规则。这意味着 PoW 系统的出块时间 x 将被设为 0 (在比特币系统中 \(x =10\) ),那么 PoW 系统中区块的创建将只与参与区块创建使用的算力有关。这样一来,如果一个矿工每隔一分钟就能以固定成本创建一个区块,那么即使外来的矿工跟他一起挖矿,他仍可以每隔一分钟创建一个区块,尽管他创建的区块仅是区块链中下一区块的一小部分。为避免在加密货币具有极高市场价值的情况下,区块建立速度过快的情况,协议可以设定一个难度调整规则,规定最小出块间隔。比如说将 PoW 系统的出块间隔设置为 1 分钟。系统应当设定一个最小出块间隔,否则会出现许多独立的区块,使得拥有高算力的矿工能获得比应得更高的收入。
??????比特币的难度调整规则与上述规则不同,因为比特币的价值取决于长期因素,这些因素来自于商家对加密货币的取信水平,而不是一段时间内参与挖矿的矿工数量。因此,考虑到货币的当前市场价值,根据参与挖矿的矿工数量确定在比特币系统中新建区块的成本,更高的参与率意味着每个矿工每隔 10 分钟将赚得新建区块中一定比例的货币。如果没有调整难度调整规则,每个矿工的生产成本都脱离系统总算力的控制。
??????因此,与比特币价格的剧烈波动不同,CoA 系统的货币分配协议可以稳定加密货币通货膨胀时的汇率。
??????对于CoA 系统部署的 PoW 发行方案来说,系统允许 CoA 网络节点创建有关 PoW 链中新建区块的交易,当且仅当该区块位于链中 \(n\) 个区块之后(\(n\) 足够大)。在比特币中 \(n = 100\),但这里最好令 \(n > 100\),以防固定的 PoW 难度对于未来的采矿设备变得容易。如果已经设定了最小出块时间,便可以将 n 设为一个合理的值。对于不会发生通货膨胀货币通胀的加密货币,CoA 网络节点可以在创建最后一个 PoW 区块后拒绝承认新创建的 PoW 区块(例如在最后一个 PoW 区块之后关闭 PoW 协议),并且在这些发行货币被使用后将 PoW 链销毁。
??????发行货币的协议前身是「单向通过协议」(one-way pegging) 又被称为「焚毁证明协议」(Proof of burn)(参见[6,7]),该协议禁止用户「用前朝的剑斩本朝的官」,即用旧系统的货币换取新系统的发行货币。假设较早的加密货币系统是分布式的,这种发行方法确实也是分布式的。然而,这种发行方式并不意味着新系统中货币的价值与生产成本有关。
5 结论
设计一个可持续的分布式加密货币协议是非常具有挑战性的,因为它们不依靠消耗电力资源来保障交易安全。根据分析,我们认为现有PoS协议的安全性存在不足。本文提供了纯PoS协议的结构,它比现有协议具有更高的安全性,并且避免了消耗大量电力资源。未来工作的重心是将其投入战略应用中。
致谢:感谢 Gregory Maxwell 和 Andrew Miller 关于无代价攻击的研究。
翻译致谢:感谢 XJTLU WuTong同学在语言学方面的建议。
原文地址:https://www.cnblogs.com/shy-/p/8984952.html