如果您更详细地解释您的应用程序,我可能会发现我在这里不合适,但现在我将对您的用例和威胁模型做出一些假设。
我的理解是,您有一些敏感信息要在具有间歇性连接的移动设备和一些远程服务之间同步。该服务只有经过身份验证的用户才能访问,并且用户必须向移动设备验证自己的身份才能访问其信息副本,即使它处于脱机状态。
如果您想要强大的安全性,请使用基于密码的加密来加密移动设备的副本。
您可以使用用于对服务进行身份验证的相同密码,但总的来说,我会避免将相同的密钥用于不同的目的。更好的方法是为移动设备设置一个主加密密码,该密码对移动数据库以及用于向同步服务验证用户身份的“密码”进行加密。请注意,服务身份验证密码实际上可以是 SSL 客户端证书身份验证的私钥或基于字符的密码。
您必须评估只有一个密码的风险,但在许多情况下,我认为这为用户提供了便利,再加上一个强主密码提供的安全性,而不是两个弱但容易记住的密码是一个很好的平衡。
请注意,此方法将允许服务访问权限已被撤销的用户继续访问其本地副本,但没有任何新的更新。您可以包含一些由移动软件强制执行的时间限制的概念,但坚定的攻击者可以规避这一点。
如果您只需要玩具安全性,那么您在移动设备上存储正确哈希的建议就足够了,无论您对真实密码还是替代密码进行哈希处理都无关紧要,因为如果您使用正确的哈希,它应该采用它们数十亿年才能找到允许他们访问远程服务的密码冲突。
但是,假设攻击者可以看到密码哈希,是什么阻止他们查看同步数据呢?为什么他们需要恢复密码?加密移动数据库可以防止这种情况发生。