最近一段时间,“比特币”投资频繁的出现个各个媒体平台,跌涨犹如过山车一般,我们在分析了原理、理清了资源后,仔细分析实际使用的比特币就会发现,其通信和数据管理的细微之处存在巨大的安全隐患。
一
比特币背后的区块链技术使用加密科技,防止系统被篡改。不过,比特币作为一种加密货币,单单具备防篡改性明显是不够的。如何抵御攻击,避免双重支付,防止交易记录自相矛盾而导致服务失常,则需要从多种角度进行安全论证。
相较而言,比特币使用区块链技术的时间最为久远。从2009年至今,除了程序漏洞以外,比特币还没有发生过系统停止或数据回滚(rollback)的情况。但是一些论文指出,由于比特币的协议设计和运行问题,很有可能出现不当支付、数据篡改、系统停止等问题。
比特币究竟具有怎样的脆弱性,有没有方案可以修正,区块链的安全性又如何评价呢?下面我们就一起了解一下和区块链安全性相关的4项理论成果。
微小算力攻击庞大区块链——“Selfishmining(自私挖矿)”
比特币采用了共识算法——“工作证明”,一般来说,只要恶性节点的算力达不到全体的50%,就无法控制区块链。令人意外的是,即使算力低于50%,恶性节点也可以“蚍蜉撼树”,控制区块链的生成,这种方式就是“Selfish mining(自私挖矿)”。
按照正常方式挖矿,比特币的产生频率与节点的计算力量存在比例关系。然而利用Selfish mining策略,最终结果将远超拥有的计算资源。理论上来说,只要拥有整体41%的算力,控制区块链产生的概率就高达50%以上。
Selfishmining的节点发现新的区块后,并不马上公开广播,而是隐藏区块的存在。这样在其他节点还在寻找原来区块的时候,他们已经可以挖掘下一块了。如果运气好发现新区块,这时再广播前一个区块的存在。
在其他人努力挖矿时,Selfishmining节点则不断找寻新区块,这样,他们拥有的链条也越来越长(图8-1)。
图8-1Selfish mining
攻击者采取这一战略并且拥有整体33%以上的计算力量,实质生成的区块就远超这一数字,也就是说,持有41%资源的节点能以50%以上的概率生成区块。
目前,我们还没有应对Selfishmining的良策。我们一定要认识到,控制区块链完全不需要拥有过半的算力,更低的数值完全可行。
“Fast payment(快速支付)”的比特币双重支付问题和对策
比特币的交易信息(transaction)被记录在区块中,比特币的支付需要获得比特币网络(区块链)的批准。根据系统要求,从发送交易记录到获得许可平均需要10分钟。
此外,系统为了确认区块的正当性,批准交易后,交易者还需要至少等待5个区块连接。正常情况下,从交易完成到确认完毕要花费大约1小时。
正常消费时,别说1小时,顾客可能连10分钟也不愿意等待,所以在一般交易时系统多采用“Fast payment(快速支付)”的方式。店方确认交易信息,验证数字签名后,并不会确认有无双重支付,直接默认支付已经完成。
针对Fast payment的缺陷,我们一起来了解一下具体攻击方式。
支付方在Fastpayment的店铺使用比特币(UTXO)付款(汇款),同时向另一账户(同伴的账户或自己的其他账户)汇款同等金额,这样店方确认的交易信息就失效了。既获得了物品或服务,又没有消耗比特币,这就是“双重支付攻击”的一种表现。因为该种攻击正好利用了比特币的交易传输协议漏洞,因此其成功率非常高。
攻击成立需要两个前提。一是攻击者(支付方)可以直接向商店发送交易,二是由“辅助节点(helper node)”辅助攻击。
假设攻击者的交易信息为“Tv”,同时向辅助节点发送“Ta”交易请求。辅助节点排除店铺周围节点群的范畴,直接向其他节点发送信息,“Ta”后来居上,更早扩散。收到“Ta”信息的节点接收交易“Tv”后,将其视为不当交易而取消,自然“Tv”也就不会被广播。
相比交易“Tv”,后发起的“Ta”存储在区块中的概率更高,“Tv”交易无效(图8-2)。
图8-2 辅助节点的双重支付供给
这种攻击的可怕之处在于,其不仅使店家蒙受损失,对于其他节点来说,他们根本无法发现不当行为。
现行的比特币体系中,同时接收“Ta”“Tv”的节点数量十分有限。先接收“Ta”,则“Tv”失效;先接收“Tv”,则“Ta”失效,不会扩散到其他节点,所以大部分节点无法获得双重支付的证据。
不当交易是证明账户非法的有力证据,希望可以广为告知,将其用于评价管理之中。“Bitcoin - XT(比特币核心开发者加文·安德烈森开发,用于提高区块扩展性)”就公开双重支付的信息,修正评价管理方法,对账户所有者进行评论。
如果所有信息都以接力的方式上传,网络承担大量信息,这就是“DoS(拒绝服务)”攻击,可能导致系统瘫痪。Bitcoin-XT限定单个UTXO只能交易两次,就是为了规避这种风险。
因为矿工意见不同,Bitcoin-XT还无法扩大区块,也没有被纳入比特币体系之中。因此,Fastpayment店铺结算时,店方不得不承担这种双重支付风险。
二.比特币的DoS攻击和对策
有报告称,恶意使用了比特币的交易和区块协议,可以在特定节点延迟信息的传播,继而拖慢系统的信息传递,甚至可能导致系统停止,或者出现双重支付等不当行为。
比特币传递交易和区块信息时,首先传递的并不是数据信息,而是名为“清单信息(Inventory Message)”的哈希值。节点收到信息,如果哈希值未知,则会向原节点请求数据信息,继而完成信息传播(图8-3)。如果有人恶意使用清单消息,很可能造成信息传播的延迟。
攻击方法存在于区块和交易传输协议之间(图8-4)。
图8-3 节点间的信息传递
图8-4 信息传递延迟的原理
攻击节点向目标节点发送消息,对于节点区块头、区块数据的要求,攻击节点只回复“ping”,在超时之前的20分钟内,攻击节点尽情占有目标节点的功能,延迟区块的传播。比特币连接的上限是126,而通常只使用20个左右,攻击节点依此占据目标节点的空闲资源,甚至连续抢夺资源。
攻击节点利用交易节点的传输漏洞,发送清单消息后,同样只回复“ping”,直到超时(两分钟)为止,从而大大延迟交易信息的传输。而且清单消息由队列管理,只要占领队列,超时之后,攻击者还可以控制信息传送,甚至可以拒绝传递任意时间点的交易信息。
如果与其他攻击并用,该种攻击的效果将成倍增强,这也是延迟传递的可怕之处。
如果与自私挖矿并用,攻击者就可以用极少的算力控制整个区块链。有观点认为,只要拥有不少于34%的资源,就可以控制50%以上的区块,进而支配区块链。
另外,这种传递可以无限期滞后,攻击者还可能发起双重支付攻击。如果攻击者攻击所有节点,比特币的服务将陷入全面瘫痪。而攻击所需的计算机能力并不严苛,只要每20分钟能发送600千字节即可。
针对以上问题,比特币开发者也在考虑对策,以应对攻击,比如放弃清单信息,改向区块头发送信息,改变既有协议;用IP地址过滤信息发送者;通过随机选择的方法管理发送方……前项对策(BIP 130)已经写入Bitcoin 0.12.0版本。
区块链安全性评价成果备受期待
对很多加密协议来说,虽然协议安全理论上有保证,但受安装和运行环境的影响,还是有可能陷入危险。相比之下,比特币属于前一阶段,其满足何种条件才算是安全的,具体的标准还在研究当中。下面我们就从工作量证明(Proof of work:POW)的区块链入手,介绍解析协议的研究成果。
严格来讲,论文中提及的哈希链与比特币哈希链的构成方法并不相同,评价区块链时,可以从“Common Prefix(共有前缀) property”和“Chain Quality(链质量) property”两方面入手,分析“POW的成功概率”,意义深远。
POW 型的区块链中,假设遵守协议的诚实(honest) 矿工成功概率为α,不遵守协议的矿工成功概率为β,人们已经清楚α和β的数值各为多少。论文认为,人们可以具体评估在满足某种条件后区块链不进行分叉的概率(Common Prefix property)和诚实矿工所生成区块进入区块链的概率(Chain Quality property)。也就是说,不遵守协议者成功生成区块这类情况对区块链所产生的影响程度可以量化。
有趣的是,自私挖矿的情况下,不遵守协议矿工的成功概率β可能高于1/3,而ChainQuality property也处于较低水平。这个结果看起来理所当然,其实这是数理模型证明的巨大突破。
我们在分析了原理、理清了资源后,仔细分析实际使用的比特币就会发现,其通信和数据管理的细微之处存在巨大的安全隐患。笔者希望今后有更多的研究着眼于区块链的脆弱性和安全性,构筑更为严密的协议体系。