如何保证2点之间的通信不被篡改

本文关键字:通信 何保证 2点 之间 | 更新日期: 2023-09-27 18:02:13

我有一个在客户端运行的应用程序,这个应用程序向远程服务器发送和接收数据。

是否有任何方法可以保证发送到服务器的数据确实来自允许的应用程序?

当然,我可以加密数据,但由于它可以反编译,它不会使它100%安全。

我们正在使用。net/c#。

谢谢!

如何保证2点之间的通信不被篡改

你的问题太模棱两可了,无法用现在的形式回答。你需要更精确地陈述你想要减轻的威胁。

例如,假设您有一个客户端Alice,试图向服务器Bob发送一条消息。是威胁:

  1. 第三方,夏娃,可能正在监听通信频道。Alice希望Bob能理解这个信息,但是Eve不能理解这个信息。

  2. 第三方,Mallory,可能正在积极地篡改通信通道。Bob想知道是否有人篡改了Alice发送消息的尝试。

  3. Eve和Mallory一起工作。通过监控这个频道,伊芙积累了Alice发给Bob的一些真实信息的录音。尽管她听不懂,但她相信这些都是好的信息。伊芙把这些信息交给了马洛里。Mallory将篡改通信通道,这样即使Alice现在没有发送消息,Bob似乎也从Alice那里得到了有效的消息。(或者,Mallory将篡改通道,使Alice当前的有效消息被先前的有效消息替换。)

  4. 第三者莫里亚蒂谋杀了爱丽丝,现在正以她的名义给鲍勃发信息。(通信渠道不受影响;马洛里和伊芙晚上休息。)Bob想知道消息是否真的像消息所声称的那样来自Alice。

这些问题看起来很相似,但实际上它们是不同的问题,用不同的技术解决。如果你认为通过解决其中一个问题就可以解决所有问题,那么你正在构建一个不安全的系统。在这里的任何人给你建议之前,你需要仔细而清晰地描述你想要减轻的威胁。

想要保护软件和数字通信安全的人和想要破坏这种安全的人之间有一场永无止境的军备战争。

这类问题的最新技术包括:

  • 创建防篡改的客户端代码(例如,如何防止任何c#应用程序的反编译)
  • 加密您的通信通道(您可以根据您的环境和需要使用消息级和/或传输级加密)
  • 使用散列或类似的方法来检测传输是否被解密(使用咸散列使得更改或伪造消息内容变得更加困难,并非不可能)。
  • 遵循最佳实践保护您的服务器免受远程和物理访问。

不存在"100%安全"这回事。但是,是的,一种可行的方法是使用签名和可信第三方实体(RCA)进行加密,该实体验证证书。

如果您想减少代码被篡改的可能性,您将希望混淆您的代码。我喜欢这个免费的混淆器。

http://www.foss.kharkov.ua/g1/projects/eazfuscator/dotnet/Default.aspx

,因为它提供了很多功能,并且是一个简单的即放即用型应用程序。

那么你可以简单地使用https和web服务启用128位加密的安全通信(或者更好,如果你不跨越国家边界)

如果他们花时间来解决这个问题,那么你应该感到高兴,因为你的应用程序值得这么多麻烦。