【问题标题】:Securing a UDP connection保护 UDP 连接
【发布时间】:2012-07-04 06:33:47
【问题描述】:

对于个人 MMO 游戏项目,我在 java 中实现了一个自制的可靠的基于 UDP 的协议。鉴于我目前的设置,我相信窥探者劫持会话相对简单,所以为了防止这种情况发生,我借此机会学习了一点密码学。非常有趣。

我可以使用Diffie-Hellman key exchange(一个非常聪明的概念)在客户端和服务器之间成功创建共享密钥,但是现在我需要使用它来保证数据包的真实性。到目前为止,我的初步测试表明,我尝试过的几种不同的密码会使数据量有点膨胀,但我希望尽可能地小而快。

鉴于我只是尝试验证数据包而不是隐藏整个有效负载,我的想法是可以将密钥生成的 8 字节会话 ID 放入数据包标头,加密整个数据包,然后将其哈希回 8 个字节。我将未加密的数据包放入 8 字节散列到会话 ID 的位置,然后将其发送出去。

这会安全吗?加密整个数据包只是为了不加密发送它感觉有点不雅 - 有没有更好/更快的方法来实现我的目标?请注意,我想自己做这件事,因为它的经验很好,所以我对 3rd 方库或其他协议选项不太感兴趣。

【问题讨论】:

  • 您是否检查了 DTLS 协议,它是 UDP 的 SSL? DTLS 实现可用,例如。在我们的 SecureBlackbox for Java 中。使用 DTLS 将使您无需重新发明轮子并获得行业标准的安全性。
  • 每个人都可以看到车轮滚动,因为它是圆形的,但没有多少人曾经建造过自己的,所以并不真正了解润滑剂/轴承/扭矩等之间的区别。这就是为什么我说我不是对其他协议感兴趣。

标签: udp security


【解决方案1】:

如果两个对等方都可以访问共享密钥(他们应该这样做,因为您正在谈论 Diffie-Helman),您可以简单地将数据报的哈希存储在其标题中。接收方检查是否匹配。

作为一项附加的安全措施,您还可以在数据报中添加一个“挑战”字段,并在散列过程中的某处使用它来防止重放。

所以这个哈希应该覆盖:

  • 共享的秘密
  • 挑战
  • 数据报的内容

编辑

“挑战”是一个严格递增的数字。您将它添加到您的数据报中只是为了在您每次发送新消息时更改哈希值。如果有人截获了一条消息,它就无法重新发送它:接收者确保它不接受它。

【讨论】:

  • 能否请您扩展一下“挑战”?我不知道该谷歌了解更多信息。
  • google 为“重放攻击”,本质上这可能是连续剧之类的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-03-25
  • 2013-12-17
  • 2023-03-30
  • 2016-01-10
  • 1970-01-01
  • 2012-02-18
  • 2013-01-20
相关资源
最近更新 更多