我正在实现一个处理 udp 数据包的网络服务器。我想避免重放攻击,攻击者可以复制 udp 数据包,然后及时重放它们。我想知道我可以对数据包进行哈希处理并将该值存储在哈希表中。然后,每次收到数据包时,我都可以执行相同的过程,然后在哈希表中查找它。如果它已经存在,那么我们拒绝该数据包,但是如果我们从未见过它(该条目不存在),我们将存储它以供将来使用。
现在,什么哈希算法适合这个?除了哈希表之外我还需要其他东西吗?由于收到了很多 udp 数据包,我希望它能在 O(1) 内工作!!!!!! ;-),这可能吗?
显然,我“记住”哈希值的时间越长,我需要分配的存储(状态)就越多,哈希表可以随着时间的推移动态增长和收缩吗?
我可能离这里很远,我可能根本不需要哈希表!我对想法持开放态度!
最佳答案
您可以控制数据包的内容吗?如果是这样,请向内容添加哈希并使用它 - 这会将哈希工作转移给发件人。您还可以包括一个有效期,以便 a) 您知道您可以在该时间之后丢弃数据包的任何记录,b) 攻击者存储的数据包在该时间之后变得无用。您可能希望以某种方式对时间戳进行加密,以便攻击者不能只更新时间戳。
其他技术可以在Wikipedia上找到
关于security - 用于跟踪网络数据包的优化算法(防止重放攻击),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4315965/