4

私はアンドロイドとセキュリティが初めてです。

私のアプリは、秘密鍵で暗号化された暗号化された DB を使用しています。パスワードや暗証番号を追加せずに、この秘密鍵を保護された場所に保管する方法を見つけたいと考えています。

私が読んだことから、Androidのキーストアはそれを行う場所ですが、私の理解では、それを使用する場合、デバイスのPINコードを設定する必要があります(これはやりたくありません) !)。

このキーを保存する場所と方法に関する提案はありますか? (ピンコードを設定する必要がない限り、キーストア関連のソリューションはすべて受け入れられます)

私の方向性は、アプリの一部としてコンパイルするいくつかの外部オープン ソース キーストア (提案はありますか?) を使用することです (Android はアプリ間で情報を共有しないため、使用しても問題ありません)。

ルート化されたデバイスを使用する場合、最後の仮定が正しくないことは承知していますが、私の場合は、ルート化されていないデバイスのみを使用します。

私はたくさん検索しました(ここと他の場所)、探していたものが見つかりませんでした...

どんな助けでも大歓迎です!! 10倍

4

1 に答える 1

1

One thing you need to keep in mind is that KeyChainis not available until API 14. 以前の API バージョンをターゲットにする場合は、別のオプションが必要です。SpongyCastleを使用して独自の KeyStore を作成できます。

ユーザーにパスワードを要求しない場合は、少なくともパスワードを隠す必要があります。

public class MainActivity extends Activity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        KeyStore ks = null;
        try {
            ks = KeyStore.getInstance(KeyStore.getDefaultType());
            ks.load(null,null);

            // Add certs or keys

            ks.store(new FileOutputStream(new File(getFilesDir(),"out.bks")),"password".toCharArray());
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (CertificateException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    static {
        Security.insertProviderAt(new org.spongycastle.jce.provider.BouncyCastleProvider(), 1);
    }
}
于 2013-07-02T12:08:59.380 に答える