摘 要: 提出一种基于动态授权的信任证明机制(proof of trust,简称 PoT),并在该机制的基础上修正了现有区块生成策略中存在的诸如权益粉碎攻击和贿赂攻击等问题.PoT 将网络中的节点分为矿工节点和基本权益代表(stakeholder)节点,根据节点参与创建区块的行为赋予其相应的信任度,stakeholder 节点对区块进行签名操作并赋予区块信任度,最终根据区块所获得信任度权重竞争上链.同时,还针对贿赂攻击和常见的权益累积攻击的攻击成本以及系统对于攻击的反应进行了分析.仿真实验的结果表明,PoT 机制在应对权益粉碎攻击、贿赂攻击以及权益累积攻击方面相比于传统权益证明机制有着显著优势.
引言:
闪电网络:如果把比特币比喻成人民币,那闪电网络就是支付宝。
拒绝服务攻击:DoS(Denial of Service)的含义即让目标机器停止提供服务或资源访问。相当于在某家店客满的时候,不再接受更多的客人,后来的客人只能在外面等着。
本文分析了 PoW 机制和 POS 机制的优点和不足,提出基于信任度证明的共识机制(proof of trust,简称 PoT),旨在解决权益证明机制中存在的易受贿赂攻击、币龄累积攻击以及工作量证明机制中存在的自私挖矿问题,并对 PoT 性能以及安全性进行了测试和分析.结果表明,PoT 的效率较 PoW 有较大提高.同时,对于贿赂攻击、权益粉碎攻击以及权益累积攻击,比 PoS 有更高的防范能力.
针对比特币系统的一个可能的攻击就是自私挖矿(selfish mining),目的是获得更大利润.自私挖矿的攻击者挖到新区块后不在第一时间公布,其他诚实矿工因为不知道新区块的存在,会继续在旧区块基础上挖矿.等到攻击者挖到第 2 个区块后,便会同时公布手中藏着的两个区块,这时,区块链就出现了分叉.只要攻击者比诚实矿工多挖一枚区块,攻击者所在的分叉就是最长链.自私挖矿的攻击者只需要拥有全网 1/3 的算力,就可以保证自己获得更多的收益,相比 51%攻击,自私挖矿显得更容易.作为矿工,在比特币规则中一般都会采用有利于自己
的自私挖矿策略.事实上, 当有节点拥有超过 25%算力的时候,比特币的安全性就不能简单地以 51%为阈值来考虑 ,因为不能保证此时所有的矿工都遵守规则.但是在本文提出的 PoT 机制中,产生区块不需要投入过多的算力资源,这种攻击反而变得没有效率.
币龄: 币龄=币天 * 币数, 小张从小李那收回10个比特币,保存了30天,则币龄为300。
权益证明的核心思想是产生区块的难度与节点在网络中所占权益成反比,即:所持权益越多,越容易产生区块.这是一种效率更高的共识算法,使区块链无需高昂的硬件和电力挖矿成本就能正常运行.
权益证明主要有两大类:一种是基于链的权益证明,其模仿工作量证明机制,随机地为权益人(stakeholder)分配创建区块的权力,典型的有 PPCoin、黑币(blackcoin)、活动链(CoA)、DPoS和 PoA;另一种是基于拜占庭容错的权益证明,在该机制中,只要有超过 2/3 的节点遵循协议,无论网络延时如何,协议都可以正常运行,典型的有 Tendermint和 Casper。
在基于链的权益证明机制的虚拟币 PPCoin,Clockcoin和 Novacoin中,区块的创建是通过消耗币龄(coin age)来完成的.该协议被诟病的地方就在于:即使节点没有连接到网络,币龄也会增加.当前的系统事实上鼓励节点滥用这一机制,它们平时保持离线,只在累积了可观的币龄以后才连线以获得利息,然后再关闭连接.
攻击者可以利用这一点,当其所持权益足够大时,对区块链进行分叉并达成双花.区块生成后,币龄就会归零,攻击者必须再次累积币龄才能继攻击.VeriCoin使用基于币龄的权益时间(stake time)来对节点所持权益进行度量,并且当节点不再参与共识时,其权益时间就开始衰减.Ouroboros使用了一种新的奖励机制来增加对节点诚实行为的奖励,同时还使用了安全多方计算来保持节点中领导者的不可预测性,但是这种方法需要网络中验证节点之间的协调.
文献[24]基于可信执行环境(trust execution environments)提出了共识机制 proof of luck,该机制运行在支持SGX 的 CPU 上,用来抵御挖矿对于能源的消耗,但是算法的执行依赖于 Intel 的特制 CPU,违背了区块链的去中心化思想.
文献[25]尝试用一种空间证明(proof of space) 的概念来取代 PoW,并且已经在区块链的框架背景下进行了专门研究.在空间证明中,证明者希望运用计算机存储资源代替 PoW 中的算力资源进行证明.空间证明虽然利用了一定的硬件资源,但是随着时间的推移,对硬件资源的消耗量会减少.
类似地,文献[26]也提出了时空证明(proof of space-time)算法,但无论是空间证明还是时空证明都需要昂贵的硬件资源,到最后都会出现硬件资源集中化的现象.
文献[27]提出了一种有趣的燃烧货币机制 PoB(proof of burn),该算法通过将代币转移到不可逆转的地址上以销毁代币,节点燃烧的代币量与被选中挖到下一个块的概率成正比.在 PoB中,随着时间的推移,节点在系统中所持的份额可能会减少,这会驱动节点燃烧货币来获取更多的挖矿机会.这种机制虽然是一个不错的尝试,但是造成了代币资源的浪费,并且挖矿的能力会逐渐被那些掌握更多资源并且愿意燃烧代币的人所掌控.
文献[28]提出了一个重要性证明(proof of importance)算法,该算法运行时,节点需要提供自己的重要性才能获取出块权.在重要性证明下,节点所持权益不再是重要性的主要因素,取而代之的是节点的交易量以及交易双方的关系.在重要性证明中,根据钱包的交易次数和货币资产来评估节点的重要性.但是该协议可能会鼓励节点之间相互串通互刷交易量,同时,大资产节点的频繁交易也会造成重要性中心化的问题.
公有链假定所有节点都是不可信的,产生区块的策略主要有两种:基于算力的 PoW 机制和基于权益的 PoS机制.在 PoS 中,每个节点的可信度与它本身所持的资源(比如加密货币数量)呈正相关,这就决定了该节点在网络中所占的权重(以票数计).这种机制会带来许多严重后果,最直接的就是权益粉碎攻击.PoS 的一大优势就是所持权益越多者越愿意维护系统,反之,所持权益越少责任也就越少.假设矿工只有 1%的权益,其成功的概率只有 1%,那么该节点可以尽可能尝试分叉,因为在 PoS 中分叉并不消耗任何资源.在比特币系统采用的 PoW机制中,创建分叉得不偿失,因为必须为此付出大量算力资源.目前,比特币网络每 10 分钟产生一个区块并奖励12.5 个比特币,即使耗费大量电力,挖矿仍然是一件有利可图的事情,但是每产生 21 万个区块后,收益会减半.当收益不足以维持挖矿所耗费的电力成本时,矿工们就不再有足够的动机去维持区块链的一致性.这就是经济学领域所说的公地悲剧.中本聪预见到这个事情的发生,提出了交易费率的解决办法.但是在公地悲剧中,参与者有机会自行其是,以牺牲他人的代价来实现自己的利益最大化,所以希望其他节点支付相应费用.每一个理性的矿工总是会采取这样的行动,因为它只寻求自身最优解.如果网络中每一个个体都表现得很自私,那么整个网络环境安全性的下降就在所难免.
迄今为止,权益证明仍然是对区块链公地悲剧的唯一解决方案.为了避免公地悲剧以及权益粉碎攻击带来的网络安全问题,本文提出了基于信任度证明的 PoT 共识机制.由于采用 PoW 共识的区块链网络因其计算上的难度而不易受到攻击,因此,PoT 中引入了少部分的工作量证明以避免权益粉碎攻击.有别于工作量证明机制中的低吞吐量和巨大的资源耗费,以及纯权益证明机制中币龄累积所造成的权益中心化和易受权益粉碎攻击, PoT 旨在建立一个高吞吐量、安全和低资源消耗的去中心化区块链网络.
PoT 的运行从时间上被划分为一系列周期(epoch),每一个 epoch 又被划分为多个时隙(slot),一个 slot 内产生一个区块,权益的计算以每个 epoch 开始前的历史计算.在每个 epoch 开始时,矿工节点都会计算生成一个满足当前难度的空区块,通过这个空区块衍生出一组参与者(participants)集合{P1,P2,P3,…,PT},然后,每个 slot 均从这些 Participants 集合中随机选取 N 个节点作为基本权益代表(stakeholder),这些代表用集合{S1,S2,S3,S4,…,SN}表 示,这里 N
传统双花攻击场景如下.
(1) 攻击者发起一个之后会被他自己撤销的一个交易;
(2) 在该交易之后,攻击者在该交易所在区块之前的那个区块上开始建立侧链;
(3) 当新交易进入区块并且获得了足够的确认数目(6 个区块)且攻击者的侧链长度超过主链时,攻击者的侧链就成为了主链,攻击者发起的第 1 笔交易被判定为无效,双花攻击成功.
要想成功地进行双花攻击,攻击者必须在整个攻击过程中控制超过 50%的网络资源(PoW 算力、PoS 权益).相对于控制 51%的算力,控制 51%的流通代币是非常困难的.但是这并不意味着在权益证明中就无法展开攻击,攻击者可以提供报酬给那些愿意在他指定的区块上铸造新区块的节点.如果攻击失败,参加攻击的用户并不会遭受太多损失.对于攻击者而言,只要贿赂的金额小于商品交易价格,那么总是有利可图的.
在 PoT 中,如果要进行贿赂攻击是不可行的,因为每次生成区块的 stakeholder 都不相同,并且在区块产生之前 stakeholder 是不确定的.一旦被发现参与恶意投票,对于信任度的惩罚是极高的,而且只有第 N 个 stakeholder具有对交易进行打包的权力.除非攻击者提前找到第 N 个 stakeholder,一旦 stakeholderN 对无效交易进行打包操作,就将受到信任度惩罚.因惩罚系数γ的存在,高昂的信任度惩罚对其来说是不可承受的.证明过程见公式(10)~公式(12).
公式(10)是节点 i 诚实参与共识所获取的信任度,公式(11)是节点 i 在诚实投票之后进行恶意投票被系统识别后更新的信任度,公式(12)是节点 i 诚实投票后进行恶意投票的信任度与之前诚实投票的信任度所占比例.
参与共识一次之后,恶意攻击者进行恶意投票被系统识别后的信任度只有之前的 36%.并且这种信任度惩罚会随着轮数以及时间的递增而快速上升,α越大,惩罚越重.这种惩罚力度的存在,对任何理性节点都是难以接受的.
币龄累积攻击: 这种攻击主要针对“POW+POS”混合共识机制的区块链,在这种共识之下,挖到区块的可能性不仅与当前的算力有关,同时也与你账户上持有的币的数量和每个币的持币时间相关。你拥有的币越多,持币时间越长,对于你来说挖矿的算力难度就越低,越有可能挖到区块。这就导致,部分节点买入一定数量币后,持有足够长时间后,就有能力利用币龄的增加,近乎的达到51%的算力,从而控制整个网络。
权益粉碎攻击是针对 PoS 特有的攻击方式,其具体场景如下:在运行 PoS 协议的网络中,如果某个节点所持权益很低(比如 1%),那么它成功生成区块的概率也就是 1%.任何一个理性的节点都愿意去尝试分叉,因为在纯PoS 协议中,分叉不需要消耗任何资源,唯一消耗的就是币龄.如果该区块没有被接受,则币龄也不会消耗.尽管这样会造成整个网络的加密货币价值降低,但是因为该节点所占权益很少,所以它们并不在乎.
放在POW里,创建这个分支完全得不偿失因为你浪费了大量的算力。然而在POS里,如果这个分支不被接收,实际上你什么都没损失。
于是,即便是诚实的矿工也可能回去偷偷地进行这种分叉尝试。尽管他们知道这种尝试会造成整个币的价值降低,但是他们的钱很少,他们并不在乎,这就是所谓的平凡人悲剧(tragedy of the commons)。
在 PoT 中,只有随机生成的 N 个 stakeholder 有权利扩展区块链,矿工只负责生成区块供 stakeholder 进行签名,并没有决定权.在制定决策时就很清楚,不会有二义性,具有很强的治理能力.正常情况下是不会经历任何分叉,因为 N 个stakeholder 是合作生产区块而不是竞争.