1

クライアント/データを保護するためのSOに関するいくつかの例を読みました。しかし、少し異なる問題があり、どこを見ればよいかわかりません。

基本的に、位置情報ベースのゲームである Android ゲームがあります。HMAC-SHA1 をクエリ文字列に使用して、クライアントから送信されたデータが実際にクライアントからのものであることを確認します。小さな問題があります。HMAC-SHA1 キー。心ゆくまで難読化できますが、キーはアプリ内に残ります。誰かがアプリを簡単に逆コンパイルし、キーを取得して、ブラウザーからユーザー アカウントの手動クエリを送信できます (GPS のスプーフィング)。

誰かがクライアント側とサーバー側の SSL 認証を提案した例を見ました。それがどのように機能するかわかりません.ssl証明書をアプリに添付するだけでよいのでしょうか? これは逆コンパイルの対象にもなりませんか?エンドユーザーは証明書を再コンパイル/使用する必要がありますか?

パッケージマネージャーを使用して自己署名証明書を取得する方法はありますか? 誰かが自分のユーザー アカウントの送信を偽造できないように、送信を保護する正しい方法を見つける必要があります..

ありがとう

4

1 に答える 1

1

クライアントを認証するには、何らかの形式の資格情報が必要です。次のいずれかを実行できます。

  1. 資格情報を保存せず、毎回ユーザーに入力してもらいます
  2. それらをどこかに保存します
  3. システム資格情報を使用する
  4. 何らかの形式の ID プロバイダーを使用する

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

クライアント証明書の使用に関しては、暗号化して保存できるため、使用するにはパスフレーズを提供する必要があります。ICS より前のバージョンでは、これを自分で実装する必要があります。ICS では、KeyChainAPI を介してシステム キー ストアを使用できます。デバイスのロックを解除し (キーを保護するためにロック解除パスワード/PIN を使用)、ユーザーが明示的に許可を与えた後にのみ、秘密キーにアクセスできます。

現在のやり方に固執したい場合は、HMAC 部分をネイティブ コード (OpenSSL など) で実装し、その一部を組み合わせて実行時にキーを生成します。これにより、リバース エンジニアリングがかなり困難になります。さらに、リクエストをリプレイできないように、なんらかのナンスを追加することもできます。

于 2012-04-23T02:23:53.407 に答える