バックグラウンド
新しいAndroid開発者のブログ投稿(ここで入手可能)によると、データベースまたはsharedPreferencesのいずれかに保存されている機密データ(パスワードなど)を暗号化および復号化するために新しい手法を使用する必要があります。それを読むのに苦労しました。
新しい方法は次のとおりです。
public static SecretKey generateKey() throws NoSuchAlgorithmException {
// Generate a 256-bit key
final int outputKeyLength = 256;
SecureRandom secureRandom = new SecureRandom();
// Do *not* seed secureRandom! Automatically seeded from system entropy.
KeyGenerator keyGenerator = KeyGenerator.getInstance("AES");
keyGenerator.init(outputKeyLength, secureRandom);
SecretKey key = keyGenerator.generateKey();
return key;
}
質問
記事(および私が試したこと)によると、このコードは呼び出すたびに新しい異なるキーを作成するので、この問題に関していくつか質問があります:
古いバージョンのAndroidに対してアプリは何をしますか?
そのようなアプリは、Android OSの新しい動作方法(API post17からAPI17)への更新をどのように処理しますか?
決定論的ではないため、復号化で同じキーを再作成できないことを意味します。つまり、復号化(および後で暗号化)に使用するためにキーも保存されるということですか?そのようなことは全体のポイントを逃しませんか?
コードによって生成されたキーがあるとすると、DBとsharedPreferencesからのデータを暗号化および復号化するためにそれをどのように使用しますか?
記事の中で、彼らは次のように述べています:
実際のところ、Androidの既存のセキュリティモデルは、この種のデータに対してすでに十分な保護を提供しています。ユーザーの資格情報は、MODE_PRIVATEフラグを設定して保存し、内部ストレージに保存する必要があります
どういう意味ですか?Androidはすでにすべてを暗号化しているので、キーの生成全体は必要ありませんか?私のデバイスはルート化されており、データが暗号化されることはなく、読みやすいと簡単に言うことができます(特に、単なるxmlであるsharedPreferences)。