2018-05-27 区块链兄弟 Hugo Nguyen 私钥攻击!权益证明协议的最大要害
作者:Hugo Nguyen | 编译:nuszjj
原文链接:https://medium.com/@hugonguyen/proof-of-stake-private-keys-attacks-and-unforgeable-costliness-the-unsung-hero-5caca70b01cb
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
区块链上有2种私钥攻击:旧私钥攻击和当前私钥攻击
01 旧私钥攻击
权益证明的早期版本使用的是固定的验证节点设置。这意味着在过去的某个时间点卖出他们权益的用户,在未来,仍然可以加入验证过程(在权益证明中,验证等同于挖区块)。这样会造成一个巨大的漏洞,因为任何人拥有这些过期的私钥(通过改写历史),都可以获得很多钱,而且没有任何不利因素。这也被称为“无风险问题“。
为了解决这个问题,更新版本的权益证明使用动态验证节点设置和检查点。
这个想法是为了取消过去权益持有者对未来区块验证的参与权。
但是,尽管有了这些方法,权益证明协议也不能完全解决这个问题。两类节点仍然特别危险:
a) 刚刚加入网络的新节点
b) 长期不使用的节点
因为以上说的节点要么是从空白的记忆开始,或者是在他们的记忆中有很大的空缺,当这些节点不在线的时候,在检测一些已经在主链上卖出代币的权益持有者的时候,会遇到麻烦。
一些权益证明的支持者会很快地指出在工作量证明也会有类似的问题,所以这是个可接受的问题。
这个其实是有些错误的。虽然这是真实的,在工作量证明系统中的新用户确实需要信任某人,从而下载正确的软件和程序,但是这种信任不会延伸到哪条链是有效的。
其次也是更为重要地,一旦工作量证明算法节点软件已经下载,对于工作量证明节点的操作者来说,在某段时间关闭节点是相对安全的。在通过自启动阶段, 工作量证明是高度无需许可的:节点可以在任何时候使用或者关闭。
唯一的例外,就是在硬分叉过程中,这需要节点操作者重复自启动过程(这也是硬分叉应该非常谨慎使用的原因,并且尽可能避免)。
相反地,对于权益证明的节点操作者,尽管你下载了正确的软件,也需要经常去和可信任的第三方进行沟通,从而确保一直在主链上。对于丢失主网合约以及进入错误链的情况,会一直成为担忧,特别是在可信任的第三方长期不存在的情况下!这就在安全方面造成了极大的隐患。
这是所有权益证明协议都会有的最基本的问题。
02 当前私钥攻击
这类攻击的第二类中,私钥是现在的。这意味着无论是动态验证节点或是检查站都没有作用。(其实,自动检查站会使得问题更加无法解决。)
这是如何作用的:获得私钥的攻击者可以控制至少1/3的供给代币,这样就可以很容易地创建两个在相同高度的有效区块,而且不会有区块比网络中其他的 更加“正确“(有效地创建了链分叉)。这已经是大多数权益证明协议的顽疾,因为如果2/3以上的诚实阀值没有达到,那么他们就会被强制去停止运行。
在任何周期中,没有区块可以“最终结算”。那么这个权益证明的链就会最终死亡。(能够保证持续运行的能力被称为“活跃”特性。)
我们可以更仔细的观察一些权益证明的实施:
i) Tendermint:
Tendermint理解了上述的缺陷,在协议出现卡顿时,用户需要去带外获得共识:
“通过外部方法验证节点的子集,应该协调签署一个选择一个分叉的建议。”
诚实是值得称赞的,但是我不同意这个“解决方案”真算得上是解决方案。增加对人工干预的依赖意味着该协议的可扩展性和更容易破坏。对于设计正确地底层架构软件来说,离我们想要的稳定性,还差的很远。
ii) Casper
Casper在1/3以上权益被控制的时候,也会陷入卡顿。
Casper使用了“静止泄露”这个概念介绍这个问题,节点如果单纯是为了犯罪而离线,是需要受到惩罚的。不论你是不是故意离线,造成了损失,这不重要。这是个非常保守的规则,因为a) 这造成了新的风险,攻击者可以对诚实的验证节点进行DDOS攻击,从而让他们离线,并且造成资金损失b)这也会抑制节点,他们会因为害怕丢失资金,从而不想去拥有权益。这对于整体的安全性来说,是有消极影响的,因为对于权益证明来说,权益参与者是非常重要的。
03 权益参与者
目前,在此篇分析中,我们假设最差的情况是攻击者获得了超过1/3的供应代币控制权,这很困难但并不是不可能。但是在现实中,对于攻击者发动的条件其实低的多,因为攻击者只需要1/3的活跃权益。
所有权益持有者都加入权益和验证的过程,这显然是不太可能的。假设参与率是50%,那么攻击者就需要获得流通代币的1/6来进行对区块的攻击,而不是1/3。如果参与率是25%,那么攻击者只需要1/12。
权益参与率很低,也许对于权益证明协议来说是最大的威胁。
总结来说,私钥攻击对于权益证明协议是非常重要的问题。
- 在工作量证明中,失去对算力的控制很严重,但是这并不意味着整个系统最终会完全失效。
- 但是,如果在权益证明协议中,失去主要的控制,那么整个系统都会毫无防卫能力。