0

我目前正在构建一个快节奏的多人游戏,其中安全性是一个大问题。

我已经在 J​​ava 中通过 UDP 实现了停止等待(为简单起见,这是一种临时措施)。

但是,我担心恶意方可能会分别向发送者或接收者发送错误的确认或消息,从而使序列号不同步——本质上导致消息丢失(游戏崩溃!)或发送者重新发送无限期地。

在我的应用程序中,每个参与者都由 RSA 公钥标识,因此我可以为每条消息添加签名哈希以进行身份​​验证……但这大大增加了标头大小并在一定程度上混淆了我的架构层。

这是一种常见的方法吗?这个问题有众所周知的解决方案吗?

4

1 回答 1

1

乔纳森所说的。一般来说,在使用 UDP 时,您需要提供自己的方法来防御乱序或丢包。没有一种“标准”的方式来处理这个问题——除了使用 TCP 来代替。正如您所说,您可以在每个数据包上验证客户端的身份 - 但请记住验证客户端的身份,即使使用 RSA 之类的东西 - 并不能帮助您对抗恶意客户端。他们可以连接到游戏服务器,验证自己,然后开始发送垃圾。毕竟,他们就是他们所说的那样。

对于大多数游戏服务器设计,据我(尽管有限)理解,通常服务器具有“tick”的概念——客户端可以注册某些事件在tick内发生,并且服务器针对客户端发送的内容执行规则. 但是当滴答结束时,服务器接收到的与该滴答相对应的任何事件都将被丢弃。这增加了一个竞争元素,它不会增加系统的实际安全性,但确实增加了一个使其更加困难的元素。

当然,使任何像这样“安全”的系统,因为客户端无法欺骗其来源,本质上需要做一个 TLS 隧道,我认为这不会满足您的性能要求。

于 2012-07-25T01:40:43.947 回答