如果这是一个愚蠢而明显的问题,请原谅我,但我无法搜索正确的资源。我不是安全专家,我正在努力了解如何正确去做这件事。如何在没有用户输入密码的情况下在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。然而,作者承认它已过时,我不知道结果有多安全。
有没有任何一种明智的方法来解决这个问题,并没有在安全的地方留下一个漏洞?
“此应用程序具有用于与安全Web服务对话的用户名和密码对的数据库” - 因此您必须能够访问明文密码,以便您可以将用户名\密码发送到任何Web服务你想谈谈? –
你能澄清一下吗? “这个应用程序有一个用于与安全Web服务对话的用户名和密码对的数据库,我不需要将这些密码保存在同事的秘密之中”它是否以纯文本和静态值的形式存储在数据库中? – jtabuloc