作为一些研究的一部分,我一直在阅读RFC4226 ,我想知道为什么截断 HMAC 的函数如此复杂。据我了解,HMAC 的最后 4 位定义了一个偏移量,从该偏移量中取出 4 个字节以转换为一次性密码。
为什么截断函数不能总是取 HMAC 的前 4 个字节?总是采用我错过的相同 4 个字节是否存在一些安全隐患,或者使用动态偏移量更容易实现?
非常感谢任何人可以提供的任何信息。
作为一些研究的一部分,我一直在阅读RFC4226 ,我想知道为什么截断 HMAC 的函数如此复杂。据我了解,HMAC 的最后 4 位定义了一个偏移量,从该偏移量中取出 4 个字节以转换为一次性密码。
为什么截断函数不能总是取 HMAC 的前 4 个字节?总是采用我错过的相同 4 个字节是否存在一些安全隐患,或者使用动态偏移量更容易实现?
非常感谢任何人可以提供的任何信息。
这有点恋物癖。据我们目前所知,没有理由相信使用 HMAC 输出的前四个字节不会同样安全。
然而,没有理由相信并不意味着没有人相信。有些人“感觉”系统截断可能会以某种完全未指定的方式帮助攻击者。很多人可能会争辩说,对于在专用 FPGA 或 ASIC 的帮助下尝试对密钥进行暴力攻击的攻击者来说,动态截断会使任务变得更加困难:
由于可能需要所有 20 个输出字节,因此攻击者必须计算完整的 HMAC/SHA-1;如果只使用前四个字节,那么专用展开电路可能会在最后的 SHA-1 轮次中跳过几个步骤(我们在这里谈论最多 3% 的优化)。
“动态截断”意味着某种依赖于数据的查找,这在硬件领域可能很昂贵(同样,对于 SHA-1 中的所有 32 位加法器,这几乎可以忽略不计)。
但这些都不是,真的,很好的理由。因此,“动态截断”的要点是成为某种加密巫术,可能会让新手感到敬畏,从而可能有助于接受。指定一个好的算法是不够的;还必须说服实施者使用它,为此,一些看起来很神奇的手势可以创造奇迹。