使用Android KeyStore存储用户身份验证凭据

时间:2016-10-05 14:53:33

标签: android authentication keystore fingerprint android-keystore

我正在尝试用户身份验证方法(确切地说是指纹),我也在研究Android KeyStore。我正在尝试构建一个允许用户设置指纹的系统,该指纹将用户登录到我的服务器。目前,服务器需要POST请求,该请求需要有效的用户名/密码组合。

我有一些关于它如何工作的问题,因为我只有初学者对Fingerprint API和KeyStore如何工作的理解。

1)当我提示指纹并获得成功的回复时(这很容易完成) - 如何将其转换为有效的用户名/密码,以便我可以启动POST请求?我是否需要将用户名和密码存储到KeyStore中?

2)设置KeyStore时,看起来究竟如何?我是否需要为用户名和密码设置别名? “myapp_user”,“myapp_pass”例如?

3)如何将用户名和密码的值存储到KeyStore

4)我是否正确地接近这个问题?有没有更好的方法将指纹安全地链接到用户名/密码组合?

感谢您的帮助!

2 个答案:

答案 0 :(得分:3)

使用AndroidKeystore的一般过程是在AndroidKeyStore中生成一个键。该密钥永远不会离开密钥库(无法导出),但只要您使用特定算法(并非所有算法都受支持),您就可以使用它。您可以看到here哪个Android版支持哪种加密类型。

在Android API 23+上,您可以直接生成AES密钥(在AndroidKeyStore中),并使用该AES密钥加密您的使用数据,例如您提到的用户凭据。

在API23之前需要执行其他步骤:首先在AndroidKeyStore中生成RSA密钥,然后在AndroidKeystore之外生成随机AES密钥(因为不支持AES内部)。然后使用您在AndroidKeyStore中生成的RSA密钥加密生成的AES密钥,并将加密的AES密钥保存到私有应用程序数据目录中。

之后,您可以在选项1中使用生成的AES密钥加密用户凭据。

答案 1 :(得分:0)

我有同样的要求。下面是步骤。

  1. 注册指纹选项时,用户将提供用户名密码,然后是指纹。
  2. 我们需要在android商店中生成密钥并将其传递给服务器(用户名,密码和生成的密钥)。
  3. 在服务器中,他们将保存与用户名和密码对应的密钥。
  4. 每当用户尝试使用finger pint登录时,从客户端我们需要在指纹认证成功后获取密钥并将其传递给服务器。
  5. 在服务器中,他们将检查已保存该密钥的表行(服务器数据库),并使用相应的用户名和密码。
  6. 我怀疑这个关键是不变的。我们将密钥传递给服务器端,同时注册指纹t和用户名密码。因此,如果用户再次尝试登录并创建密钥,它将保持不变。