【问题标题】:Android CryptoObject usage in fingerprintAndroid CryptoObject 在指纹中的使用
【发布时间】:2016-01-12 22:22:42
【问题描述】:

在Android指纹示例代码FingerprintDialog中,启动指纹硬件的方法FingerprintManager#authenticate取参数FingerprintManager.CryptoObject。根据文档,它是object associated with the call or null if none required。描述对我来说仍然不清楚。有人能解释一下我什么时候应该或不应该使用加密吗?谢谢。

【问题讨论】:

    标签: android cryptography fingerprint


    【解决方案1】:

    Android 示例中提供的 FingerprintDialog 示例有点密集,所以让我们分解一下发生了什么:

    1. 配置和生成加密密钥。在此步骤中,您可以指定 Key 只能在 KeyGenParameterSpec.Builder.setAuthenticated(true) 时使用。
    2. 使用 cipherMode(加密/解密)和步骤 1 生成的密钥初始化 Cipher 对象
    3. 使用步骤 2 中的密码初始化 FingerprintCrypto.CryptoObject()
    4. 启动指纹扫描仪并通过调用FingerprintManager.authenticate() 传入第 3 步中的 CryptoObject
    5. 用户成功地使用他们的指纹进行身份验证。 Android 操作系统会将 Key 中的“authenticated”位从 0 设置为 1。
    6. 现在密钥已经过验证,可以通过调用Cipher.doFinal() 来执行任何加密操作。

    如果您尝试通过将null 传递给FingerprintManager.authenticate() 来修改第4 步,则第6 步将失败,因为您尚未获得使用密钥的身份验证。

    希望对您有所帮助。

    【讨论】:

    • 首先非常感谢您的帮助。关于第 1 步,我假设您的意思是 KeyGenParameterSpec.Builder.setUserAuthenticationRequired(boolean required)。我之前已经尝试在第 4 步中传递 null 。这次我尝试将步骤 1 设置为 false 并且能够调用 Cipher.doFinal() 并在指纹认证之前返回结果。密钥与指纹认证流程无关,只是示例代码的一部分,用于演示如何认证密钥的使用。
    • 但另一个问题是,为什么我必须对我在同一个程序中创建的密钥进行身份验证?
    • 默认情况下,密钥库中的密钥无需任何身份验证即可使用。如果你用 true 调用 setUserAuthenticationRequired 那么你必须使用你的指纹来使用密钥。
    • 是的,我想出了那部分。但是我什么时候想用 true 打电话给setUserAuthenticationRequired
    • 我不是安全专家,但我想说,如果你想让攻击者尽可能难以解密你的东西,那么将 setUserAuthenticationRequired 设置为 true 是个好主意。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-12-08
    • 1970-01-01
    • 2016-12-03
    • 2020-06-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多