如何防止可能想要更改/删除DHT数据的恶意DHT客户端?

tho*_*iha 3 distributed dht distributed-database

好吧,让我们说我有一个DHT运行10个客户端,其中包含大量数据.

恶意客户端运行我的程序的备用版本是否相对容易,这可能会对我的数据执行潜在的破坏性操作(例如替换密钥,删除密钥,更改数据,删除整个DHT等等). ..)

我该如何防止这种情况发生?

我只能想到:

  • 校验和验证程序,只允许那些连接.但这会被黑客攻击吗?

  • 使用某种密钥验证每个DHT客户端.

有谁知道如何防止这种情况?提前致谢.

the*_*472 5

不要尝试验证运行DHT节点本身的软件,只需根据需要验证它们提供的行为和数据.

有几种方法可以做到这一点,具体取决于数据的预期用途.在不知道DHT的确切用例的情况下,我只能提供一些通用指南:

  • 如果您对DHT本身之外的数据有一些信任锚(例如,用户A向用户B提供包含pubkey的链接),则使用该签名,然后将其合并到您的协议设计中,例如从pubkey派生DHT查找键,使用它可以验证数据的签名,使伪造成为不可能,等等.
    • 在某些情况下,使用椭圆曲线加密可能很有用 node ID == node's pubkey
  • 使用冗余,发布到多个节点.你应该这样做,因为节点可以脱机/变得无法访问
  • 另一种形式的冗余:非对称API,其中每个发起者发布单个值,但目标节点返回已存储在其上的值列表,可能包含原始节点的IP.
  • 首先减少攻击者腐败DHT的动机:
    • 协作发布 - 如果网络中的多个参与者有兴趣发布相同的数据块,那么攻击者将更难与他们竞争
    • 易于重新生成的数据 - 如果某人需要一小部分密钥空间,只需重新发布数据,那么发布者的任务就是将内容保留在DHT中,不要依赖于其他节点永远维护它
    • 间接/数据只是一个指针 - 如果DHT本身不包含任何"多汁"数据,攻击者可能想要删除/替换,但只是指向实际数据的指针,并且该指针很容易被另一个指针替换掉变得不那么有用来攻击它
    • 抗污染数据 - 在20个不良条目下的1个良好条目仍应有用)
    • 保持复杂性低 - 跨越多个DHT节点/间接查找的脆弱数据结构比存储在数十个节点上的单个,几个字节长的字符串更容易破解
    • 提供一种在更高协议级别验证数据的方法 - 将从DHT获得的所有内容视为暂定的
  • 让攻击者很难控制DHT键空间的一小部分
    • 路由表中每个IP只有1个条目
    • <key,List<value>>表中每个键每个IP只有1个条目
    • 通过从节点的外部IP和/或使用hashcash派生节点ID来限制节点ID
    • 使用UDP时:需要3次握手进行写操作,以避免IP欺骗

一般情况下:将所有节点视为不可靠,错误并且其中一些(但不是全部)是恶意的.
信任但要验证.