How to store passwords and sensitive data in a desktop client application (Java)?
我想制作一个应用程序,它将监控用户的电子邮件帐户接收电子邮件,以及他的Twitter帐户的tweets。因此,用户必须提供登录凭据。我的疑问是如何和在哪里存储这些敏感数据?我不希望我的应用程序打扰用户反复询问这些问题。
此外,如果我应该加密然后存储这些数据,那么我应该如何保护我在应用程序中使用的密钥?
加密的目的是使明文的保密性依赖于较小密钥的保密性。
在这种情况下,加密对您来说是无用的,因为您也没有办法存储密钥。
相反,您需要使用由第三方管理的一些现有秘密(使用密码),并使用它来派生密钥。
在Windows上,您可以使用DPAPI,它最终由用户的登录密码支持。如果用户忘记了密码(或者密码是从其他帐户更改的),您的数据将无法恢复地丢失。
请注意,这不会针对以该用户身份运行的代码进行防御。你需要决定你要防御的是什么。
如果你真的需要它(这不是个好主意,但是…)你可能想要为密码创建加密存储,比如火狐。用户将使用主密码保护密码。
我认为使用的密码是你的应用程序范围,并使用该密码加密所有其他密码,当应用程序说需要Twitter时,使用该密码解密…进一步将主密码的盐散列保存到磁盘上。
答案是无处可寻。您不应该以加密的形式存储密码。"正确"的方法可能是模拟类似Web应用程序的行为。实际上,如果你登录Twitter,你可以选择"记住我"复选框,Twitter下次不会要求你输入密码,对吗?如何实施?
通常,特殊令牌存储在客户机端的cookie中。cookie被发送到服务器并用于身份验证。cookie有过期日期,所以当它的时间结束时,它将被自动删除。
除非桌面应用程序有更好的解决方案,否则我建议您尝试使用这种机制。