区块链:只有了解攻击,才能更有效地防御攻击
区块链是一道打开新世界的大门,它仿佛让我们看到了一个透明、公平的世界,但是殊不知这道门也面临着各种攻击,有些什么样的攻击呢?今天大白就来和大家聊聊区块链中的攻击。
01 交易延展性攻击
交易延展性攻击,也叫交易可塑性攻击。在现实生活中,我们把一块金子敲变形之后,虽然形状有所改变,但质量却没有发生变化,也就是说金子外观发生了变化但是仍然被认可,这种特性呢被称为“可锻性”。
在比特币系统中,也有一个类似的名词,“ Transaction Malleability ”。这个词通常翻译为“交易延展性”,也叫做“交易可锻性”,而利用交易延展性而造成的攻击就叫交易延展性攻击。
具体指的是比特币交易 A 发出之后,在还没有被确认之前,攻击者通过修改某些交易数据,使得一笔交易的唯一标识——交易哈希发生了改变,就形成了新的交易 B ,假如交易 B 先被记录到比特币账本中,那么交易 A 会因为双重支付问题,被验证为不合法,从而拒绝。
一个现实的例子就是:小黑从交易所发起提币,然后他提币这个交易就被广播出去了,在他这笔交易还没有被节点验证之前,小黑进行了延展性攻击,恰好攻击产生的新交易先被确认,而新交易照样会让他获得币(就像金子外观变了一样被认可),但是贪心的小黑却向交易所申诉自己并没有收到币,交易所一看之前给小黑转币的那笔交易确实被拒绝了,因此又给小黑汇了一笔币,小黑心里就美滋滋了,贪心的小黑还不满足,他又以同样的攻击方式继续多次攻击,这样就导致了交易所的资金大量流失。
所以当遇到交易无法确认时,需要立即停止,应当根据区块链上的交易报错信息以及查看是否在短时间内已经发起了这样的交易,再进行手动处理。
02 粉尘攻击
“粉尘”的意思是少量的币(比如 1 聪就是“粉尘”,它只有 0.00000001 比特币)。通常情况下,很少人的交易金额会那么少,因为交易手续费就已经超过交易金额。
正是由于“粉尘”很小所以容易被用户忽视,这一现象被小黑(诈骗者)注意到了,因此小黑就像向用户的钱包地址转入“粉尘”,而收到这些“粉尘”的用户大白并没有引起注意,这些粉尘是大白收到的,但是还没有花费出去的,所以这些“粉尘”就和大白原来钱包地址里那些收到但还没有花费的币( UTXO )混在了一起。
粉尘(蓝色)和原来收到的但未花费的货币混在了一起不过现在的问题不大,只是混在了一起而已,真正的问题是大白使用这笔未花费的费用,当傻乎乎的大白把这笔钱用来向别的地址转账或其他交易的时候,就可能会用到这些“粉尘”,这个时候“粉尘”就悄悄地随着大白的交易跑到了别的用户地址里,一直跟踪。
这些“粉尘”就像荧光剂一样,把用户大白的行为一五一十的描述了出来,进而被小黑跟踪到,小黑就利用这些线索来猜测大白的身份,进而对大白进行威胁和勒索。这就是粉尘攻击。
要怎么避免这种攻击呢?上面已经提到真正出现问题的地方在于大白用了混有“粉尘”的未花费的货币,如果大白不花费这笔费用,“粉尘”就不会跑,小黑也就无法追踪了,然而我们不能要求大白因为这些“粉尘”就永远不花费那一池子的其他未花费的货币,因此一些钱包(比如:Electron Cash )可以把这些粉尘单独标记起来,提醒大白用户们不要去使用这些粉尘,相当于把粉尘和池子里其他的未花费货币隔离开,这样大白们就可以安安心心地使用之前那些未花费的货币啦。从而有效的避免了粉尘攻击。
03 女巫攻击
女巫攻击又叫 Sybil 攻击,名字来源于电影《女巫》( Sybli ),讲的是一个有 16 种人格的女人心理治疗的故事。而在区块链中的女巫攻击呢,指的是一个恶意的节点非法地对外呈现多个身份。
这就有点像小时候我们玩的“手拉手”游戏,当新的小朋友加入我们这个游戏圈的时候,他会去牵旁边人的手,进而对旁边的人有了进一步的认识。在区块链中也是这样,任何网络节点是可以发送加入的请求消息的,收到请求消息的其他节点会立即做出响应,回复其邻居节点信息。
可是有些小朋友为了认识更多的小伙伴,就每次换一个面具,这样就可以到不同的位置去牵别的小朋友。恶意节点就像这个恶搞的小朋友,它对外伪装成多个身份,这样就可以获取大量的区块链网络节点信息,以便进一步的攻击和破坏。
解决女巫攻击的一种方法是工作量证明机制,即用计算能力去证明你是一个节点,这样极大地增加了攻击的成本。
另一个方法是身份认证,可以是基于第三方可靠节点的认证。就像在所有参加游戏的小伙伴中选出眼睛最亮的那个,这样来避免大家被搞怪小朋友的面具蒙骗。身份认证也可以是全节点制的认证。这就相当于每个小朋友都要对恶搞小朋友进行身份审核,这样就大大降低了恶搞小朋友成功伪装多个身份的几率。
04 小结
了解各种类型的攻击可以使我们更好地防御它们,从而保障自己的财产安全。今天就先聊到这儿,后期还会有日蚀攻击和 DDoS (分布式拒绝服务攻击)等类型的科普介绍,欢迎大家关注。
区块链