如何在windows.net应用程序中保护静态字符串?

如何在windows.net应用程序中保护静态字符串?,.net,windows,security,encryption,.net,Windows,Security,Encryption,我们正准备部署一个Windows.NET客户端应用程序,该应用程序将向我们的中央服务器回拨web服务。我们被要求验证对web服务的所有调用是否来自我们的客户端应用程序,而不是来自任何其他调用方。有人建议我们传递一个安全令牌,该令牌对于应用程序的所有安装都是通用的。但是,我们现在在应用程序安装中要保护这个公共字符串。有没有一种有效的方法来合理地保护这样的字符串不被黑客发现 谢谢你的建议 始终使用SecureString处理令牌。这样,从内存中检索令牌将困难得多 将令牌作为连接字符串存储在app.

我们正准备部署一个Windows.NET客户端应用程序,该应用程序将向我们的中央服务器回拨web服务。我们被要求验证对web服务的所有调用是否来自我们的客户端应用程序,而不是来自任何其他调用方。有人建议我们传递一个安全令牌,该令牌对于应用程序的所有安装都是通用的。但是,我们现在在应用程序安装中要保护这个公共字符串。有没有一种有效的方法来合理地保护这样的字符串不被黑客发现

谢谢你的建议

  • 始终使用
    SecureString
    处理令牌。这样,从内存中检索令牌将困难得多
  • 将令牌作为连接字符串存储在
    app.config
    中,并加密“ConnectionString”部分。这样,令牌将从除用户帐户以外的任何人处获得安全保护(通过DPAPI)
  • 使用
    SslStream
    进行客户端服务通信。这样,您的连接将被加密。加上令牌,您的通信现在将被认证(即,您了解您的客户)和保护

    • 这叫做公钥加密

      • 您的应用程序将其公钥发送到服务器
      • 服务器返回必须添加到某个前缀的加密字符串
      • 你的应用程序向服务器询问他的公钥
      • 如果应用程序解密字符串,请添加前缀
      • 使用服务器公钥进行加密
      • 将密钥发送到服务器
      • 服务器验证
      如果黑客知道二进制文件中的前缀,它就不知道服务器提供的后缀,也无法解密您发送回服务器的内容,因为黑客没有服务器的私钥。漏洞是黑客可以提取应用程序中的私钥来解密后缀。但如果需要,服务器可以每隔几秒钟更改一次,也可以是时间相关的。但是,可以利用时间依赖性,如果您选择此选项,最好更改可变的时间依赖性后缀。在某种程度上,通过大量的努力和一台超级计算机,黑客也可以通过搜索一个可以解密所有返回的字符串的密钥来破解这个问题,这就是为什么你不应该在服务器上生成随机后缀,而应该回收很少的后缀


      如果您认为这是太多的工作,您可以使用SecureString和加密连接字符串。但这确实是可以利用一些时间进行黑客攻击的,因为所需的一切都在客户端,黑客不需要x*2暴力解密。

      混淆代码中的字符串可能会让人更难发现它,但不是100%安全的。你遇到的更大的问题是,有人可以安装一个嗅探器程序并查看HTTP请求。谢谢,我可能应该提到我们将使用SSL进行传输。谢谢,我很感谢你的解释,这听起来像是一种更复杂的方法,但我并没有关注它是如何解决客户端代码(本例中为私钥)中存在字符串的漏洞的,我们需要确保其安全。也许您建议的SecureString+加密连接字符串(正如Teoman也建议的)可能是问题的关键?谢谢,Teoman。这听起来不错。我对一个关键点不太清楚,我会去研究一下,但也许你们可以澄清一下。我们是否可以将app.config中已加密字符串的应用程序部署到某台计算机(在某个不熟悉的域中),并仍然使用DPAPI限制对该字符串的访问?DPAPI生成用户特定的加密密钥,因此加密的app.config可能无法在另一台计算机上解密(虽然我不完全确定这一点,但也可能有一种方法可以将加密密钥与配置文件一起复制到另一台机器上)。