如何在移动应用程序中安全地存储密码

时间:2018-02-20 15:28:38

标签: security mobile-application

我花了最后几天阅读文章和OWASP,这是我想要的设计。我的应用会将数据保存在云中。密码不是一个简单的密码,所以每次进入密码都会令人尴尬。该应用程序经常使用,所以我想保存密码。

我的建议如下。请写下你的反对意见:

  1. 用户输入凭据
  2. REST服务对用户进行身份验证,并提供某种有效数小时的令牌
  3. REST服务提供与此用户关联的公钥
  4. 移动应用程序使用此公钥加密密码
  5. 如果令牌过期,应用程序会向REST服务发送用户名和加密密码
  6. REST服务查找私钥并验证解密密码
  7. REST服务返回当前令牌
  8. 备份REST服务将使用令牌对用户进行身份验证。它可能会返回令牌过期错误。

    我打赌两分钱,这种方法对于非银行应用是安全的。我错过了一些空洞吗?攻击者甚至可以拥有root访问权限,反编译混淆的应用程序,修改二进制文件,但他无法在移动设备上获取密码。即使您喜欢该提案,也请发表评论,以便获得积极反馈。

    资源:

1 个答案:

答案 0 :(得分:1)

我会避免将用户凭据存储在设备上,即使它们已加密。它引入了一些安全风险以及您必须考虑的一些业务逻辑,特别是当用户更改密码时您会做什么?在您描述的方法中,应用程序将继续发送使用用户公钥加密的旧密码,并且身份验证将失败。

我建议使用OpenID Connect和OAuth2。 OpenID Connect将处理身份验证部分和OAuth2以进行授权。 OAuth2规范具有刷新令牌的概念,可用于在访问令牌过期后续订。

另一个好处是,您可以将身份验证委派给用户熟悉的服务,如Facebook,Google等,这可以带来更好的用户体验。

有一些关于如何使用OpenID Connect和OAuth2与Google集成的信息:https://developers.google.com/identity/protocols/OpenIDConnect。 Facebook等其他提供商也有类似的文档。如果您更喜欢管理自己的身份,甚至可以使用IdentityServer,http://docs.identityserver.io/en/release/

之类的东西