3

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

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

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

这里有一些关于 Stack Overflow 的相关问题,最合适的解决方案听起来像是使用像 DPAPI 这样的操作系统服务。

只要密码可以在没有任何用户输入的情况下由软件检索,并且源代码是开源的,那么基本前提是否正确?

4

4 回答 4

6

您可以在此处阅读有关 Pidgin 开发人员的看法:纯文本密码

于 2009-01-21T01:13:34.243 回答
2

如果无需任何用户输入即可通过软件检索密码,则密码将始终可由(适当的技术上和故意倾向的)路人检索。开源或封闭源代码只会影响所涉及的工作量。

于 2009-01-21T01:15:32.943 回答
2

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

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

于 2009-01-21T01:15:45.800 回答
0

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

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

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

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

最好花些精力确保在使用所选加密方案时遵循最佳实践指南。我认为让更大的社区公开查看您的代码实际上会使您的代码更安全。随着更多的观众浏览您的代码,可能会更快地发现漏洞和威胁。

于 2009-01-21T01:16:40.710 回答