0

私は現在、セキュリティが大きな関心事であるペースの速いマルチプレイヤー ゲームを構築しています。

Java で UDP を介してストップ アンド ウェイト (簡単にするための一時的な手段) を実装しました。

ただし、悪意のある当事者が偽の ack またはメッセージを送信者または受信者にそれぞれ送信し、シーケンス番号が同期されなくなる可能性があることを懸念しています。つまり、メッセージが失われる (ゲームがクラッシュする!) か、送信者が再送信する可能性があります。無期限に。

私のアプリケーションのさらに上では、各参加者は RSA 公開鍵によって識別されるため、認証のために各メッセージに署名付きハッシュを追加できます...しかし、これによりヘッダーサイズが大幅に増加し、アーキテクチャレイヤーが多少混乱します。

これは一般的なアプローチですか?この問題に対する適切な既知の解決策はありますか?

4

1 に答える 1

1

ジョナサンが言ったこと。一般的に言えば、UDP の使用中にパケットの順序が乱れたりドロップされたりするのを防ぐための独自の手段を提供する必要があります。代わりに TCP を使用する以外に、この問題に対処する「標準的な」方法はありません。あなたが言ったように、すべてのパケットでクライアントの ID を検証できますが、RSA のようなものであってもクライアントの ID を検証しても、悪意のあるクライアントに対しては役に立ちません。ゲームサーバーに接続し、自分自身を検証し、ゴミの送信を開始するだけです。結局のところ、彼らは彼らが言う人です。

ほとんどのゲーム サーバーの設計では、私の (限られた) 理解では、通常、サーバーには「ティック」の概念があります。これにより、クライアントはティック内で発生するイベントを登録でき、サーバーはクライアントが送信するものに対してルールを適用します。 . ただし、ティックが終了すると、そのティックに対応してサーバーが受信したイベントはすべて破棄されます。これは、システムの実際のセキュリティを向上させない競合要素を追加しますが、それをより困難にする要素を追加します。

もちろん、クライアントがオリジンを偽装できないという点でこのような「安全な」システムを作成するには、基本的にTLSトンネルを実行する必要がありますが、これはパフォーマンス要件を満たさないと思います.

于 2012-07-25T01:40:43.947 に答える