PoS(Proof of Stake)本质上是一种持有一定币量而获得挖矿资格和收益的共识协议,在最初 Proof of Stake 2013年被提出来后, Nothing At Stake (无利害关系)的问题和 Long-Range Attack(长程攻击)问题是经常被谈论的 Proof of Stake 共识协议的挑战。
想更深入了解 PoS?知道是什么,还需要了解为什么。
今天我们先来看看 Nothing At Stake problem (无利害关系)。
Nothing At Stake, a situation where someone loses nothing when behaving badly, but stands to gain everything.
Nothing At Stake 问题的本质是 “作恶无成本,好处无限多”。
具体来讲,是当在 PoS 共识系统出现分叉 (fork) 的情况时 ,出块节点可以在”不受任何损失“的前提下,同时为多条链出块,从而有可能获得“所有收益”。
这会造成什么乱象呢?
聪明的出块节点会有动力产生新的分叉,支持或发起不合法交易,其他逐利的出块节点会同时在多条链(窗口)上排队出块支持新的分叉。随着时间的推移,分叉越来越多,非法交易,作恶猖狂。区块链将不再是唯一链,所有出块节点没有办法达成共识。
另外,无利害关系问题还让双花攻击更容易。不像 PoW 51% 的攻击那样,PoS 的攻击节点只需要多一定的算力 (有时候仅仅1% )就有可以进行攻击。
有多容易呢?如下图所示,仍然是 A、B、C 三个出块节点,假如 A是攻击节点,它在产生分叉时创造两笔交易。一笔将X个币发给自己的一个钱包地址,同时在另外一个分叉上将X个币发到交易所。B、C出块节点因 Nothing At Stake 所以同时会在两条分叉链上出块。当交易被交易所确认后, A 将 X 个币出售兑换成隐私币种,移出交易所。之后 A 通过增加质押币量,或创建多个其他出块节点的方式提升出块权重,只在分叉链继续出块。此时最长链很明显,且逐渐拉开差距,会最终成为最长链,A 成功将 X 个币双花。
为什么 Nothing At Stake 问题仅仅是 PoS 的挑战? PoW难道不会有吗?
PoW机制天生避免了这个问题因为在出块时,矿工会付出机会成本 — 算力资源。如果分叉出现, 矿工需要慎重的选择在哪条链上出块,一旦选错,付出的算力成本则没有收益。
矿工也不会选择在两条链上均分算力,这样只会将原链的出块概率缩小一半,可能得不偿失。
一般的策略都是后置惩罚,既如果被判为恶意出块行为,则会将 stake 的一部分或保证金作为罚金。然而,所有的惩罚和监管措施都只是事后,而不像 PoW需算力出块的隐形约束直接。
我们来看看 Tezos 是怎样使用惩罚机制来避免 Nothing At Stake 问题的:在 Tezos 链上参与挖矿需要保证金,这部分保证金就是用来保证“面包师” (baker)的诚实行为,如果面包师试图在两个分支上广播区块,那么他的保证金将被没收。如果面包师成功创建和广播了合法区块,他将获得区块奖励和交易手续费。这种机制用金钱奖惩来避免双挖矿问题,节点的安全由面包师自行维护。
除了后置惩罚,至今的解决方案,都是要牺牲一定程度的性能、去中心化原则,合约机制的设计也更复杂。
在 PoS 中,节点的角色和职责众多:除了和PoW中类似的出块节点 (Miner), 还有验证节点(Validator) 为区块背书 ,守护猎人(State Guardian) 抓“坏人”。
守护猎人的 stake 有一定的锁定期,一般是需要X个区块之后才可以拿到质押的币,这样可以给守护猎人足够时间来抓住非法节点。
此外,虽然项目方可以通过前置节点筛选选择信任的节点,但是中心化的问题依然不可避免:
在一个公有链中,一个攻击者如果拥有当下足够多的算力或股权,无疑是可以打破公有链安全性完成攻击的。但是在 PoS 公链中,如果攻击者获得了一些账户的私钥,这些私钥在历史上某一时刻控制了超过51%的股权,也可以完成攻击,这种攻击的方式被称为长程攻击(Long Range Attack)。
在长程攻击中,攻击者首先获得一些私钥,只要这些私钥在历史上曾经获得了足够多的股权,便可以从这一时刻开始分叉进行 51% 攻击,制造一条分叉链出来。而 PoS 的出块不需要进行工作量证明,攻击者可以短时间内让重写历史的分叉链追赶上原本的主链,从而造成PoS链的分叉和防篡改性被打破。
如果PoS公链的早期投资人在二级市场将持有的代币卖掉后,将账户私钥卖给攻击者,攻击者就可以从创世块进行长链攻击,从而可以打破一个链的安全性。如果一些投资者追求短期收益而非价值投资,攻击者从他们手里获得私钥就成为了一个可能的事情。
而为了应对长程攻击,则有各种各样的解决方案被提出:
例如使用密钥演化算法更新密钥,以避免密钥被盗。但是如果早期投资者一开始就决定通过出售私钥获利,那么他完全可以保留密钥种子以绕开这一限制。还有一些解决方案基于这样一个事实:如果攻击者挖了一条完全不同的链,长期在系统中运行的节点或许有能力探测出这种异常。但是,这些方案依然存在如下问题:
PoS 长程攻击造成的分叉与 PoW 的分叉有所不同。
PoW 的分叉链难以获得比特币全网算力,比特币矿工很容易从总算力中辨别谁是真正的比特币。
鉴于PoS共识协议在实际运行时,绝大多数股权持有者只是区块链的使用者,并不会一直运行一台服务器。攻击者只要在一个历史节点拥有了相当与PoS实际参与者的股权比例,就可以制造出一条难以辨别的分叉链出来。配合女巫攻击(Sybil Attack),攻击者可以从区块历史和节点数量上都获得和被攻击主链接近的水平,令新加入的节点无法区分,只能通过人工指定的方式选择。
这样新参与者必须咨询受信任节点来安全地加入系统,这一问题被称为“主观依赖”(Weak Subjectivity)