I'm struggling with coming up with a decent security strategy to bootstrap 
some keys in android (api >= 16). I am storing some reasonably sensitive 
data locally, and don't want to just write the data to a DB or a file 
locally without any sort of encryption.

That means I need an encryption key (AES 256) somewhere to encrypt, say, 
entries in SharedPreferences, or a file, or whatever. So far so good.

But how do I protect that AES key? I've tried using the KeyStore 
("AndroidKeyStore") to generate an RSA keypair, which I use to wrap/unwrap 
the AES key (apparently generating an AES key in the keystore isn't 
supported in lower api levels, and even this strategy doesn't work < api 
18). The hope is that that keypair is at least semi-securely stored 
somewhere, preferably with hardware support on phones that have it.

This seems to mostly work on Android 4 and 5, but on Android 6, as soon as 
the app restarts, and I retrieve the keypair from the KeyStore, the key is 
unusable and I get "InvalidKeyException: Need RSA private or public key". 
Is there a known (but unknown to me) bug in Android 6? Some new security 
quirk that won't let me get the keypair back?

Anyone dealt with this sort of security-bootstrapping in android? Is there 
some well-known and workable strategy people have used?

Regards,
jan

-- 
You received this message because you are subscribed to the Google Groups 
"Android Security Discussions" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to android-security-discuss+unsubscr...@googlegroups.com.
Visit this group at http://groups.google.com/group/android-security-discuss.
For more options, visit https://groups.google.com/d/optout.

Reply via email to