【发布时间】:2021-04-08 23:23:36
【问题描述】:
在 RFC5389 MESSAGE-INTEGRITY 计算中包含自身,但带有虚拟内容
虚拟内容未定义
在不知道 dummy content 值的情况下如何验证 MESSAGE-INTEGRITY?
为什么 MESSAGE-INTEGRITY 计算会包含自身?
如果不包含自身,计算 MESSAGE-INTEGRITY 不是更快并且同样安全吗?
【问题讨论】:
标签: stun
在 RFC5389 MESSAGE-INTEGRITY 计算中包含自身,但带有虚拟内容
虚拟内容未定义
在不知道 dummy content 值的情况下如何验证 MESSAGE-INTEGRITY?
为什么 MESSAGE-INTEGRITY 计算会包含自身?
如果不包含自身,计算 MESSAGE-INTEGRITY 不是更快并且同样安全吗?
【问题讨论】:
标签: stun
由于 MESSAGE-INTEGRITY 属性本身不是散列的一部分,因此您可以在最后 20 个字节中附加任何您想要的内容。只需将其替换为指向属性本身的所有字节的哈希即可。
算法基本上是这样的:
让L 为 STUN 消息字节流的原始大小。应该与 STUN 消息头中的 MESSAGE LENGTH 的值相同。
在 STUN 消息上附加一个 4 字节的标头,后跟 20 个空字节
调整 STUN 消息的 LENGTH 字段以考虑这 24 个新字节。
计算消息的第一个 L 字节的 HMAC/SHA1(除了您刚刚附加的 24 个字节之外的所有字节)。
将 20 个空字节替换为计算出的 20 个字节的哈希
正如在 cmets 中所讨论的,字节不必是空字节,它们可以是任何东西 - 因为它们不包含在哈希计算中。
【讨论】: