通常要求在应用程序中安全地存储用户凭证(用户ID /用户密码),并在下次应用程序启动时自动使用它们,但我无法弄清楚如何在没有应用程序的情况下执行此操作用户互动。
使用JSON Store我需要一个密码来加密信息,所以如果我将用户凭据存储在JSON Store中,我需要向用户询问用于加密信息的密码。
我想出的一个解决方案是将用户ID存储在没有加密的JSON存储中,并将密码存储在用用户ID作为密码加密的JSON存储中。可能这个解决方案提供了比不加密任何东西更多的安全性,但我认为这不是一个完整的解决方案。
正如评论中所解释的那样,这是一个非常糟糕的主意。
是否有任何解决方案可以安全地存储用户凭据并在没有用户交互的情况下恢复它们?
答案 0 :(得分:2)
您可以在iOS上使用the Keychain API。 Android doesn't seem to have an equivalent API
我发现最完整的解决方案是将用户ID存储在没有加密的JSON存储中,并将密码存储在使用用户ID作为密码加密的JSON存储中。可能这个解决方案提供了比不加密任何东西更多的安全性,但我认为这不是一个完整的解决方案。
我会强烈建议不要这样做,如果您以明文形式存储加密密钥(用户ID),那么攻击者只需使用它来获取密码。
更新(2014年8月27日)
你应该考虑:
Hashing - 您可以哈希想要保护的值。这些是单向函数,因此一旦您对其进行哈希处理,您就无法获得密码。但是,您可以验证用户是否提供了正确的密码。例如:首先登录您store( hash(password) )
,然后在下次登录时进行比较hash(password_provided) == stored_password_hash
。如果匹配,则用户提供相同的密码。您还应该使用salt。
你可以让用户使用像ABPadLockScreen这样的库来设置一个引脚(你可能也可以找到或实现Android类似的东西)。然后,您可以使用该引脚作为PBKDF2输入来生成加密密钥(当您将密码作为密码传递时,JSONStore将为您执行此操作)。我建议让用户只尝试少量错误的引脚号,特别是如果引脚只是数字和短路,这样他们就可以通过尝试各种组合轻松猜出引脚。这里的想法是一个引脚比它们的密码更容易记忆和输入。
仅供参考 - 有一个类似于StackOverflow的Stack Exchange站点,但是出于安全问题here。