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

时间:2011-04-27 23:06:12

标签: .net windows security encryption

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

感谢您提出的所有建议。

3 个答案:

答案 0 :(得分:1)

  • 始终使用SecureString处理令牌。这样,从内存中检索令牌会更加困难。
  • 将令牌存储为app.config中的连接字符串,并加密'connectionStrings'部分。这样,除了用户的帐户(通过DPAPI)之外,任何人都可以保护令牌。
  • 使用SslStream进行客户端 - 服务通信。这样,您的连接将被加密。与令牌相结合,您的通信现在将经过身份验证(即您了解您的客户端)并受到保护。

答案 1 :(得分:0)

答案 2 :(得分:0)

它被称为公钥加密。

  • 您的应用将其公钥发送到服务器
  • 服务器返回必须添加到某些前缀的加密字符串
  • 您的应用向服务器询问他的公钥
  • 你的app解密字符串,添加前缀
  • 使用服务器公钥进行加密
  • 将密钥发送到服务器
  • 服务器验证

如果黑客知道您的二进制文件中的前缀,它将不知道服务器提供的后缀,并且无法解密您发送回服务器的内容,因为黑客没有服务器私钥。漏洞是黑客可以提取应用程序中的私钥来解密后缀。但是,如果需要,服务器可以每隔几秒更改一次,或者它可以是时间依赖的。但是,可以利用时间依赖性,如果选择此选项,最好具有可变的时间相关后缀更改。在某些时候,通过大量的努力和超级计算机,黑客也可以通过搜索可以解密所有返回的结果字符串的密钥来破解它,这就是为什么你不应该生成随机后缀的原因。服务器,但回收其中几个。

如果您认为工作太多,可以使用SecureString和加密的连接字符串。但是,由于需要的一切都在客户端,而且黑客不需要x * 2强力解密,所以肯定会有一段时间可以处置,因为黑客不需要x * 2强力解密离子。