3

簡単に言うと、バイナリ形式で配布されるアプリケーション(ゲームなど)を開発しています。ゲームはホームに電話をかけ、ユーザーのハイスコアをメッセージとしてオンラインゲームサーバーに送信します。

私がやりたいのは、メッセージが改ざんされていないことを信頼できるように、メッセージをデジタル暗号化して署名することです。

公開鍵暗号化は、会話の両端にそれぞれ秘密があることに依存していますが、ソフトウェアがリバースエンジニアリングされておらず、秘密鍵が発見されていることに依存することはできません。

リバースエンジニアリングが可能であることがわかっている場合に、分散バイナリアプリケーションからのメッセージにデジタル署名する(この場合は暗号化部分は必要ありません)安全な方法はありますか?

4

7 に答える 7

3

要するに:いいえ...これに対する絶対確実な解決策はありません。問題は、ハイスコアを送信するアプリケーションが、このトランザクションで「信頼」していない人の制御下で実行されていることです。コードをリバースエンジニアリングできる場合は、署名する前にメッセージの内容を変更できます。

于 2009-06-08T10:55:22.547 に答える
1

プログラムのコード(ソース、間欠的な言語、またはマシンコードに関係なく)が他の誰かの手に渡ると、彼らはやりたいことが何でもでき、誤用しないかどうか確信が持てません。誤用をより困難にするには、リバースエンジニアリングをより困難にするために考えられるすべての方法を使用しますが、これは誤用に対する保証ではありません。

于 2009-06-08T10:56:42.387 に答える
1

あなたはできません。この問題に対する実際の解決策はなく、ますます多くの難読化と改ざんチェックが行われています(IMHO、それは時間の無駄です)。仮に、すべてのプログラムはリバースエンジニアリング、エミュレート、および改ざんされる可能性があります。それに対してあなたができることは何もありません。

ゲームの結果を改ざんから安全に保つために私が考えることができる唯一の方法は、再生してスコアを検証できるある種のゲーム記録を送信することです。ただし、これはゲームがロボットによってプレイされるのを防ぐものではありません。そして、これはあなたのゲームの世界が完全に決定論的である場合にのみ適用されます。

于 2009-06-08T11:03:04.683 に答える
0

いいえ。クライアントソフトウェアがデジタル署名するには、秘密鍵が必要です。また、ソフトウェアに秘密鍵がある場合、ユーザーはそれを発見する(そして潜在的に悪用する)ことができます。

于 2009-06-08T10:54:24.730 に答える
0

私のアプリケーションではblowfishを使用していますが、それが安全な理由ではありません。

ゲームには通常、サーバーに接続しているプログラムのIDをチェックするプロセスがあり、このプロセスは「ハンドシェイクプロセス」と呼ばれます。サーバーは、値と暗号化された(クライアントはそれを復号化する方法を知っている)ブローフィッシュキーを含むパケットを送信します。サーバーから受信したブローフィッシュキーは、接続ごとにランダムになります。これは、ハンドシェイクの最初の部分です。

次の部分は、connectで受信した値(ランダム)に基づいて計算された整数を暗号化し、それをblowfishで暗号化することです。

サーバーがそのパケットを受信すると、サーバーは同じパケットを送信します。このパケットは、新しい(最終的な)blowfishキーで暗号化されます。クライアントは、古いblowfishキーで復号化してそのキーを見つけ、受信した値を使用して計算を行う必要があります。最初のパケットから。

これはハンドシェイクプロセスです。終了後、同じプリンシパルでスコアを送信できます(または、ハンドシェイクが完了した後、ハンドシェイク内に入れて偽のパケットを送信し、リバーサーをだますことができます)。

やることは多すぎますが、リバーサーには多すぎます。

問題を解決する別の方法は、独自の計算でパケットの内容に基づいて2バイト(ワード)のセキュリティ値(CRC)を追加することです。サーバーはその値をチェックし、無効かどうかを確認します->切断。

于 2009-06-08T11:03:09.707 に答える
0

良い質問!ここの多くの人々はすでにそれを言っています-あなたはあなたのアプリにキーを組み込む必要があり、それは潜在的にリバースエンジニアリングによって検索可能です。

トラステッドコンピューティングについて読んでください。これは、PCに組み込まれている公開鍵/秘密鍵を中心に構築されています。これは、PCがアクセスを許可することはありません。メモリカーテン/密閉ストレージは、攻撃者がアプリに配信されたキーを見つけようとするのを困難にします。

于 2009-06-08T11:05:32.853 に答える
0

いいえ、一般的ではありません。あなたは他のコメントで言及された問題に直面しています。

問題はコストの問題になります。保護システムをクラックするコストは、保護している価値よりも高いですか?そして、成功した侵入から回復するためのコストはいくらですか?

ハイスコ​​アテーブルは一般的に価値の高いターゲットではないため、次のいずれかを試してみてください。

  1. ハイスコ​​アとともに、ゲームの状態に関する情報を送信します。プレイタイム、レベル、収集されたボーナスなど。このデータを暗号化/難読化します。これは、サーバーがハイスコアが理論的に有効であるかどうかを判断するのに役立ちます。明らかに偽物であるハイスコアは無視してください。

  2. 共有シークレットを使用した暗号化を使用してハイスコアを送信します。共有シークレットをプレーンテキストとしてアプリに保存しないでください。できれば、アルゴリズムを使用してリアルタイムで計算してください。

  3. クライアントコードを難読化します。

  4. クライアントのIPアドレスとタイムスタンプを使用してハイスコアを保存します。

于 2009-06-08T14:42:22.370 に答える