Androidで暗号化キーを安全に保存する方法を知りたいですか?暗号化と秘密鍵を保護するための最良のシナリオは何ですか?
コメントから、現在のAndroidバージョンと古いバージョンのローカルキーを使用してデータを暗号化する必要があります
Android Keystore は、キーを生成および保護するように設計されています。ただし、18未満のAPIレベルでは使用できず、APIレベル23まではいくつかの制限があります。
AESなどのランダムな対称暗号化キーが必要になります。 AESキーは、データの暗号化と復号化に使用されます。 Android APIレベルに応じて、安全に生成および保存するためのオプションをまとめます。
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を使用してアクセスできます
Apkファイル内に暗号化キーを配置することはできません。リモートサーバーに保持し、サーバーを使用して復号化することができます。または、キーをエンコードし、それを明白でない場所に保管することにより、他の人にとって難しくする場合があります。しかし、これに対する防弾ソリューションはありません。
プライベートAPIキーをコードに安全に保存する方法はありません。ただし、NDKを使用して秘密キーを安全に保存できます。 NDKからキーを取得するのは簡単ではありません。 NDKを使用した秘密鍵の例
Androidキーストアシステムを使用して、機密情報を保存および取得できます。この5分間の記事を読んで、その仕組みを理解してください。 sing Android Keystore機密情報を保存および取得するシステム