web-dev-qa-db-ja.com

暗号化キーをAndroidに安全に保存する方法は?

Androidで暗号化キーを安全に保存する方法を知りたいですか?暗号化と秘密鍵を保護するための最良のシナリオは何ですか?

29
user6693721

コメントから、現在のAndroidバージョンと古いバージョンのローカルキーを使用してデータを暗号化する必要があります

Android Keystore は、キーを生成および保護するように設計されています。ただし、18未満のAPIレベルでは使用できず、APIレベル23まではいくつかの制限があります。

AESなどのランダムな対称暗号化キーが必要になります。 AESキーは、データの暗号化と復号化に使用されます。 Android AP​​Iレベルに応じて、安全に生成および保存するためのオプションをまとめます。

  • APIレベル<18:Androidキーストアが存在しません。ユーザーにパスワードを要求し、パスワードから暗号化キーを導出します。欠点は、アプリケーションの起動時にパスワードを要求する必要があることです。暗号化キーはデバイスに保存されません。パスワードを使用してアプリケーションが開始されるたびに計算されます

  • APIレベル> = 18 <23:Android AESサポートなしで利用可能なキーストア。デフォルトの暗号化プロバイダーを使用して、ランダムなAESキーを生成します(AndroidKeystoreは使用しません)。 AndroidキーストアにRSAキーペアを生成し、RSA公開キーを使用してAESキーを暗号化します。暗号化されたAESキーをAndroid SharedPreferencesに保存します。アプリケーションが起動したら、RSA秘密キーを使用してAESキーを復号化します

  • APIレベル> = 23:Android AESサポートで利用可能なキーストア。 Android Keystoreを使用してランダムなAESキーを生成します。直接使用できます。

暗号化するには、AES/CBC/PKCS7Paddingアルゴリズムを使用できます。また、データを暗号化するためにランダムな初期化ベクトル(IV)も必要ですが、公開することもできます。

代替案:

  • APIレベル> 14:Android Key Chain:KeyChainはシステム全体の資格情報ストレージです。アプリケーションで使用できる秘密鍵付きの証明書をインストールできます。上記の2番目のケースに示すように、AESキーを暗号化/復号化するには、プリインストールされたキーを使用します。

  • 外部トークン:保護されたキーはデバイスに保存されません。 AESキーを暗号化できる秘密/公開キーペアを含む外部トークンを使用できます。トークンは、BluetoothまたはNFCを使用してアクセスできます

28
pedrofb

Apkファイル内に暗号化キーを配置することはできません。リモートサーバーに保持し、サーバーを使用して復号化することができます。または、キーをエンコードし、それを明白でない場所に保管することにより、他の人にとって難しくする場合があります。しかし、これに対する防弾ソリューションはありません。

3
Nabin Bhandari

プライベートAPIキーをコードに安全に保存する方法はありません。ただし、NDKを使用して秘密キーを安全に保存できます。 NDKからキーを取得するのは簡単ではありません。 NDKを使用した秘密鍵の例

1
Manish

Androidキーストアシステムを使用して、機密情報を保存および取得できます。この5分間の記事を読んで、その仕組みを理解してください。 sing Android Keystore機密情報を保存および取得するシステム

0
Neeraj