首页 > 解决方案 > 如何使用密码处理生物特征?

问题描述

我的应用程序需要密码才能使用。用户第一次打开应用程序时输入他们的密码,我将密码发送到服务器端,他们执行通常的散列+加盐例程。下次用户输入密码时,我将其发送到后端进行验证,并向我发送一个临时令牌以用于进一步查询。它工作正常。

现在我希望用户能够使用生物识别(指纹等)登录。Android 会处理这个问题,并让我知道用户是否通过了生物特征认证。但后来我没有密码发送到后端并获取令牌。我该如何处理?我想我可以存储密码并在生物特征验证通过时发送,但这听起来像是一个巨大的安全漏洞。我可以加密密码,但这会产生存储加密密钥的问题。

我的问题是,像这样处理生物识别登录的常用方法是什么?有没有一种安全的方法来存储密码,所以它只对我的应用程序可见?SharedPreferences可以通过root访问绕过,所以这可能不是一个选择。使用“无系统根”等检测有根电话也不可靠。

标签: javaandroidsecuritybiometrics

解决方案


我将评论中的建议结合起来,并将敏感信息EncryptedSharedPreferences存储在 AndroidKeyStore 中,并将密钥存储在 AndroidKeyStore 中。它工作正常,唯一的问题是MasterKey所需的EncryptedSharedPreferences在 API 22 和 21 上不起作用。是一个解决方法,但我不知道它有多安全。

如果手机已经root,似乎仍然可以绕过它,但现在更困难了。


推荐阅读