2016-07-06 95 views
-2

这可能是因为我对此有太多的想法,并且已经过了复杂的事情,并且把自己束缚在了一个结中。我对加密也不太了解,所以没有任何帮助。加密在多个设备上使用的登录密码

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

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

的问题是能正常工作的口令创建上,但是当我尝试使用它在另一台计算机上DPAPI抛出一个错误(我假设,因为DPAPI是该机的具体?)

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

正如我所说我的AES类可以完美地加密其他数据,但我需要一种方法来保护存储在app.config文件中的密码,而不是使用DPAPI对其进行加密,以便我可以在其他设备上使用它错误。

我希望这是有道理的,我的头疼!

任何帮助非常赞赏

附加信息:

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

重复问题:这个问题是不同的,因为在他们的情况下,DPAPI在我的情况下做他们需要的东西,而不是我已经在我的原始问题中表达过!

+0

你为什么将它存储在配置文件中?你不能将这些敏感信息存储在数据库中吗?此外,如果密码存储在原始用户的配置文件中,您将如何让用户能够从另一台设备登录? –

+0

谢谢Matias。该应用程序是一个非常简单的WinForm应用程序,当输入正确的密码并允许程序存储在USB存储器中时,它可以访问数据,使其可以连接到任何计算机并解密和查看数据。没有用户结构,您只需要正确的密码即可访问应用程序并查看数据。用于访问应用程序的密码是用于加密数据的密码。 – Craig

+0

您可以将密码存储在加密文件中而不是配置文件中。配置文件是纯文本。 –

回答

1

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

+0

但我必须检查用户提供的密码是否正确访问数据。用户在第一次运行程序时确实提供了密码。这将使用此密码和盐对它们输入的任何数据进行加密。当他们接下来打开应用程序时,系统会要求他们输入密码以查看数据。他们只被要求提供一次密码。 – Craig

+0

验证密码是微不足道的:如果数据解密正确,密码是正确的。向存储的数据添加一个[HMAC](https://en.wikipedia.org/wiki/Hash-based_message_authentication_code)以验证它。存储密码是**不可能**以安全的方式进行。 –

+0

由于您标记了'dpapi':是的,您可以使用DPAPI凭证漫游在一台机器上加密并在另一台机器上解密。但只能在一个域**内,并且不涉及密码**,因为所有加密都委派给DPAPI。 –

-2

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

在第一次安装,要求用户输入密码,具有安全散列函数Hash它(从SHA-2系列)并保存密码Hash(Plain password)=Cipher 后来,当你要加密或认证,与密码做。这样,您可以在设备上保留密码的安全副本而不覆盖用户的密码,并且仍然使用用户特定的字符串来加密数据。

请记住,如果攻击者抓住散列,此方法仍会使用户容易受到字典攻击。

+0

您实际上存储了纯文本密钥和加密数据。为什么首先加密,如果解密密钥在那里? –

+0

正如我理解的问题,该程序将在USB棒上,而信息将存储在指定的计算机上,因此它不会在同一台设备上。 –