2016-04-10 4 views
5

APIコード、データベース暗号化キーなどをアプリケーションコードに保存して、コードを逆コンパイルして誰も入手できない場所は何ですか?コードを難読化するためにプロガードを使用しましたが、ストリングでは機能しませんでした。Androidアプリに秘密鍵を保存するのに最適な場所は何ですか?

+2

この質問は[既に尋ねられました](http://stackoverflow.com/questions/14570989/best-practice-for-storing -private-api-keys-in-android) – Dmitriy

+0

[AndroidでプライベートAPIキーを保存するためのベストプラクティス](https://stackoverflow.com/questions/14570989/best-practice-for-storing-private-api) -keys-in-android) – Suhaib

答えて

2

アプリに保存する方法はありません。アプリケーションは、アプリケーションのメモリへのアクセスを増やす変更されたデバイスで逆コンパイルまたは実行することも、攻撃者がネットワークやストレージ/データベーストラフィックのログを追加するなどの方法で変更することもできます。

サーバーは、あなたのアプリケーションは、認証トークンのためにユーザーが入力した資格情報を交換するか、AccountManagerまたは同様のAPIからこれらの認証トークンを取得することによって、認証トークン(または同様のもの)を取得する必要があります。また、SafetyNet Attest API(https://developer.android.com/training/safetynet/index.html)を使用して、リクエストを行っている署名鍵であなたのアプリが署名されていることをサーバに証明することもできます。

データベース暗号化の場合、アプリはランダムな暗号化キーをオンデバイスで生成し、ユーザーが入力した資格情報にリンクするか、Androidキーストアに格納するか、単にAndroidからアプリに提供される保護に依存する可能性があります。あなたの脅威モデルに依存します(つまり、なぜあなたはデータベースを暗号化する必要があると思いますか?)

+0

これは、不正なアプリケーションがサーバーと通信するときにアプリケーションを偽装するのを防ぐ方法はありますか? – pete

+0

サーバーでは、すべての要求(またはログイン要求など)にSafetyNet認証トークン/アサーションが含まれている必要があります。サーバーは、(1)GoogleのSafetyNet Attestインフラストラクチャによって実際にアテストトークン/アサーションが発行されたこと、(2)トークン/アサーションからアプリのパッケージ名+署名証明書を抽出してアプリに一致することを確認する。本質的に、あなたのサーバーは、SafetyNet Attestインフラストラクチャ(クライアント側とサーバー側の両方)を誤解させることは非常に難しいと信じています。 –

関連する問題