KeyStore Provider 中不需要加密的密钥是什么?

What is keys which do not require encryption in KeyStore Provider?

我想使用 Android KeyStore Provider(在 Android 6 及更高版本上)存储我的密钥。但是我不明白一件事:当用户更改锁屏设置时,密钥会被删除吗?

在更改列表中 Android 6 描述:

Keys which do not require encryption at rest will no longer be deleted when secure lock screen is disabled or reset (for example, by the user or a Device Administrator). Keys which require encryption at rest will be deleted during these events.

但是不需要加密的密钥是什么?这是否意味着我应该在不安全地存储密钥(不加密)之间进行选择,或者当用户更改设置时它将被删除?

需要用户身份验证的密钥是使用 setAuthenticationRequired on KeyGenParameterSpec on API 23+:

生成的
KeyGenParameterSpec
  .Builder(...)
  .setUserAuthenticationRequired(requiresAuth)
  ...
  .build()

并在 API 上的 KeyPairGeneratorSpec 上使用 setEncryptionRequired 19-22:

specBuilder = KeyPairGeneratorSpec.Builder(context)
if (requiresAuth) {
  specBuilder.setEncryptionRequired()
}