2017-02-07 49 views
1

如果这是一个愚蠢而明显的问题,请原谅我,但我无法搜索正确的资源。我不是安全专家,我正在努力了解如何正确去做这件事。如何在没有用户输入密码的情况下在C#中加密和解密敏感信息

这里是场景。我在内部服务器上有一个内部应用程序:不是有史以来出去到客户端网站。此应用程序具有用于与安全Web服务交谈的用户名和密码对数据库。我不需要将这些密码保密给同事,但是我希望在服务器受到攻击和数据被盗的情况下保护它们。

传统上,人们会盐和散列它们。这是一个我原则上理解的过程,但它取决于用户输入的密码,然后可以对存储的散列进行验证。对我来说并非如此。

因此:在各处搜索有各种解决方案,它们使用固定的“密码短语”来保护字符串。这里有一个例子,https://stackoverflow.com/a/10177020/271907,这里是另一个https://stackoverflow.com/a/10366194/188474

然而,据我所知,这些都没有提供一个有用的解决方案在我的情况。这个“密码短语”将被存储在的某处为我的应用程序来完成其工作。如果我将它硬编码到应用程序中,它可以被反向设计。如果我将它加密并放在一个单独的文件中,它可能会被盗用并使用彩虹表工作。

我看着使用reg_iis加密一个密钥按照Encrypting Web Config using ASPNET_REGIIS,但是,老实说,只是让我更加困惑。我甚至不知道这些加密的配置文件是否可以在机器之间移植,或者是否必须在开发和测试之间进行重新加密并且实时生效。我不知道他们有多安全:AFAIK必须有一个密钥某处,如果有密钥可以被破坏。

为了进一步泥泞的水域,我发现这个答案不使用键:https://stackoverflow.com/a/10176980/271907。然而,作者承认它已过时,我不知道结果有多安全。

有没有任何一种明智的方法来解决这个问题,并没有在安全的地方留下一个漏洞?

+0

“此应用程序具有用于与安全Web服务对话的用户名和密码对的数据库” - 因此您必须能够访问明文密码,以便您可以将用户名\密码发送到任何Web服务你想谈谈? –

+0

你能澄清一下吗? “这个应用程序有一个用于与安全Web服务对话的用户名和密码对的数据库,我不需要将这些密码保存在同事的秘密之中”它是否以纯文本和静态值的形式存储在数据库中? – jtabuloc

回答

1

任何解密,你解密密码来检查它是从根本上是不安全的因为你的应用程序必须知道如何做解密。

您可以通过不在代码中存储解密密钥来增加难度,但无论您将它放在哪里,黑客可能会危及您的代码,也可能访问它可以访问的任何内容。

即使您的应用程序安全性非常稳固, 您的密码仍然是纯文本在您的数据库中,如果这样做会受到威胁,那么您的许多用户都会被暴露。

这就是说 - 这是一个只有内部的低风险系统。您的最佳行动方式可能是让您的老板知道相对风险与适当安全成本之间的关系,并让他们进行明确的业务呼叫(并承担未来的责任)。

只有这样做并没有在安全性方面留下一个漏洞,就是用单向算法对密码进行散列和腌制。当前密码是纯文本的事实不应该是一个问题 - 有很多方法可以推动用户对它们进行加密,但最简单的方法就是为他们做:只要他们有纯文本密码,他们下次登录时加密它。然后经过适当的等待(取决于用户登录的频率),请删除旧密码并检查新散列。

的金科玉律是:如果您存储密码,你必须散列他们的方式,你不能扭转

唯一的另一种选择是让你无法验证在所有 - 使用NTLM或AD或者OAuth来获得一些其他服务来验证用户,并相信该源。


如果您想要确保应用程序使用自身的凭据,那么您也有类似的问题,但重点会转移。如果主机受到攻击,您仍然无法避免暴露,但大多数攻击只会针对文件。

如果您的所有连接详细信息都保存在web.configappsettings.json中,这可能会造成问题,因为这些文件可能会泄露您的SQL服务器或其他服务密码。

这是您可以使用ASPNET_REGIIS的地方 - 它允许您添加IIS可以访问的秘密配置,但这不是以纯文本形式与网络文件保存的。

在.NET核心中有新的Microsoft.Extensions.SecretManager.Tools做同样的事情。

这两种方法都会为任何应用程序凭证添加一层保护,否则这些应用程序凭据将以纯文本形式存储在磁盘上。攻击者必须妥协机器才能看到它们,而不仅仅是文件。

在这两种情况下,这些配置细节都不再可移植 - 您必须在每台服务器上重新设置它们(并重新加密)。

但是,您只需真正需要实时额外保护 - 即可在开发或测试沙箱中使用纯文本配置,然后使用活动服务器上的加密设置覆盖详细信息。

+3

这个问题不是关于用户密码。这是关于保护服务帐户凭证,这是一个根本不同的问题。 – Xander

+0

@Xander我修改了答案。 – Keith

相关问题