android 检测设备安全性的变化

euoag5mw  于 2023-01-28  发布在  Android
关注(0)|答案(1)|浏览(298)

我正在开发一个使用密钥库密钥来启用服务器身份验证的应用。当用户登录时,我正在创建一个密钥对,该密钥对需要通过指纹或设备凭据进行身份验证。
我遇到的问题是,每次用户通过注册指纹或更改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配置的更改?

jhdbpxl9

jhdbpxl91#

查看isInvalidatedByBiometricEnrollmentsetInvalidatedByBiometricEnrollment的文档。
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
因此,如果你想让你的密钥因生物统计学的改变而失效,它们不能有持续时间,它们必须是一次性的。
我们注意到,即使设置了有效期,密钥实际上也无法使用,但您不会得到正确的异常。而且您无法区分超出有效期的使用或密钥是否无效。

相关问题