用于跟踪网络数据包的优化算法(重放攻击预防)

时间:2010-11-30 16:24:45

标签: security network-programming udp replay

我正在实现一个处理udp数据包的网络服务器。我想避免重放攻击,攻击者可以复制udp数据包,并在以后重播它们。我的想法是,我可以散列数据包并将此值存储在哈希表中。然后,我可以在每次收到数据包时执行相同的过程,然后在哈希表中查找。如果它已经存在,那么我们拒绝该数据包,但是如果我们从未见过它(该条目不存在),我们将其存储以备将来使用。

现在,什么哈希算法适合这个?我需要哈希表以外的东西吗?由于收到了很多udp数据包,我想让它在O(1)中工作!!!!!! ;-),这可能吗?

显然,我记得'哈希值越长,我需要分配的存储(状态)越多,哈希表能否随着时间的推移而动态增长和缩小?

我可能离开这里,我可能根本不需要哈希表!我对这个想法很开心!!

2 个答案:

答案 0 :(得分:3)

您是否可以控制数据包的内容?如果是这样,请向内容添加一个哈希并使用它 - 这会将哈希工作移动到发件人。您还可以包括有效期,以便a)您知道在此之后可以丢弃任何数据包记录,并且b)攻击者存储的数据包在此之后变得无用。您可能希望以某种方式加密时间戳,以便攻击者不能只更新时间戳。

其他技巧可以在Wikipedia

找到

答案 1 :(得分:1)

对数据包使用哈希表可能很昂贵,因为您必须重新散列哈希表,即O(n)。

在这种情况下,您应该协商服务器和每个客户端之间的共享密钥。然后使用该秘密密钥K来构造Message Authentication Code。正在验证的消息应该是您在UDP数据包中传输的数据以及时间戳。序列ID是不利的,因为无法保证UDP数据包完全到达,并且数据包可能无序到达。

应该注意的是,由于三次握手和序列ID,TCP无法进行此攻击。在这种情况下,TCP提供的安全性实际上可能比这个提议的安全系统更轻。