加密开源桌面应用程序的磁盘密码

时间:2009-01-21 01:07:19

标签: windows security encryption passwords password-storage

是否可以在本地系统(Windows XP)上存储只能由应用程序本身访问的密码?

我的本​​能回答是“不”。即使使用某种散列或加密,我也会认为只要源代码可用,那么确定的搜索者总是可以使用它来检索密码。

我正在开发一个个人开源爱好项目,我想让用户可以选择在磁盘上存储密码,这样他们每次使用软件时都不需要输入密码。可以存储的密码的一个示例是用于在其网络的代理服务器上进行身份验证的密码。

Stack Overflow上有一些相关的问题,最合适的解决方案就像使用像DPAPI这样的操作系统服务。

基本前提是否正确,只要软件可以在没有任何用户输入的情况下检索密码,并且源代码是开源的,那么密码将始终由(在技术上合理且倾向于倾向)的传递者可以检索到 - 由?

4 个答案:

答案 0 :(得分:6)

你可以在这里阅读关于Pidgin开发者的观点:http://developer.pidgin.im/wiki/PlainTextPasswords

答案 1 :(得分:2)

如果软件可以在没有任何用户输入的情况下检索密码,那么密码将始终由(适当的技术上和故意倾斜的)路人检索。开放源或封闭源仅影响涉及的工作量。

答案 2 :(得分:2)

在UserData模式下使用DPAPI只允许您计算机上的帐户访问加密数据。

它根据您的登录凭据生成主密钥,并将其用于加密。

答案 3 :(得分:0)

当然,您可以编写一个程序来安全地存储密码。

使用AES,您可以让程序生成AES密钥,并将该密钥存储在操作系统保护区域中。在WinXP中,这是使用DPAPI加密的注册表。因此,访问密钥的唯一方法是对机器进行物理访问。

您需要确保在生成AES密钥时以加密安全的方式执行此操作。只使用RAND将不起作用,也不会生成随机字符串。

开源与安全性关系不大(在我看来)。鉴于逆向工程源代码工具的复杂程度,即使您有一个封闭的源代码解决方案,人们决定窥探您的代码也可以这样做。

您可以更好地花费精力,确保在使用所选加密方案时遵循最佳实践指南。我认为让一个更大的社区公开看待你的代码实际上会让你的代码更安全;如果有更多的受众查看您的代码,很可能会很快发现漏洞和威胁。