ページ 11

ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 10:31
by ホヅミ
現在ネットワークミニゲームを作っています。
ハンゲームのような小部屋を作りたいのですが、どういった手法がいいのか皆さんの方法を聞きたいです。

ちなみに、現在私が考えているものは、
データベースに登録されている部屋情報(掲示板のようなもの?)を元にホストの暗号化された接続IPを取得し、ホストとP2P接続を行うものです。
この方法はセキュリティ面や、システム面でどういった問題が出るでしょうか?

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 10:40
by h2so5
ホヅミ さんが書きました: ちなみに、現在私が考えているものは、
データベースに登録されている部屋情報(掲示板のようなもの?)を元にホストの暗号化された接続IPを取得し、ホストとP2P接続を行うものです。
データベースには具体的に何が記録されているのでしょうか?
また、「暗号化された接続IP」の意味がよくわかりません。なぜIPが暗号化されているのでしょう。

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 11:01
by softya(ソフト屋)
例として書かれているホストやクライアントやサーバーの担当がよくわかりませんね。
私も「暗号化された接続IP」が何なのかは知りたいです。
あと、「ホストとP2P接続」というのもどういう動作を期待しているのか教えて下さい。

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 11:21
by ホヅミ
ちょっと用語がごちゃ混ぜになってしまっていたようです。

送受信するデータはすべて暗号化させます。(暗号化された、ではなく暗号化したです。暗号化させる必要はないのでしょうか?)
データベースに登録するものは
・部屋番号
・部屋製作者のIPアドレス
・部屋名
・パスワード
・上限人数
・現在人数
・ゲームの状態(待機中、ゲーム中等々)

サーバーは登録されている部屋を管理するものです。
ホストとは部屋製作者のことです。
クライアントはゲーム参加者のことを指します。

サーバーはあくまで登録されている部屋を管理するだけで。
サーバーから部屋の接続先を取得し部屋製作者のPCに接続します。
私の勘違いでP2P接続ではないのかもしれません。

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 11:29
by softya(ソフト屋)
確かにp2p接続になりますね。サーバーはコネクションを担当するだけで後はホストユーザーとクラアントユーザー間で相互にUDPなどで通信すると言うことですよね?

サーバーからホストとクライアントにIPアドレスを渡すのでIPアドレスは出来れば暗号化されてやり取りされたほうが良いと思います。
セキュリティ面だと侵入のルートになる可能性がありますが、個人のゲームでわざわざクライアントのふりをするハッキングソフトを開発する暇人がいるとは思えません。
システム面だとuPnPの制御をしないとルータのポート開放問題が出るでしょう。

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 12:54
by h2so5
P2Pの場合、パケットキャプチャを使えば相手のIPアドレスを割り出すのは簡単なので
IPアドレスの暗号化にどれだけ効果があるかどうか疑問ですが...
あと、暗号化するときの鍵や鍵交換はどうする予定でしょうか?TLSのようなものを考えていますか?

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 13:05
by ホヅミ
ソフト屋さんへ
>システム面だとuPnPの制御をしないとルータのポート開放問題が出るでしょう。
了解しました。まだ、ネットワークプログラミングの勉強が初歩の段階なので、まずはそこから勉強をしてみます。

h2so5さんへ
>P2Pの場合、パケットキャプチャを使えば相手のIPアドレスを割り出すのは簡単なのでIPアドレスの暗号化にどれだけ効果があるかどうか疑問ですが...
あまり見られたくないものは1クッションは置いておこうかなと思っていたのですが、必要ありませんかね。^U^;

>暗号化するときの鍵や鍵交換はどうする予定でしょうか?TLSのようなものを考えていますか?
暗号鍵はプログラム内に固定させようかなと考えているのですが、やめた方がいいでしょうか?

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 13:50
by YuO
ホヅミ さんが書きました:>暗号化するときの鍵や鍵交換はどうする予定でしょうか?TLSのようなものを考えていますか?
暗号鍵はプログラム内に固定させようかなと考えているのですが、やめた方がいいでしょうか?
暗号鍵の固定は(特に共通鍵暗号では)やめた方が良いでしょう。
ディフィー・ヘルマン鍵交換のような,鍵交換アルゴリズムを使って暗号鍵を毎セッションごとに作る方が安全です。
もちろん,暗号的に安全な乱数アルゴリズムが必要になりますが。

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 13:59
by h2so5
暗号鍵を固定するくらいなら暗号化しないほうがマシだと思います。デバッグの面倒が増えるだけなので。
セキュリティ強度を求めるなら、OpenSSLやCrypto++などのライブラリを使うと比較的簡単に鍵交換を実装することができます。

Re: ゲームサーバーのルームの考え方

Posted: 2013年5月10日(金) 14:26
by ホヅミ
>> YuOさん 暗号鍵の固定は(特に共通鍵暗号では)やめた方が良いでしょう。
>> h2so5さん 暗号鍵を固定するくらいなら暗号化しないほうがマシだと思います。デバッグの面倒が増えるだけなので。

実際に自分で書き込んでてそういえば!って思いました。
鍵交換も勉強していきたいと思います。

ここのトピックはこの辺で解決とさせていただきます。
みなさんありがとうございました!