STUN MESSAGE-INTEGRITY 虚拟定义

STUN MESSAGE-INTEGRITY dummy definition

在 RFC5389 中,MESSAGE-INTEGRITY 计算包括自身,但 具有虚拟内容
虚拟内容未定义
如何在不知道 虚拟内容 值的情况下验证 MESSAGE-INTEGRITY?
为什么 MESSAGE-INTEGRITY 计算会包括它自己?
如果不包含自身,计算 MESSAGE-INTEGRITY 不是更快并且同样安全吗?

由于 MESSAGE-INTEGRITY 属性本身不是散列的一部分,您可以在最后 20 个字节中附加任何您想要的内容。只需将其替换为通向属性本身的所有字节的哈希值即可。

算法基本上是这样的:

  • L为STUN消息字节流的原始大小。应与 STUN 消息中 MESSAGE LENGTH 的值相同 header.

  • 在 STUN 消息上附加一个 4 字节 header,后跟 20 个空字节

  • 调整 STUN 消息的 LENGTH 字段以说明这 24 个新字节。

  • 计算消息的前 L 个字节的 HMAC/SHA1(除了刚刚附加的 24 个字节之外的所有字节)。

  • 用计算散列的 20 个字节替换 20 个空字节

正如评论中所讨论的,字节不必是空字节,它们可以是任何东西——因为它们不包含在哈希计算中。

我的 Github 上的 short-term 和 long-term 凭证都有 MESSAGE-INTEGRITY 的实现:here and here