【发布时间】:2013-09-21 22:19:13
【问题描述】:
以下问题是用android 4.3和nexus 7测试的
在Android 4.3版本使用KeyStore时,将锁屏设置为none后key被删除,之前是否设置了锁屏没有关系。
要重现这一点,您可以使用位于
下提供的 android 示例
“sdk\samples\android-18\security\keystore\BasicAndroidKeyStore”。
运行应用程序后:
- 列表项
- 符号(应为空)
- 生成密钥
- 签(会签)
- 关闭应用程序
- 重新开始
- 签(会签)
- 将屏幕锁定设置为“无”(即使之前没有)(可在设置 -> 安全 -> 屏幕安全下找到)。
- 返回应用程序并再次尝试签名(将返回 null)
在检查 android 源代码时,我发现在第 639 行中,密钥库似乎已被重置。见:https://android.googlesource.com/platform/frameworks/base/+/52c489cd63cca0361f374f7cb392018fabfa8bcc/core/java/com/android/internal/widget/LockPatternUtils.java
有人知道为什么会这样吗?我向android社区报告了这个 https://code.google.com/p/android/issues/detail?id=60176
编辑: 在 android 版本 4.2 中,如果保存了某些键,则无法将锁定屏幕设置为无。在这样做之前,您必须先删除您的凭据。
【问题讨论】:
-
如果为空,则有条件地重置密钥库。如果非空,我们只是切换键保护类型
-
感谢您的回复。不幸的是,这并不能解决问题。在上述情况下,密钥库不是空的。我认为,isEmpty 返回 true 的问题是,keyStore.isEmpty() 是从 android 系统调用的,而 android 系统有一个不同于应用程序的 UID。
-
有什么解决办法吗?
标签: android keystore android-keystore android-4.3-jelly-bean