前言
开放且去中心化的DHT早在区块链问世前就已蔚为风行,然而网路世界上并不存在完美无暇的协定,DHT也不免有一些设计缺陷。在这篇文章中,笔者将延伸前文来说明DHT的若干弱点以及可能的对策。
关于纸条协定的补充
接续前文的纸条协定:
纸条协定
1.纸条正面需须标注目标T,纸条背面须标注请求
2. S与T的距离为其二人座位的直线距离
3. T的邻员都知道T的小考分数
4. S只知道坐在S邻员的座号并写在邻员名单中
5. S只能传纸条给在S邻员名单中的R且R与T的距离须小于S与T的距离
查询
在上课时传纸条给X号同学,问他的小考分数
然而以上的叙述并未说明一个关键的环节:发起查询的人要如何得知目标的座号(键值)?在这里,我们必须使用座位表来得知目标的座号:
座位表
1.座位表是座号与位置的对照表
2.座位表是得知座号的唯一方式
3.座位表需不停地在所有人之间流传
4.全班只有一份座位表
座位表其实就是DHT的索引表,也就是键值的列表,它可以让节点掌握DHT上可查询内容的键值。为什么需要索引表?这是由于在最初只有在DHT写入内容的节点知道该内容的键值,其他节点只能透过索引表获得DHT全局的概观,这对档案分享类的应用(例如BitTorrent)尤其重要。
针对DHT的攻击手法
接下来,笔者将继续延续纸条协定来简述这些攻击的精要。许多文献都曾探讨过针对DHT的攻击手法,它们大致可以总结成7种。我们假设攻击者是一个具有破坏意图的个体,暂且称呼其为E;而受害者可能是单个或多个个体,我们称呼其为V:
女巫攻击(Sybil Attack):很多E的同伙加入班级,E一个人支配了全班。
在DHT中,能代表节点「身份」的只有节点编号,然而节点编号过于单薄且易于修改,因此攻击者可以大量制造虚假的身份潜入并进而控制整个网路。身份是一个难解的问题,在当今的网路协定我们只能倚赖少数的权威(例如政府或网路服务商)提供对身份的认证,这显然不是去中心化且注重隐私的做法。
日蚀攻击(Eclipse Attack):E串通了V的邻员,使V被孤立,且E能得知V所有纸条的内容。
由于节点编号可以被自由更动,因此攻击者可以选定特定受害者并修改攻击节点的编号使其与受害者距离接近,如此受害者的路由表内就会被攻击者的节点占据。一旦受害者被「隔离」在攻击者的网路内部,攻击者就可以阻断、监控、甚至窜改受害者的查询讯息。
扰动攻击(Churn Attack):E在上课途中经常进出教室,让V查不到分数,且影响V讯息接力的效率。
由于加入/退出DHT几乎不需要耗费任何资源,攻击者可以频繁地进出网路,使邻近节点疲于更新路由表,造成网路阻塞及离线资源无法取得。尤其在Chord缺乏冗余(路由表在每个区间只对应一个节点)与路由更新流程相当繁琐(需要4个步骤)的条件下,其对扰动攻击更是无法抵抗。
敌对路由(Adversarial RouTIng):E乱传V的纸条。
在DHT开放的环境下,参与者的行为是不可预期的,攻击者可以无视路由表而将讯息接力给攻击者的隔离网路或直接拒绝处理,这种攻击对于缺乏冗余的Chord来说相当棘手。一个运作良好的开放分散式系统需奠基于参与者的正常行为;而一个设计良好的开放分散式系统则要能确保系统运作良好,意即其能奖励正常行为及惩罚随机行为或者能约束随机行为的发生。在这样的定义之下,缺乏奖惩机制与约束机制的DHT并不是一个设计良好的开放分散式系统。
污染攻击(PolluTIon Attack):E窜改自己的分数,使V拿到错误的分数。
污染攻击与敌对路由手法同样地简单而暴力:攻击者直接回传错误的结果使查询失败,对缺乏冗余的Chord也同样很棘手。尽管只需比对内容的杂凑值与键值就能检查内容是否受到污染,然而具足够规模的污染仍能瘫痪整个网路。
索引投毒(Index Poisoning):E在座位表传到自己时,窜改V的座号。
DHT必须透过索引表来获得对全局的概观,而索引表通常由第三方服务进行管理(例如BitTorrent的种子网站),这些服务对档案分享类的应用至关重要。然而,第三方服务无法阻止攻击者对DHT大量注入无意义甚至有害的资源(例如木马程式)污染索引表。这些有害资源伪装成有意义的资源(你知道的)以引诱使用者下载,且攻击者自身几乎不需要负担任何成本(不占用自身频宽)。
服务阻断(Denial of Service):E不停地传纸条,让V没空传其他人的纸条。
服务阻断就是攻击者透过各种手段耗竭服务提供者有限的资源导致其无法再提供任何服务,以达成瘫痪服务的目的。由于任何协定都受限于网路频宽与运算资源,因此对DHT只需发起大量查询令节点疲于应付,便能使其资源耗竭(记忆体/硬碟空间/频宽等)。尽管DHT具有去中心化与规模化的特性,在体质上对服务阻断有较高的抗性,但仍无法幸免于具足够规模的服务阻断。
对弱点的解决对策
上述的攻击情境可以总结出几个主要弱点:
1. 可以随意进出教室(加入/退出网路的成本极低)
2. 可以不断地传纸条询问分数(服务请求成本极低)
3. 缺乏做好事的动机(缺乏奖惩机制)
4. 缺乏对随机行为的约束(缺乏共识机制)
5. 可以轻易形成多数(身份单薄易于制造)
事实上,这些并非DHT独有的问题 — 几乎所有开放分散式系统都必须处理这些问题。对DHT来说,这些方案的对策大多很直观:
针对第1点的对策是让进出教室的成本提高,例如S/Kademlia就是其中一种应用此对策的改进方案:要先交作业才能进教室且每次进教室的座号不同,跟作业成绩有关。
针对第2点的对策是使用者付费,让询问分数者需支付手续费(或其他稀缺资源);针对第3点的对策是让表现好的记功、表现不好的记过,而记功多的可以参与更多讯息接力,获得更多利益;记过多的则会逐渐被排除于网路外,失去参与资格。
针对第4点的对策是每个人在行动前需经所有人投票表决,投票者可以检验个别行为是否符合规则,用多数行动(Majority AcTIon)来取得对个别行动的共识(Consensus)以借此约束随机行为。Robust CommunicaTIon Protocol即采取这种策略:每个人要传纸条前需与自己的左右邻员投票表决。
针对第5点,除了使用权威认可的身份之外,其中一个可能的方案是去中心化身份(Decentralized Identity),自从区块链问世后这个领域被再度重视。
DHT上能发行加密货币吗?
当然可以,然而此货币之安全性是堪忧的,因为一个稳定可靠的货币必须奠基于其对随机行为的抗性,这种抗性称为拜占庭容错(Byzantine Fault Tolerance),这也是区块链一个重要的性质。
具备共识机制的DHT是一个值得探索的改进方案。有趣的是,这样的改进方案被视为是一种区块链分片(Sharding):各分片维护自己的共识,不同分片之间透过基于键值的路由(Key-based Routing)来削减对主链的依赖。
Holochain是一个基于DHT的去中心化应用程式平台(Dapp Platform),它对货币则持有不同的看法:货币也可以是一种只存在于交易双方之间的相互信用(Mutual Credit),这是一个很有趣的观点,然而这并未解决DHT的根本缺陷。
结语
DHT除了逐渐被视为区块链分片的一种思路,也开始在一些区块链专案中成为负责资料储存的基础建设。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)