Android android.credentials.UNLOCK 在没有密码的情况下初始化密钥库

Jos*_*hon 3 encryption android credentials aes android-keystore

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

nelenkov.blogspot.co.uk 在 android 中存储应用程序机密

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

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

本教程运行良好,但是显示此对话框甚至只显示一次,它会打扰大多数用户。

有什么办法可以跳过这个对话框吗?

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

Ale*_*hak 5

KeyStore不仅可以在 ICS 之前的设备上出现锁定。最简单的KeyStore锁定方法是:

  1. 通过设置 KeyGuard(屏幕锁上的图案、pin 或密码)来初始化 KeyStore
  2. 添加密钥或您存储在 KeyStore 中的任何内容
  3. 前往“设置”>“安全”并将“屏幕锁定”更改为“不安全”,例如“幻灯片”。
  4. 重新启动您的设备。

设备启动后,KeyStore将被锁定。com.android.credentials.UNLOCKIntent 将启动com.android.settings.CredentialStorageActivity,而 Activity 将显示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
Run Code Online (Sandbox Code Playgroud)

KeyStore5 次尝试输入错误密码后被重置。但是重置 KeyStore 实际上并没有将其关闭或取消初始化。KeyStore 保持锁定状态,取消初始化它的唯一方法似乎需要com.android.credentials.RESET. 但这将重置 KeyStore 和 KeyChain(用户安装的证书)。

如果您想静默重置 KeyStore 和 KeyChain,无需用户确认,您可以通过绑定IKeyChainService并调用其reset()方法来完成。

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