我一直在使用Nikolay Elenkov的博客(http://nelenkov.blogspot.com/2012/05/storing-application-secrets-in-androids.html)在我们的android应用程序中存储加密的密码信息。要求是这样的,我们a)不想直接在我们的代码中存储密钥/盐,因为这可以被反编译/删除,b)需要支持回到android API级别14,以及c)需要存储密码(加密的)信息(即目前不能使用OpenAuth令牌或类似的系统,因为它需要现在无法进行的服务器更改)。是否可以在没有设备PIN码的ICS上使用android密钥库守护程序?
因此,在JB 4.2+设备上,我可以利用新的安全凭证存储,这不会导致任何问题。但是,对于JB 4.1和ICS设备,我需要使用上述通过nelenkov技术与密钥库守护进程交互的方法。
这里的问题是,当所述安全凭证存储被初始化时,它需要用户设置设备密码/ PIN,因为它使用这个到基座用于主存储关的加密密钥。这是一种糟糕的交易,因为这对用户来说是一个很大的障碍。
或者,我已经看过使用基于SpongyCastle的单独密钥存储区。但是,这个方向的问题是我需要用一些密码来初始化它(可能存储在我的源代码中)。这意味着,如果设备被盗/植入,获取“安全”密钥存储区的内容相对容易,因为可以从应用程序的反编译源中检索密码。
有没有更好的解决方案,我没有看到这个问题,或者它只是不可能与API版本< 18?
好了,我不能说我喜欢的答案,但我并不感到惊讶。 :)感谢您花时间讨论这个问题,但尼古拉,我真的很感激博客文章。 – jwir3