我正在开发一个使用密钥库密钥来启用服务器身份验证的应用。当用户登录时,我正在创建一个密钥对,该密钥对需要通过指纹或设备凭据进行身份验证。
我遇到的问题是,每次用户通过注册指纹或更改PIN/密码/模式来更改设备中的安全性时,我都试图使密钥无效。
我知道Key规范中有setInvalidatedByBiometricEnrollment()方法,但据我所知,它只会在生物特征发生变化时使密钥无效,如果用户只使用设备凭据,这对我没有帮助。此外,该方法是在API 24上添加的,我的目标设备是从API 23开始的。
这是我创建密钥的方法:
//Purposes of the key
int keyPurp =
KeyProperties.PURPOSE_ENCRYPT | KeyProperties.PURPOSE_DECRYPT |
KeyProperties.PURPOSE_SIGN | KeyProperties.PURPOSE_VERIFY;
//Init a builder for the key.
KeyGenParameterSpec.Builder keyBuilder = new KeyGenParameterSpec.Builder(keyAlias,keyPurp)
//We set the valid formats of the digests for signing
keyBuilder.setDigests(KeyProperties.DIGEST_SHA256, KeyProperties.DIGEST_SHA512);
//Require the user to authenticate and session expiry
keyBuilder.setUserAuthenticationRequired(true);
keyBuilder.setUserAuthenticationValidityDurationSeconds(10);
KeyGenParameterSpec keySpec = keyBuilder.build();
//Initialize the generator of the keys
generator.initialize(keySpec);
//Get the keys
generator.generateKeyPair();
是否有任何Android API可以检测Pin/Pattern/Password配置的更改?
1条答案
按热度按时间jhdbpxl91#
查看
isInvalidatedByBiometricEnrollment
和setInvalidatedByBiometricEnrollment
的文档。isInvalidatedByBiometricEnrollment
如果在注册新的生物识别信息或删除所有已注册的生物识别信息时密钥不可逆地失效,则返回true。这仅对每次使用都需要生物识别用户身份验证的密钥有效。
^最后一位是
has effect only for keys that require biometric user authentication for every use.
setInvalidatedByBiometricEnrollment
设置此密钥是否应在生物识别注册时失效。这仅适用于需要用户身份验证的密钥(请参阅setUserAuthenticationRequired(boolean)),并且在未设置正有效期的情况下(请参阅setUserAuthenticationValidityDurationSeconds(int),表示密钥仅对生物识别身份验证有效)。
^重要的部分是
if no positive validity duration has been set
。因此,如果你想让你的密钥因生物统计学的改变而失效,它们不能有持续时间,它们必须是一次性的。
我们注意到,即使设置了有效期,密钥实际上也无法使用,但您不会得到正确的异常。而且您无法区分超出有效期的使用或密钥是否无效。