2

Flash を実行しているクライアントとサーバーの間でデータを安全に受け渡す方法を探しています。問題のデータは Flash アプリによって生成されます。この場合、ゲーム終了後のスコアです。サーバー上でデータが改ざんされていないことを確認したい。これを行うための良い方法は何ですか?

簡単な方法の 1 つは、データに対してハッシュなどの操作を実行し、そのハッシュをデータと共にサーバーに戻すことです。ただし、これは、クライアントのソース コードにアクセスできる人物によって簡単に破られます。

編集:ハッキングできないものは何もないことを認識していますが、できるだけ難しくしたいと考えています。公開鍵でデータを暗号化し、オプションでサニティチェックやゲームログで再計算を行う@jcnnghmのソリューションが最良の選択肢だと思います。SSL 暗号化も良い考えです。これにより、実際にサーバーに送り返されているものを解読するのが難しくなります。

4

5 に答える 5

3

バイナリに格納されている公開鍵を使用してデータを暗号化します。これにより、攻撃の侵入障壁が高くなります。それに加えて、データがサーバーに到着したときにサニティ チェックを行います。これは、プレイの時間単位ごとに現実的に獲得できる最大ポイント数を計算したり、ゲーム ログをサーバーに送信してスコアリングが正しいことを確認したりするのと同じくらい簡単です。

あなたが何をしても、完全にハッキングの証拠になるものは何もありませんが、これは最も決定的なものを除いてすべてを停止します.

更新: @mark: Flash は SSL をネイティブにサポートします。

于 2008-09-05T18:16:27.857 に答える
2

信頼できないプラットフォーム上で実行されるコードは、その整合性を維持できますか? いいえ、何十年にもわたる壊れたコピー防止スキームにより、これは不可能であると仮定するようになりました。逆に、信頼できるサンドボックスで悪意のあるコードを実行することは可能ですが、問題に対してできる最善のことは、人々が不正行為をするのを不便にすることです。

于 2008-09-05T18:06:07.443 に答える
1

http://code.google.com/p/as3crypto/で AS3Crypto パッケージを確認してください。試したことはありませんが、このパッケージは (部分的に) TLS 1.0 プロトコルをサポートすると主張しています。

TLS は、Flash アプリケーションとサーバーの間に安全なトンネルを提供します。 http://en.wikipedia.org/wiki/Secure_Sockets_Layer

@jcnnghm通常、計算時間が長いため、バルクデータ暗号化に公開鍵暗号化(RSA、DSA)を使用したくありません。公開鍵暗号化は、セキュリティ プロトコルのハンドシェイクおよび鍵合意フェーズで使用する必要がありますが、バルク データ暗号化は、AES や TDES などの対称暗号で処理する必要があります。TLS および SSL プロトコルはこのように機能します。

于 2008-09-05T18:21:27.050 に答える
0

人々が実行可能ファイルにアクセスできる限り (ロックされたキオスクでゲームを実行したい場合を除き、これは常にそうです)、これを行うための完全に安全な方法はありません。

音楽業界と映画業界は数千万ドルを DRM に費やし、自宅の愛好家によって数日または数週間でクラックされました。彼らが自分のものを守れなければ...

于 2008-09-05T18:00:35.413 に答える
0

ハッカーの証拠がないことについての回答に同意します。それを読み取ることができれば、それを操作/コピーして逆コンパイルできるからです。

私が計画しているもう 1 つのアプローチは、一意のキー pr を生成することです。プレイヤー セッション (salt 値としてある種の時間/日付を含む)。

次に、アプリケーション全体で、おそらく定期的にステータス スコアを送信/送信し、新しい有効なキーを取得します。この同期化が失敗した場合は、セッション全体を中断します。

これの欠点は、サーバーの応答速度を低下させる同時プレーヤーが多すぎるため、「偽のタイムアウト」が発生し、ゲームサーバーが DoS 攻撃に対して開いたままになる可能性があります。

しかし、ユーザーがセッションを行っている間に「セッションキー」を更新すると、追加のセッション管理が少し必要になりますが、それによって詐欺師の作業が少し難しくなる場合は、必ず試してみます:o)

一方で、ハッカーを証明できるものは何もないため、100% 信頼しないでください。どんなに優れた解決策を思いついたとしてもです。

最後に、アプリケーションをモジュール/レベルなどに分割して、コードを開始するだけですべてのコードにアクセスできないようにすることも重要です。

現在、私の計画は大規模なマルチレベルの世界を構築することであり、クライアント/プレーヤーは、プレーヤーが存在する部分に添付されたファイルのみを取得します.

これがあなたの考えに役立つことを願っています。

于 2009-08-09T20:24:11.503 に答える