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


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

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

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

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

6553
2017-09-13 12:27


起源

“简单就好了,请指纹管理员对用户进行身份验证,并且只需返回状态(成功/失败)” - 请参阅 该 authenticate() 方法 FingerprintManager。该 CryptoObject 可 null。 - CommonsWare
谢谢,我打算为我的应用程序使用指纹身份验证,是否仍然建议使用密钥,密钥库等?你能指出我理解这个概念的方向吗? - Ponsuyambu Velladurai
我建议您在单独的Stack Overflow问题中进行解释 详细 你想要的指纹认证是什么以及你想要保护它究竟是什么(API密钥?用户数据?其他什么?),并询问指纹API的哪些方面最适合您的需求。 - CommonsWare


答案:


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

你不必。您可以在没有指纹认证的情况下进 CryptoObject,只是通过一个 null 值。然后就不必乱用密钥库和其他东西了。

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

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

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

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

一个问题的观点

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

在Android上进行加密操作时,可以使用以下对象之一: 暗号签名苹果电脑 (和别的)。这三个中的一个可以用来构建一个 CryptoObject

为这些对象生成键时,会有一个方法被命名 setUserAuthenticationRequired(boolean) 它设法获得键值 只要 如果用户之前通过指纹进行了身份验证。

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

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

https://github.com/OmarAflak/Fingerprint


10
2017-07-11 14:29



“唯一的用途 CryptoObject 在指纹验证的情况下,要知道自上次用户通过指纹验证后是否添加了新指纹。“ 这当然不是唯一的用途。只是在听 onAuthenticationSucceeded 并将其用作 true/false 是否允许用户做某事的条件并不能提供特别强的安全性。 - Michael
如果您使用受指纹保护的密钥来执行加密操作,例如创建数字签名或解密某些敏感数据,则需要更加难以绕过。 - Michael


回答你的一个问题,

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


1
2017-10-20 12:16



你能解释一下这个吗? .There is a chance that third party can intercept the results returned by fingerprint scanner. Crypto object is used to encrypt the results returned by fingerprint scanner. - Yashasvi
你对第三方说的是什么 绝对错误。无论如何,没有数据被截获。从 Android Doc : Thus, raw images and processed fingerprint features must not be passed in untrusted memory. All such biometric data needs to be secured within sensor hardware or trusted memory. (Memory inside the TEE is considered as trusted memory; memory outside the TEE is considered untrusted.) - Omar Aflak


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

当我第一次阅读有关android的指纹时,我也想到了同样的事情。通过我的研究,我想我可以用简单的英语为您总结CryptoObject,这正是您所寻找的,因为技术描述无助于理解概念:

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

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

“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


0
2018-06-11 16:10