2.6 Algorand 如何保证安全性
上述的共识算法在理想情况下可以实现去中心化环境下较快速的拜占庭共识,数字签名和 VRF 本身的安全性也对系统安全提供了基本的保障。除此之外,Algorand 还引入了以下机制,进一步提升安全性:
种子 Q(r)
Algorand 中的随机性主要靠 VRF 保证,每轮随机的选出 leader 及验证组。一个比较直接的想法是把上一区块 B(r-1) 作为随机函数的输入。但这种方法将给恶意节点带来一定的优势:因为区块和其包含的交易高度相关,恶意节点可以通过调整区块中包含的交易集,获得多个输出,并选择对其最有利的交易集产生新区块,从而提高自己在下一轮中成为 leader 或验证组的概率。
为解决这一问题,Algorand 引入了一个随机的、不断更新的种子参数 Q(r),Q(r) 与交易集本身相互独立,因此恶意节点无法通过调整交易集而获利。
当区块非空时,Q(r) = H(SIG(Q(r-1),r) (其中,SIG 为 本轮 leader 的签名)
当区块为空时,Q(r) = H(Q(r-1),r)
可以看出,Q(r) 在每一轮都发生变化,且与交易本身无关。可以证明,当 Q(r-1) 是随机的,则 Q(r) 也是随机的。因此恶意节点无法通过改变交易集影响下一个种子的生成。其中,Q(1) 的定义没有在相关文献中找到。
回溯系数 k
种子参数降低了恶意节点预测 leader 的可能性,但拥有多个潜在 leader 的恶意节点仍可以有比普通节点更高的概率成为下一个区块的 leader,但这个概率会随着区块的变多而逐渐变小。因此,Algorand 引入了一个回溯系数 k,第 r 轮的候选组只从 r-k 轮已存在的候选组中选取,恶意节点在 r-k 轮能够影响第 r 轮候选组的概率极低。
一次性公钥
上一节中提到,Algorand 从协议层面的分叉仅在理论上可能发生。在实际中,如果恶意节点可以挟持其他节点,仍可以在验证组被公开的瞬间,强制这些节点重新签名新的区块,从而产生短暂的分叉。Algorand 引入了一种一次性公钥的机制,以杜绝这种可能性。
具体原理是所有节点在加入 Algorand 网络时(即发生第一笔交易时),都生成足够多的一次性公钥,并公布。这些公钥将用作后续所有轮次的签名验证,并且每个公钥只使用一次,一旦被使用后就销毁。一次性公钥的生成过程需要一定的时间,在 Algorand 的典型实现中,每个新节点需要约 1 小时来生成未来 10^6 轮的所有公钥(约 180 MB 数据)。虽然这增加了节点加入时的门槛,但可以从根本上杜绝上述分叉攻击:因为一旦签名完成,公钥即被销毁,即使被恶意节点劫持,也无法再次签名产生分叉。
版权申明:本内容来自于互联网,属第三方汇集推荐平台。本文的版权归原作者所有,文章言论不代表链门户的观点,链门户不承担任何法律责任。如有侵权请联系QQ:3341927519进行反馈。