【问题标题】:What is keys which do not require encryption in KeyStore Provider?KeyStore Provider 中不需要加密的密钥是什么?
【发布时间】:2018-06-27 11:05:07
【问题描述】:
我想使用 Android KeyStore Provider(在 Android 6 及更高版本上)存储我的密钥。但我不明白一件事:当用户更改锁屏设置时,密钥是否会被删除?
在 Android 6 的更改列表中描述:
不再删除静态不需要加密的密钥
当安全锁屏被禁用或重置时(例如,由用户
或设备管理员)。需要静态加密的密钥将
在这些事件期间被删除。
但是什么是不需要加密的密钥呢?这是否意味着我应该在不安全的存储密钥(没有加密)之间进行选择,或者当用户更改设置时它会被删除?
【问题讨论】:
标签:
android
encryption
keystore
【解决方案1】:
需要用户身份验证的密钥是在 API 23+ 上的 KeyGenParameterSpec 上使用 setAuthenticationRequired 生成的:
KeyGenParameterSpec
.Builder(...)
.setUserAuthenticationRequired(requiresAuth)
...
.build()
并在 API 19-22 上的 KeyPairGeneratorSpec 上使用 setEncryptionRequired:
specBuilder = KeyPairGeneratorSpec.Builder(context)
if (requiresAuth) {
specBuilder.setEncryptionRequired()
}