Android android.credentials.UNLOCK初始化没有密码的密钥库

时间:2014-03-26 15:53:14

标签: android encryption aes credentials android-keystore

使用随机密钥通过AES加密本地凭据,我按照以下教程尝试安全地存储该密钥,然后能够在以后解密:

nelenkov.blogspot.co.uk storing applicationsecrets in androids

本教程介绍了如何访问系统密钥库并将密码存储在其中。

我面临的问题主要集中在对 UNLOCK android.credentials.UNLOCK )KeyStore的调用上。没有KeyStore初始化的设备(目前API低于14),他们正在显示一个请求8位密码的对话框。

该教程工作正常,但显示此对话框甚至只做一次,它会打扰大多数用户。

有没有办法跳过这个对话框?

如果有人描述了一种更好的方法来保持本地密钥,我会更高兴。

2 个答案:

答案 0 :(得分:2)

8位数密码由您的自定义设备固件或设备管理员强制执行。大多数设备都没有这样的要求。如果想要安全存储某些内容,您必须拥有PIN码,Android会使用它来获取加密密钥。其他选项是自己从您的输入中获取一个键:您可以控制对话的时间和键的缓存,但它是相同的过程。最后,您只需生成一个主密钥并将其存储为私人文件,其他应用程序无法读取它,因此您可以在非root设备上使用。这是Android开发者博客上推荐的方法:

http://android-developers.blogspot.jp/2013/02/using-cryptography-to-store-credentials.html

答案 1 :(得分:2)

KeyStore不仅可以锁定在预ICS设备上。获取KeyStore的最简单方法是:

  1. 通过设置KeyGuard(模式,引脚或。)来初始化KeyStore 屏幕锁定密码)
  2. 添加密钥或您存储在KeyStore中的任何内容
  3. 转到设置>安全和更改屏幕锁定到某些东西"没有 安全",例如,Slide。
  4. 重启设备。
  5. 设备启动后,KeyStore将被锁定。 com.android.credentials.UNLOCK意图会启动com.android.settings.CredentialStorage活动,而活动会显示UnlockDialog,提示您输入密码。

     * KeyStore: LOCKED
     * KeyGuard: OFF/ON
     * Action:   old unlock dialog
     * Notes:    assume old password, need to use it to unlock.
     *           if unlock, ensure key guard before install.
     *           if reset, treat as UNINITALIZED/OFF
    
    5次尝试输入错误密码后,

    KeyStore重置。但重置KeyStore实际上并没有将其关闭或取消初始化。 KeyStore保持锁定状态,取消初始化它的唯一方法似乎是com.android.credentials.RESET。但这将重置KeyStore和KeyChain(用户安装的证书)。

    如果要在没有用户确认的情况下静默重置KeyStore和KeyChain,可以通过绑定到IKeyChainService并调用其reset()方法来实现。

    但我不建议这样做。更好的解决方案是显示一些通知消息,要求用户手动设置屏幕锁定