保护UDP连接(Securing a UDP connection)

2019-07-30 05:43发布

对于个人MMO游戏项目,我用Java实现的一个自制可靠的基于UDP的协议。 鉴于我目前的设置我相信这将是相对简单的探听器劫持会话,所以为了防止这种情况,我正在学一点密码学的机会。 它非常有趣。

我可以成功地创建客户端,并使用一台服务器之间共享密钥的Diffie-Hellman密钥交换 (一个非常聪明的概念),但现在我需要以此来保证数据包的真实性。 我的初步测试到目前为止已经表明,几个不同密码的我用尽臃肿数据位的量,但我喜欢让事情尽可能小和尽可能快。

鉴于我只是试图将数据包进行验证,而不是nessecarily掩盖整个有效载荷,我有我可以把从密钥到数据包报头所产生的8个字节的会话ID,加密整个包,哈希回来的想法下降到8个字节。 我把未加密的数据包,并把8字节散列到会话ID的位置,然后把它关闭。

这将是安全的? 感觉有点不雅整个数据包进行加密只发送未加密的 - 有没有更好/更快的方式来实现我的目标? 请注意,我想这样做我自己,因为它的好经验,使林在第三方库或其它协议选项不是那么感兴趣。

Answer 1:

如果两个同龄人访问共享的秘密(他们应该,因为你在谈论的Diffie-赫尔曼),你可以简单地存储在它的头中的数据包的哈希值。 接收器检查,看看是否匹配。

作为一个附加的安全措施,你也可以一个“挑战”字段添加到您的数据包,并在哈希过程中的地方使用它来防止重播。

所以这个哈希应包括:

  • 共享密钥
  • 一个挑战
  • 数据报的内容

编辑

“挑战”是一个严格的递增数。 你把它添加到你的数据报只是每次发送新邮件时更改哈希值。 如果有人截获的消息,也不能重新发送:接收器可以确保它不会接受它。



文章来源: Securing a UDP connection
标签: udp security