当网站存储纯文本密码时,已经存在很多问题。但是这个有点不同。
我使用一个开源(见下文)软件来玩游戏。它需要一个不直接链接到任何服务的用户帐户。登录包括在对话框中输入用户名和密码,但该对话框还提供“保存密码”选项。
此选项使用专为在跨平台应用程序中存储设置而设计的 API 保存密码。但由于它旨在保存可以在应用程序之外更改的非机密设置,因此它以纯文本格式保存数据。它在不需要任何特殊访问权限的位置执行此操作。例如,在 Windows 上,API 将设置存储在注册表中(即使是非管理员也至少具有只读访问权限的位置)。
API 以纯文本形式传递密码,从而存储纯文本密码。这意味着我现在可以在我的机器上从非提升提示符运行一个简单的命令,并获取我最后使用的纯文本密码。
此外,我计算机上的任何软件都可以轻松访问此信息。我最近写了一个小程序来更新软件使用的某些文件。但是,我开始收到抱怨,即使它找到了文件,程序也无法编辑它们。事实证明,用户并没有以管理员身份运行该程序。但这意味着即使我的程序不允许访问程序的游戏文件,它也可以读取包含纯文本密码的相同注册表项,即使 Windows 的安全性已将其作为下载程序阻止也是如此。
我之前提出过这个问题,但尽管我尽了最大努力,但似乎没有人认为这是一个严重的问题(见下文)。
问题:我是在“无所事事”,还是在本地以纯文本形式存储密码就像我认为在任何地方以纯文本形式存储密码一样严重?
注意:它是开源的确实意味着我可以“修复”这个问题,但是有一些问题:
它是完全跨平台的(并且没有使用特定于平台的代码)。我知道可以以相对安全的方式存储密码的大多数系统都高度依赖于平台(如 DPAPI)
主要的开发团队非常小,似乎没有一个人了解保护密码的相关性。我之前提出过这个话题,我得到的回应使 PR 不太可能得到任何结果。据我所知,唯一一个使用该软件运行服务器的人将其视为“为争论而争论”。他的回应是:
“我不知道我是否同意责任落在工具身上,这就像说我们不应该制造枪支,因为它们可能会被以不好的方式使用,这取决于使用工具的人来承担责任”。 ..“如果有人愚蠢到将银行帐户密码放入[程序],也许他们应该考虑对安全性进行一些研究”。
然后我回忆起看到一些关于加密存储的密码,所以我试图说服他,一些相同的推理要求数据库应该加密应用于本地存储密码的密码。但他不同意(似乎密码被加密的事实有点像货物崇拜编程):
“数据库是可公开访问的[我不明白为什么它应该是另一个问题],那完全不同。你的机器不应该坐在外面让人们访问”......“再一次,如果你机器在没有保护的世界上晃来晃去,别哭了”
普通用户似乎也不了解相关性,因此分叉存储库并提供修复不会做任何事情。由于该软件是一款没有排名或货币化的免费游戏,他们不明白为什么我会如此担心有人发现我的密码(或者他们为什么应该这样做)。知识渊博的人只是不理会它,说如果他们的密码不是该帐户独有的,那是用户的错。
我完全不同意应该有“保存密码”功能。众所周知,在本地存储密码很难正确完成(即使像 DPAPI 这样的系统也远非完美)。我很少觉得提供这些功能是值得的。我尤其看不出这样的程序有什么意义。