web-dev-qa-db-ja.com

3つ以上のピアとのネットワークを介した鍵交換

私と私のチームは、クライアント/サーバートポロジを使用してマルチプレイヤービデオゲームを開発しています。これにより、サーバー権限のために不正行為を行う意図があるクライアントからの一致が保護されますが、サーバーは送信パケットと受信パケット、および適切なユーザーを変更できます。プレイヤーのデータ。

暗号化方法として[〜#〜] aes [〜#〜]を使用することを選択しましたが、使用されたキーについてすべてのピアに通知するという問題がありました。この暗号化方式でネットワークパケットを保護します。

2つのピア(例ではアリスとボブの呼び方)間で完全に機能するDiffie-Hellman-Merkle鍵交換アルゴリズムを読みました。問題は、私たちのゲームでは2人から16人までのさまざまな数のプレーヤーとの試合が許可されていることです。

条件は、方程式の結果をサーバーと共有するために、すべてのクライアントが同じ数bgの指数)を生成する必要があるため、両方が同じ結果になるようです。これはsです。

クライアントが接続する時間と一致する接続の数が可変である場合、すべてのピアで秘密鍵を生成する方法がわかりません。

1
Doctor Niklas

このために独自の暗号化スキームを展開したり、対称キーを複数の関係者と共有したりしないでください。

各クライアントとサーバー間の転送時にデータを保護するには、TLSを使用してこれらの接続を保護する必要があります。 TLSは、各クライアントへの対称鍵共有と暗号化の復号化を適切な方法で処理し、転送中のデータの保護について考慮していない多くのことを回避します。ただし、これはすべてのクライアント間で共有されるキーではなく、各クライアントのキーであり、新しいセッション/接続で変更されるキーでもあります。基本的には、各ユーザーとDHスタイルのAESキー合意を行います(他のアルゴリズムを選択することもできます)が、単純なDHを使用して合意した場合でもキャッチできないようなスキームで発生する可能性のある多くの攻撃を回避するように注意します各ユーザーと1つのDH契約を実行する場合でも、対称キー。

保存されているデータ、つまり保存されているデータも保護したい場合は、キーを共有してもメリットはありません。それぞれが独自の秘密鍵を生成する必要があります。

3
CristianTM