有没有办法在不加密的情况下避免 MITM 攻击?

Is there a way to avoid MITM attacks without encryption?

玩家通过身份验证后,会收到一个随机的、唯一的识别令牌。他发送的每个数据包都包含令牌。典型的消息是:

token sequence_number commands

问题是,如果有人看到了一个数据包,那么这个人就可以扮演玩家的角色,例如将所有玩家的硬币都给其他人。或者阅读玩家的消息,或者做任何除了窃取个人信息之外的事情。

所以我认为加密是一项要求。但我发现很多人反对它,有人甚至说 "it's complete paranoia" (https://gamedev.stackexchange.com/a/25551/33993).

有没有不加密的方法避免中间人攻击?如果不是,避免它们是不必要的吗?

链接的问题说,"Only if it is an in-game purchase/micro-transaction - and then why not just use something tried and true like HTTPS."

Https 被认为足以保护 MITM。

我的意思是:是的!您应该在 Https 上发送您的流量!

它会对性能产生影响,但(显然)已经付出了很多努力来优化它。很多成本发生在建立 Https 连接上。对于正在进行的游戏连接,您应该能够保持它打开,并且性能影响将会减少。

正如评论者所提到的,Https 使用 TLS 进行加密。您也可以使用 TLS 构建自己的 TCP 甚至 UDP 协议,但现在我建议如果可能的话,使用无聊的旧 TCP/Https。所有平台都有适用于它的 API,有办法让它变得实时,它可能最容易与家用路由器和防火墙一起使用,当你向其他人解释它时也不会感到惊讶。

有关实时使用 http/https 的示例,请参阅 pusher and socket.io and long polling

不加密通信通道的 MITM 保护很困难。您可以使用消息验证码 (MAC) 来保护关键组件不被更改。但是您仍然需要一个必须通过不同通道或使用加密 (HTTPS) 进行交换的共享秘密。

您可能想查看 Hawk authentication scheme 如何通过未加密的通道安全地交换数据。

典型的加密(例如:HTTPS)不足以抵御 MITM (http://en.wikipedia.org/wiki/Man-in-the-middle_attack) 攻击。 wiki 页面有一个简单的示例,说明 MITM 如何破解加密。打败 MITM 的方法很复杂,但对于网页游戏来说,它们通常有点矫枉过正。

为了回答您的问题,加密并不能防御 MITM,但有必要实施加密,因为它更多地与保护敏感信息(例如,密码、会话密钥等)在通过 Internet 时的安全有关。否则任何在网络上收听的人都将能够以纯文本形式看到这些信息。