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
在 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