2013-12-09 8 views
6

私は、Android 4.3で導入された安全で改良されたキーストアを使用して調査しています。Androidキーストア、鍵の安全な値

このキーストアに暗号化キーを格納したいと思っています。このキーは、sqllite dbと共有設定に含まれる値を暗号化するために使用されます。

私は以下を参照してください。SDKのキーストアのサンプルを見てみましょう:

public static final String ALIAS = "my_key" 

誰かが私のコードを逆コンパイルすることができるだろう場合、それらはクリアテキストの別名を見ることができるようになる(=キーキーストアから暗号化キーを取得するため)、私の暗号化キーへの参照を取得することができます。私はALIASを秘密に管理できますか?または私はここでポイントを逃していますか?

答えて

1

エイリアスは機密情報ではありません。各キーストアはパスワードに関連付けられており、各キーには独自の(オプションの)パスワードもあります。それらは安全に保たなければならない価値です。

パスワードがなければ、攻撃者はエイリアスを知っているにも関わらず自分の鍵素材を読み取ることができません。

+0

の良い例えばSecretKeyWrapper.javaを参照してください?私は現在、サンプルからKeyStoreHelper.javaを探しています。 KeyPairGeneratorから生成されたKeyPairオブジェクトがあることがわかります。このオブジェクトにプライベートキーと公開キーが含まれていますか?攻撃者が自分のコードを再パッケージし、これらのキーにアクセスすることは可能でしょうか? –

+1

@ user2987274パスワードは、「load」内の['KeyStore'](http://docs.oracle.com/javase/7/docs/api/java/security/KeyStore.html)クラスとともに使用されます。 'getKey'メソッドと' setKeyEntry'メソッドです。キーストアにキーを格納するまで、キーには関連付けられたパスワードはありません。したがって、新しく生成された 'KeyPair'オブジェクトには、キーストアに永続化するまではパスワードがありません。 –

+0

私のコードを逆コンパイルしてALIASへの参照を取得する人は、コードを再パッケージ化できず、KeyPairへの参照を取得できないため、永続化されませんでしたか?その人が正しいKeyPairへの参照を取得できないようにしますか? –

7

下記の回答は4.3+です。このリリースのKeyStore & KeyChainクラスには大きな変更がありました。詳細については、hereを参照してください。

Keystoreあなたのアプリにはインストール時にUIDが割り当てられます。

これは、キーペア/秘密鍵にアクセスする他のアプリケーション/プロセスを防止するためです。 keystoreデーモンがこれを強制します。

これには、追加の暗号化のためのデバイスピンが必要な場合があります。 http://developer.android.com/reference/android/security/KeyPairGeneratorSpec.Builder.html#setEncryptionRequired()

ソフトウェア/ハードウェアキーストアを使用することの全ポイントは、アプリケーションのハードコードされたデータが逆コンパイル時に読み込まれ、安全でない可能性があることです。

@ダンカンズの回答あなたはパスワードを忘れてしまっているようです。キーストアを使用して鍵ペアを生成し、これを使用して任意の暗号化に使用できるAES鍵を暗号化することをお勧めします(RSA鍵を使用するよりもはるかに高速です)。

ハードウェア/ keyStore.getEntry(alias, null);のような秘密鍵を使用し、いかなる種類のパスワードも渡しません。

は、パスワードであると指摘することが可能である。この

+0

ICSのような4.3より下のAndroidバージョンのソリューションは何ですか? – NickF

+0

よくある質問は、4.3で導入されたKeyStoreについてです。そのため、<4.3のための直接の並列は実際にはありません!この前に秘密鍵を使用する場合は、ユーザー入力とPBKDFを含める必要があります。つまり、<4.3はatm〜25%程度ですので、ハードウェアバックアップされたキーを持っていれば、4.3+ – Dori

関連する問題