【发布时间】:2017-02-07 15:10:55
【问题描述】:
如果这是一个愚蠢而明显的问题,请原谅我,但我无法在谷歌上搜索正确的资源。我不是安全专家,我正在努力了解如何正确解决这个问题。
这是场景。我在内部服务器上有一个内部应用程序:不会永远发送到客户端站点。此应用程序有一个用户名和密码对数据库,用于与安全 Web 服务通信。我不需要对同事保密这些密码,但我想保护它们以防服务器受到攻击和数据被盗。
传统上,人们会对它们加盐和哈希。这是我原则上理解的过程,但它取决于用户输入密码,然后可以根据存储的哈希进行验证。对我来说不是这样。
所以:搜索周围有各种使用固定“密码短语”来保护字符串的解决方案。这是一个示例,https://stackoverflow.com/a/10177020/271907,这是另一个示例https://stackoverflow.com/a/10366194/188474。
但是,据我了解,在我的情况下,这些都没有提供有用的解决方案。我的应用程序必须将那个“密码短语”存储在某处 才能完成它的工作。如果我将其硬编码到应用程序中,则可以对其进行逆向工程。如果我对其进行加密并将其放在一个单独的文件中,它可以被窃取并使用彩虹表计算出来。
我研究过使用 reg_iis 根据Encrypting Web Config using ASPNET_REGIIS 加密密钥,但老实说,这让我更加困惑。我什至不确定这些加密的配置文件是否可以在机器之间移植,或者我是否必须在 dev 和 test 和 live 之间重新加密。我也不知道它们有多安全:AFAIK 某处必须有一个密钥,如果有密钥,它可能会被破坏。
为了进一步混淆水域,我发现了这个不使用密钥的答案:https://stackoverflow.com/a/10176980/271907。但是作者承认它已经过时了,我不知道结果有多安全。
有没有什么明智的方法可以解决这个问题,并且不会在某处留下安全漏洞?
【问题讨论】:
-
“此应用程序有一个用户名和密码对数据库,用于与安全 Web 服务通信” - 因此您必须有权访问明文密码,以便将用户名\密码发送到您想与之交谈的网络服务是什么?
-
你能澄清一下上下文吗? “这个应用程序有一个用户名和密码对的数据库,用于与安全的 Web 服务通信。我不需要对同事保密这些密码”它是否以纯文本和静态值的形式存储在数据库中?
标签: c# security encryption