1

バックグラウンド

新しい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;
}

質問

記事(および私が試したこと)によると、このコードは呼び出すたびに新しい異なるキーを作成するので、この問題に関していくつか質問があります:

  1. 古いバージョンのAndroidに対してアプリは何をしますか?

  2. そのようなアプリは、Android OSの新しい動作方法(API post17からAPI17)への更新をどのように処理しますか?

  3. 決定論的ではないため、復号化で同じキーを再作成できないことを意味します。つまり、復号化(および後で暗号化)に使用するためにキーも保存されるということですか?そのようなことは全体のポイントを逃しませんか?

  4. コードによって生成されたキーがあるとすると、DBとsharedPreferencesからのデータを暗号化および復号化するためにそれをどのように使用しますか?

  5. 記事の中で、彼らは次のように述べています:

実際のところ、Androidの既存のセキュリティモデルは、この種のデータに対してすでに十分な保護を提供しています。ユーザーの資格情報は、MODE_PRIVATEフラグを設定して保存し、内部ストレージに保存する必要があります

どういう意味ですか?Androidはすでにすべてを暗号化しているので、キーの生成全体は必要ありませんか?私のデバイスはルート化されており、データが暗号化されることはなく、読みやすいと簡単に言うことができます(特に、単なるxmlであるsharedPreferences)。

4

1 に答える 1

3

古いバージョンのAndroidに対してアプリは何をしますか?

ブログの投稿が示すように、Androidのすべてのバージョンで役に立たないため、これではありません。

決定論的ではないため、復号化で同じキーを再作成できないことを意味します。つまり、復号化(および後で暗号化)に使用するためにキーも保存されるということですか?そのようなことは全体のポイントを逃しませんか?

正確に。ブログ投稿の引用:「このアプローチのセキュリティは、生成されたキーの保護に依存していることに注意してください。これは、内部ストレージのセキュリティに基づいています。ターゲットファイルを暗号化せずに(ただし、MODE_PRIVATEに設定して)おくと、同様のセキュリティが提供されます。」

正直なところ、なぜブログ投稿がそのように書かれたのか私にはわかりません。重要な価値を持つ暗号化の唯一の形式は、ユーザーがパスフレーズ(または2要素認証などの高度な形式)を提供する場合です。

どういう意味ですか?アンドロイドはすでにすべてを暗号化しているので、キーの生成全体は必要ありませんか?

いいえ、それは暗号化されたファイルにアクセスできる人なら誰でも暗号化キーにアクセスできることを意味し、暗号化はほとんど無意味になります。

Android、ユーザーがフルディスク暗号化をオンにしているデバイスで「すでにすべてを暗号化」していることに注意してください。

于 2013-02-24T01:55:07.770 に答える