为什么Android指纹认证需要加密对象?

Pon*_*rai 16 android android-fingerprint-api

我已经浏览了谷歌提供的android指纹样本.

https://github.com/googlesamples/android-FingerprintDialog

由于我是安全标准的新手,我无法理解以下内容.

  1. 为什么我们需要使用Keystore,key,CryptoObject等?简单就好了,请指纹管理员对用户进行身份验证,并且只需返回状态(成功/失败)
  2. 每次验证时是否需要生成新密钥?

Oma*_*lak 14

为什么我们需要使用Keystore,key,CryptoObject等?简单就像,请指纹管理员对用户进行身份验证,它只需返回状态(成功/失败)

你不必.您可以在没有a的情况下进行指纹认证CryptoObject,只需传递一个null值.然后就不必乱用密钥库和其他东西了.

CryptoObject在指纹验证上下文中唯一使用的是知道自上次用户通过指纹验证后是否添加了新指纹.

每次验证时是否需要生成新密钥?

如果添加了新指纹,则必须提示密码以验证用户的身份,然后生成新密钥(因为它们在添加新指纹时变为无效).

如果你通过了,你将不会再乱用这些 null CryptoObject

一个问题的观点

指纹认证不需要CryptoObject,事实上它恰恰相反.

在Android上进行加密操作时,可以使用以下对象之一:Cipher,Signature,Mac(和其他).这三个中的一个可用于构建CryptoObject.

当您为这些对象生成密钥时,有一个方法setUserAuthenticationRequired(boolean)nammed 只有在用户之前通过指纹进行身份验证时才设法获取密钥值.

因此,例如,在客户端/服务器通信的情况下,如果客户端可以使用密钥,则意味着他通过指纹进行认证并且他的身份是已知的.

也就是说,您可能想要检查我的库,这使得整个事情变得更加容易:

https://github.com/OmarAflak/Fingerprint

  • _“在指纹认证的情况下,`CryptoObject`的唯一用途是知道自从上次用户通过指纹认证以来是否添加了新的指纹。” _当然,这不是唯一的用途。仅侦听onAuthenticationSucceeded并将其用作是否允许用户做某事的true / false条件不能提供特别强的安全性。 (3认同)
  • 由于以下不正确的陈述而被否决:_在指纹身份验证上下文中使用 CryptoObject 的唯一用途是了解自上次用户通过指纹进行身份验证以来是否添加了新指纹。_ (2认同)

Bqi*_*in1 7

为什么我们需要使用 Keystore、key、CryptoObject...等?简单地它可以>就像,要求指纹管理器对用户进行身份验证,它可以>简单地返回状态(成功/失败)

当我第一次阅读 Android 的指纹时,我也是这么想的。通过我的研究,我想我可以用简单的英语为您总结 CryptoObject,这正是您正在寻找的,因为技术描述无助于理解概念:

CryptoObject 由您的 android 密钥库中的密钥创建,该密钥本质上被认为是“安全的”[1]。因此,将 CryptoObject 传递给指纹管理器可以让管理器拥有一个锚点,以确认指纹认证结果未被篡改,这在理论上是可能的 [2]。

这样想,如果传入null,指纹管理器会盲目相信指纹匹配结果的结果。如果您传入一个由密钥创建的加密对象,由于密钥库只有您的应用程序可以访问该密钥,那么返回的结果可能会包含这个只有您的应用程序可以成功识别的加密对象。这是另一个更符合常识的引用。

“CryptoObject 使该过程更加安全,因为如果该对象不受 KeyStore 的支持,它总是会失败。” [3]

[4] 链接中的图片也给了你一个想法。

[1] https://developer.android.com/training/articles/keystore

[2] https://docs.microsoft.com/en-us/xamarin/android/platform/fingerprint-authentication/creating-a-cryptoobject

[3] https://medium.com/@manuelvicnt/android-fingerprint-authentication-f8c7c76c50f8

[4] https://infinum.co/the-capsized-eight/android-fingerprint-security


Isa*_*aka 1

您的一个问题的答案,

我们将使用别名创建一个密钥,并使用别名来检索该密钥。别名是键中的键。将为应用程序沙箱存储别名列表。它会在后续尝试生成具有相同别名的密钥时检索密钥。

  • 您所说的有关第三方的内容**绝对是错误的**。反正也没有什么数据可以被截获。来自 [Android Doc](https://source.android.com/security/authentication/fingerprint-hal):“因此,原始图像和处理后的指纹特征不得在不受信任的内存中传递。所有此类生物识别数据都需要在传感器硬件或可信内存中进行保护。(TEE内部的内存被认为是可信内存;TEE外部的内存被认为是不可信的。)` (2认同)