4

ハイスコ​​ア タイプのデータ (つまり、Game Center がサポートしていないデータ) を Google appengine データストアに送信する iPad ゲームを作成しています。http://myapp.appspot.com/game/hiscore/925818などのhttpGETまたはリクエストを介してこれらの更新を送信します。POST

これは、appengine データストアが誤ったデータでスパムされないようにするために私が考えた方法です。

p@ssw0rdiOS バイナリに保存されたハードコードを使用して、ペイロード データをzip/暗号化します。そのバイナリ データを base64 としてエンコードします。URL クエリ文字列または POST データで base64 ペイロードを渡します。ハンドラーで unbase64 を実行し、 でデータを解凍しますp@ssw0rd。ペイロードの指示に従って、ハイスコア タイプのデータを更新します。

短所:p@ssw0rd何らかの方法で iOS バイナリから派生したものである場合、このスキームは無効になる可能性があります。

これで十分ですか?これを行う別の方法はありますか?

4

2 に答える 2

3

データを送信するのがクライアントであることを確認する方法はまったくありません。スパマーがデータを送信しにくくするために何かを難読化することしかできません。

ただし、できることは2つあると思います。

  1. ある種の秘密鍵をバイナリに保存する
  2. チェックサムを計算するカスタム アルゴリズムを用意する

たぶん、両方の組み合わせで行くことができます。例を挙げましょう:

(単純化された) 次のようなカスタム (複雑な!) アルゴリズムを作成します。

var result = ((score XOR score / 5) XOR score * 8) BITSHIFT_BY 3

次に、その結​​果と次のようなよく知られたハッシュ関数で静的に保存されたキーを使用します。

var hash = SHA256(StaticKey + result)

次に、そのハッシュをスコアとともにサーバーに送信します。サーバーは、まったく同じ手順 (アルゴリズムの評価 + SHA256 の実行) を実行してハッシュを「検証」し、ハッシュを比較する必要があります。それらがスコアと一致する場合は、うまくいけばあなたのアプリからのものであり、それ以外の場合は破棄します。

ただし、これはあなたができる唯一のことです。mfanto からのリンクを見てください。他にもたくさんのアイデアがあります。これはあいまいさによるセキュリティであるため、自分がどのように行っているかを誰にも言わないようにしてください。

于 2013-01-20T20:50:19.967 に答える
0

わかりました、これを行うには2つの方法があります。

1) $FREE.99 で SSL 証明書を購入し、サーバーへの HTTPS 接続のみを開いて hiscore タイプのデータを送信します。ハンドシェイクの往復時間のため、接続速度は約500 ミリ秒になります。

2) iOS アプリに RSA 公開鍵証明書を埋め込み、サーバーに RSA 秘密鍵を配置します

次に、この 2 番目のスキームで 2 つのことのうちの 1 つを実行できます。

  • データ メッセージが非常に小さい場合 (≤256 B)、256B パッケージを暗号化して送信できます (RSA ペイロードはキーのビット数によって制限されます)。

  • ELSE データが大きすぎる (>256B) 場合、ランダムな対称キー (AES) を生成し、パックします。

    • RSA公開鍵で暗号化された対称AES鍵
    • 対称 AES キーでエンコードされたバイナリ データ

次に、サーバーは最初の 256 バイトを取得してデコードし、その AES キーを使用して残りのメッセージを解読します。


上記の 2 つは盗聴を防ぐだけですが、メッセージのデータ形式が隠されていることを意味します。ハッカーが公開鍵とメッセージ形式を持っている場合、メッセージを作成できるため、あるレベルでは、それは依然としてあいまいさによる一種のセキュリティです。

于 2013-04-21T15:04:03.790 に答える