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

时间:2016-09-13 12:27:22

标签: android android-fingerprint-api

我已经浏览了Google提供的Android指纹样本。

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

由于我不熟悉安全标准,我无法理解以下内容。

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

3 个答案:

答案 0 :(得分:12)

  

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

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

指纹身份验证上下文中唯一使用CryptoObject的方法是知道自上次用户通过指纹进行身份验证后是否添加了新指纹。

  

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

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

如果您通过null CryptoObject

,您再也不必弄乱这些

一个观点问题

指纹认证不需要加密对象,事实上它恰恰相反。

在Android上进行加密操作时,您可以使用以下对象之一:CipherSignatureMac(以及其他对象)。这三个中的一个可用于构建CryptoObject

当您为这些对象生成密钥时,有一个方法被命名为setUserAuthenticationRequired(boolean),如果用户之前通过指纹进行了身份验证,则会设法获取的密钥。

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

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

https://github.com/OmarAflak/Fingerprint

答案 1 :(得分:2)

  

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

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

CryptoObject是由你的android密钥库中的一个密钥创建的,这个密钥本身被认为是安全的#34; [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

答案 2 :(得分:1)

回答你的一个问题,

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