2012-04-22 7 views
1

私はクライアント/データを保護するためにSOのいくつかの例を読んだ。しかし、私たちは少し別の問題を抱えていて、どこを見なければならないのか分かりません。クライアント/サーバーのデータを保護する。 (Android)

基本的には、地理位置ベースのゲームであるアンドロイドゲームがあります。 HMAC-SHA1をクエリ文字列に使用して、クライアントから送信されるデータが実際にクライアントから送信されていることを確認します。小さな問題があります。 HMAC-SHA1キー。私は私の心の内容まで難読化することができますが、キーはアプリに残っています。誰かが簡単にアプリを解凍し、キーをつかんだり、ブラウザーで自分のユーザーアカウント(GPSのなりすまし)を手動で照会することができます。

私は、誰かがクライアントを示唆した1つの例を見ました&サーバサイドSSL認証。それがうまくいくかどうかわからない、あなたは単にアプリケーションにSSL証明書を添付する必要はありませんか?これもデコンパイルの対象にはならないでしょうか?エンドユーザは証明書を再コンパイル/使用する必要がありますか?

パッケージマネージャを使用して自己署名証明書を取得する方法はありますか?私は、誰かが自分のユーザーアカウントのない偽の彼らのトランスミッション..

おかげ

+0

だから、私はこれを見つけた:http://stackoverflow.com/questions/5578871/android-how-to-get-app-signatureそれは誰もがあなた自身の署名付きアプリのハッシュを得ることができるように見えるメソッド。だから、それは少しばかりのように思える。他のアイデア? – Chrispix

答えて

1

がクライアントを認証することができるように私たちの伝送を確保するための正しい方法を見つける必要があり、それは、資格証明書のいくつかのフォームを必要とします。次のいずれかが可能です。

  1. アイデンティティプロバイダのいくつかのフォームを使用して資格情報を保存し、ユーザーの入力にそれらを毎回それらのセーブ
  2. どこか
  3. 利用システムの認証情報
  4. を持っていない

1は不便です。誰かがデバイスに物理的にアクセスできる限り、攻撃を受ける可能性があります。 3の場合は、ユーザーのGoogleアカウントを使用して、相手が誰かであることを(かなり)確認し、問題や攻撃があった場合にブロックすることができます。 4は実際には3のバリエーションです。ユーザーは一部のサードパーティのサービスに対して認証し、(一時的な)アクセストークンのみを発行します。したがって、アカウントが侵害された場合、トークンは最終的に期限切れになるか、取り消されます(OAuthを参照)。実装するリスクと作業量を考慮して選択します。

クライアント証明書を使用する場合、それらを暗号化して保存することができます。そのため、パスフレーズを使用してそれらを使用する必要があります。 pre-ICSではこれを自分で実装する必要があります.ICSではKeyChain API経由でシステムキーストアを使用できます。デバイスのロックを解除した後(秘密鍵を保護するためのロック解除パスワード/ PINを使用する)にのみ、秘密鍵にアクセスできます。ユーザーは明示的に許可を与えます。

HMACの部分をネイティブコード(OpenSSLなど)で実装し、実行時にそのビットを組み合わせて鍵を生成する方法を現在の方法で守りたい場合は、そうすれば、リバースエンジニアリングがかなり難しくなります。さらに、ある種のノンスを追加して、リクエストを再生できないようにすることもできます。

+0

それだけではなく、ICS以上のソリューションを提供するように聞こえる、我々が行っているルートはおそらく行く方法です。私たちがネイティブコードで何かをしたのかどうか疑問に思っていますが、おそらく署名の署名のハッシュに対して何かをしました。そうすれば、実際のキーは保存されませんが、複数の部分で生成されます。 (またはnonce + hash +いくつかのアルゴリズムはすべてネイティブで行われます)。パッケージマネージャのAPIがネイティブで利用できるかどうか私は推測していない、それらにjniインターフェイスを記述する必要があります。 – Chrispix

+0

何を認証しようとしていますか?ユーザー?デバイス?トランザクション?デバイスであれば、デバイスプロパティ(IMEI、MACアドレスなど)のいずれか(またはその組み合わせ)からキーを派生させることができます。ネイティブPackageManagerがあるとは思わないが、本当にチェックしていない。 –

+0

私はクライアント(アプリ、電話ではない)とユーザーを認証しようとしていると思います。 – Chrispix