加密登录密码以在多个设备上使用

Encrypting a login password to use on multiple devices

可能是我想的太多了,想的太多了,给自己打了一个结。我对加密也不太了解,所以没有帮助。

我有一个应用程序,其中包含使用 AES class 加密的字段(我在另一个问题中发现张贴在这里),然后加密的字符串保存在 XML 文件中。现在,用于加密每个字符串的密码由用户提供,并在他们第一次使用该程序时设置。这部分工作正常,我可以根据需要完美地加密和解密数据。

我遇到的问题是,用于加密这些字符串的密码存储在应用程序的配置文件中。最初我想我会使用 DPAPI 来加密这个密码,然后保存在配置文件中,一切似乎都按照我想要的方式工作。用户启动程序,设置密码,添加一些字符串,所有加密和解密都很好,一切都很好。

问题是这在创建密码的计算机上工作正常,但当我尝试在另一台计算机上使用它时,DPAPI 就会抛出错误(我假设是因为 DPAPI 是特定于机器的?)

所以基本上我需要一种方法来加密用户在首次启动时设置并存储在配置文件中的密码,但我不能使用 AES class 我正在用来加密其他数据因为它需要密码来加密!!!

正如我所说,我的 AES class 在加密其他数据方面工作得很好,但我需要一种方法来保护存储在 app.config 文件中的密码,而不是使用 DPAPI 加密它,所以我可以在其他设备上正常使用。

我希望我的头很痛!!!!

非常感谢任何帮助

附加信息:

该应用程序是一个非常简单的 winform 应用程序,只要输入正确的密码就可以访问数据,程序存储在 USB 记忆棒上,可以连接到任何计算机并解密和查看数据。没有用户结构,您只需要正确的密码即可访问应用程序和查看数据。用于访问应用程序的密码是用于加密数据的密码。

重复的问题:这个问题是不同的,因为在他们的情况下 DPAPI 做了他们在我的情况下所需要的,它并不像我在原来的问题中已经表达的那样!

您没有存储密码。您要求用户提供它。

如果您必须将密码物理存储在 USB 设备上,请不要使用密码本身(或从计算机上的当前用户生成密钥的 DPAPI)。

在第一次设置时,要求用户输入密码,使用 SAFE 哈希函数(来自 SHA-2 系列)对其进行哈希处理并保存密码 Hash(Plain password)=Cipher 稍后当您想要加密或验证时,请使用密码进行。这样您就可以在您的设备上保留密码的安全副本,而无需覆盖用户的密码,并且仍然使用用户特定的字符串来加密数据。

请记住,如果攻击者获得哈希,此方法仍然会使用户容易受到字典攻击。