C#如何有效地对UDP数据包进行身份验证

C#如何有效地对UDP数据包进行身份验证,c#,authentication,encryption,udp,client-server,C#,Authentication,Encryption,Udp,Client Server,我正在创建一个C#游戏服务器循环,每秒更新地图上动态实体的位置15次。 每个客户端都将向权威服务器发送UDP数据包,并发出左转、右转等命令。我的问题是:如何确保UDP数据包来自特定客户端,并且没有被其他客户端欺骗 我的猜测是:当客户端发送请求连接的特定数据包时,服务器将创建一个私钥并将其交给客户端,因此当客户端发送数据包时,它必须将其加密发送?(难道有人不能截取数据包并查看密钥吗?),这也意味着每个数据包都必须进行加密和解密,这是标准做法吗?还是有一种开销更低的方法?从理论上讲,可能有4000多

我正在创建一个C#游戏服务器循环,每秒更新地图上动态实体的位置15次。 每个客户端都将向权威服务器发送UDP数据包,并发出左转、右转等命令。我的问题是:如何确保UDP数据包来自特定客户端,并且没有被其他客户端欺骗


我的猜测是:当客户端发送请求连接的特定数据包时,服务器将创建一个私钥并将其交给客户端,因此当客户端发送数据包时,它必须将其加密发送?(难道有人不能截取数据包并查看密钥吗?),这也意味着每个数据包都必须进行加密和解密,这是标准做法吗?还是有一种开销更低的方法?从理论上讲,可能有4000多个客户端每秒生成多达20-40个数据包的命令,对于这种情况,加密仍然有效吗

你看到了吗?加密本身不能提供消息的完整性或真实性。使用DTL怎么样?这包括服务器的实体身份验证、客户端的潜在实体身份验证以及UDP消息的机密性/完整性和真实性。最好不要设计自己的传输协议,这是一件相当棘手的事情(即使对我来说)。