2010-11-30 14 views
2

私はudpパケットを処理するネットワークサーバーを実装しています。攻撃者がudpパケットをコピーして後で再生できるリプレイ攻撃を避けたい。私は、パケットをハッシュして、この値をハッシュテーブルに格納することができるというアイデアを思いついた。パケットが受信されるたびに同じプロセスを実行して、ハッシュテーブルでそれを調べることができます。すでに存在する場合はパケットを拒否しますが、それを見たことがなければ(エントリは存在しません)、将来の使用のために保存します。ネットワークパケットを追跡するための最適化アルゴリズム(リプレイ攻撃防止)

ここで、どのようなハッシュアルゴリズムが適していますか?私はハッシュテーブル以外の何かが必要ですか?受信されているudpパケットがたくさんあるので、これはO(1)で動作します!!!!!! ;-)、これは可能ですか?

明らかに、ハッシュが長いほど、記憶領域(状態)を割り当てる必要があります。ハッシュテーブルは時間の経過と共に動的に拡大縮小できますか?

私は多分ここから離れている、私はハッシュテーブルを全く必要としないかもしれない!私はアイデアのオープンです!

答えて

3

パケットの内容を制御できますか?その場合は、コンテンツにハッシュを追加し、それを使用します。これにより、ハッシュ処理が送信者に移ります。また、有効期限を設定すると、a)その時間が経過した後にパケットのレコードを破棄できることがわかっている場合、b)攻撃者が格納したパケットがその時間以降に無駄になった場合。何らかの方法でタイムスタンプを暗号化して、攻撃者がタイムスタンプを更新できないようにしたいとします。

他の技術を使用すると、O(n)は、あなたのハッシュテーブルを、焼き直しする必要がありますので、パケットのハッシュテーブルは高価なことができます使用Wikipedia

1

で見つけることができます。

この場合、サーバーと各クライアント間の共有秘密情報をネゴシエートする必要があります。この秘密鍵Kを用いてMessage Authentication Codeを構築する。認証されるメッセージは、タイムスタンプとともにUDPパケットで送信するデータである必要があります。シーケンスIDは、UDPパケットが到着する保証がなく、パケットが順序通りに到着しない可能性があるため好ましくない。

この攻撃は、3ウェイハンドシェイクとシーケンスIDのためにTCPでは不可能であることに注意してください。この場合、TCPによって提供されるセキュリティは、実際に提案されたセキュリティシステムよりも軽いかもしれません。

関連する問題