チート対策
はじめに
セキュリティとチート対策は、オンラインマルチプレイヤーゲームの重要な側面です。Quantumの決定論性は、これらの問題に対処するための独自機能を提供します。このページでは、組み込みのチート対策の詳細と、Photon Quantumを使用した製品レベルのオンラインゲームを作成するためのベストプラクティスを提供します。
開発者はセキュリティ問題に対して、問題を軽減する方法と、いつその方法を実行すべきかを理解することが重要です。シミュレーション全体をサーバー上で100%実行することは可能ですが、それが実用的でコストパフォーマンスが良いことは稀です。
- サーバー運用はコストが高く、特にゲームがまだ収益を上げていない場合はなおさらです。
- 大抵の場合、チーターはユーザー全体から見るとごく少数です。
- 100%チートを防止するゲームは現実的ではなく、チーターの一歩先を行くことさえも困難です。
- できるだけ安全にする必要があるジャンルのゲームも存在します。
ドキュメント内で使用されている用語は以下の通りです。
- ゲームバックエンドは、開発者によって作成/ホストされるオンラインサービスを指します。
- カスタムサーバープラグインは、Photonによってホストされる、開発者が作成したQuantumプラグインを指します。
- Quantum Public Cloudは、Photonによってホストされる、カスタマイズされていないQuantumサーバーを指します。
- Webhookは、Public Cloudで動作するQuantum 3製ゲームから呼び出される標準HTTPリクエストです。
決定論性によるチート防止
決定論的ゲームの大きな利点は、サーバーでシミュレーションを実行しなくても、頑健にチートが防止されることです。例えば、プレイヤーがクライアントを改ざんしてキャラクターの速度を変更しても、他のプレイヤーには影響を与えません。チーターが奇妙な行動を取る(例:壁にぶつかり続ける)ことには気付くかもしれませんが、ゲーム体験には影響がありません。
その理由は単純で、各クライアントはシミュレーション全体をローカルで決定論的に実行し、他のクライアントとは入力のみを共有するためです。
信頼できるマッチ結果
マッチ結果は、ゲームバックエンドでプレイヤーの進行状況を更新するために使用されます。これは、ゲームロジックが実行されているサーバーで行うのが最も安全です。
ただし、専用ゲームサーバーを用意する前に、コストパフォーマンスが良い方法で結果を検証する方法がいくつかあります。
プロトタイピング | クライアントは各自の結果を、開発者のゲームバックエンドにプッシュします。これはプロトタイピングに適しており、この設定でゲームをリリースすることもできます。最初にすることは、バックエンドに送信する結果を格納できるデータ構造を用意することです。 |
---|---|
ゲーム結果のWebhook | 各クライアントはシミュレーション中に、同時にQuantumサーバーに結果を送信します。オンラインゲームのルームが最終的に解散された時、GameResultのWebhookが呼び出され、そこにクライアントから送信されたすべての結果のリストが含まれています。この方法は、プロトタイピングの方法と似ていますが、カスタムQuantumサーバーのGameResult APIを使用しています。 |
再シミュレーションリプレイ | ゲームの結果が不明瞭であるか、一般的に信頼できない場合は、キャプチャされた入力ストリームと非Unityのセッション実行アプリケーションを使用して、セッションの再シミュレーションを行うことができます。オンラインゲームセッションのキャプチャとリプレイに関する情報は、リプレイのマニュアルをご覧ください。 |
カスタムQuantumサーバー | Photon Enterpriseサーバーでシミュレーションを実行します。これにより、クライアントがデータを送信するのを待たずに、サーバーから自動的にGameResultのWebhookが呼び出されます。 |
クライアント側のゲーム設定の保護
実際のオンラインのQuantumシミュレーションの開始パラメーターは、デフォルトではクライアントによって制御されています。
各クライアントは、セッション開始前にSessionConfig
(Quantumの設定)とRuntimeConfig
(ゲームの設定)ファイルをアップロードします。また通常、クライアントはゲームにプレイヤーが追加された際に、ゲームのロードアウトや進行状況を表すRuntimePlayer
もアップロードします。
Quantum Public Cloudで動作するゲームにおいて、クライアントから送信されるデータを保護するには、Quantum Webhookを使用できます。
Quantum Public Cloud | サーバーはクライアントから受け取った最初のSessionConfig とRuntimeConfig を選択しますが、これはほぼランダムです。RuntimePlayer は全く保護されません。 |
---|---|
Webhook | クライアントから送信されたSessionConfig ・RuntimeConfig ・RuntimePlayer は、Photonのダッシュボードから設定されたHTTP Webhookを使用して、開発者のゲームバックエンドを呼び出してチェックできます。 |
カスタムQuantumサーバー | すべての設定は、開発者のゲームバックエンドから取得後に遮断され、置き換えられる可能性があります。 |
カスタム認証
Photonでは認証サービスやプレイヤーデータベースを提供していませんが、独自またはサードパーティーの認証サービスを追加することを強く推奨します。
決定論性の欠点
決定論性には多くの利点がありますが、これにはいくつかの目立つ欠点も存在します。
完全情報問題
Quantumではローカルでゲームのシミュレーションを進める(他のプレイヤーの入力を除く)ため、各クライアントはすべての情報にアクセスできます。これは、カードゲームで使用されるクライアント側の秘密や、「戦場の霧」のような機能が簡単にハックできることを意味します。
また、クライアントで次の乱数を予測したり、ボットを作成されてしまう特殊なケースも存在します。
チェックサムを使用したチーター検知
ゲーム中にチーターを検知する手段として、Quantumのチェックサムを使用することはお勧めしません。
- チェックサム計算は負荷が高く、処理落ちが発生する可能性があります。
- 組み込みのメカニズムでは、ゲームセッション内のすべてのクライアントのシミュレーションを即時に停止させます。