正在检测设备安全性的更改



我正在开发一个应用程序,该应用程序使用密钥存储密钥来启用与服务器的身份验证。当用户登录时,我正在创建一个密钥对,该密钥对需要指纹或设备凭据使用身份验证。

我遇到的问题是,每当用户通过注册指纹或更改PIN/PASSWORD/PATHern来更改设备的安全性时,我都会试图让密钥失效。

我知道密钥规范有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/Patter/密码配置的更改?

查看isInvalidatedByBiometricEnrollmentsetInvalidatedByBiometricEnrollment的文档。

isInvalidatedByBiometricEnrollment

如果在注册新的生物特征或删除所有注册的生物特征时密钥不可逆地无效,则返回true。这只对每次使用都需要生物特征用户身份验证的密钥有效。

^重要部分是最后一位has effect only for keys that require biometric user authentication for every use.

setInvalidatedByBiometricEnrollment

设置是否应在生物特征注册时使此密钥无效。这仅适用于需要用户身份验证的密钥(请参阅setUserAuthenticationRequired(布尔值((,并且如果未设置正有效期(请参阅SetUserAuthenticationValidationDurationSeconds(int(,这意味着该密钥仅对生物特征身份验证有效。

^其中的重要部分是if no positive validity duration has been set

因此,如果你想让你的钥匙因生物测量的变化而失效,它们就不能有持续时间。它们必须是一次性的。

我们已经注意到,即使密钥设置了有效期,它们实际上也无法使用,但您不会得到正确的Exception。并且您无法区分在持续时间之外的使用和密钥是否无效。

相关内容

  • 没有找到相关文章

最新更新