個人的な MMO ゲーム プロジェクトでは、自作の信頼性の高い UDP ベースのプロトコルを Java で実装しています。私の現在の設定を考えると、スヌーパーがセッションをハイジャックするのは比較的簡単だと思うので、これを防ぐために、少し暗号学を学ぶ機会を得ています. とても興味深いです。
Diffie-Hellman 鍵交換(非常に巧妙な概念)を使用して、クライアントとサーバーの間で共有秘密鍵を正常に作成できますが、今度はこれを使用してパケットの信頼性を保証する必要があります。これまでの予備テストでは、私が試したいくつかの異なる暗号によってデータ量が少し膨れ上がることが示されましたが、可能な限り小さく高速に保ちたいと考えています。
パケットを認証しようとしているだけで、ペイロード全体を必ずしも隠蔽しようとしているわけではないことを考えると、秘密鍵から生成された 8 バイトのセッション ID をパケット ヘッダーに入れ、パケット全体を暗号化し、それをハッシュすることができると考えています。 8バイトまで。暗号化されていないパケットを取得し、8 バイトのハッシュをセッション ID の場所に配置して送信します。
これは安全でしょうか?暗号化せずに送信するためだけにパケット全体を暗号化するのは少し洗練されていないように感じます - 私の目標を達成するためのより良い/より速い方法はありますか? 良い経験なので、これを自分でやりたいと思っているので、サードパーティのライブラリや他のプロトコルオプションにはあまり興味がないことに注意してください。