带密钥哈希函数的构造
在之前的研究中,我们探讨了无密钥(或公开密钥)设置下哈希函数的构造,以实现诸如抗碰撞性或抗二次原像性等安全属性。现在,我们将讨论扩展到私钥设置,展示如何构建能够处理任意长输入的高效私钥加密原语,特别是伪随机函数和消息认证码。
1. 从Merkle–Damgård变换开始
Merkle–Damgård变换是我们熟悉的构造方法。在构建抗碰撞哈希函数时,我们使用它来迭代抗碰撞压缩函数。当目标是伪随机函数时,自然会假设压缩函数也是伪随机的。然而,这种方法容易受到长度扩展攻击。攻击者可以利用哈希值 $H(m)$ 等同于消息 $m∥x$($x$ 为任意值)计算中的中间结果这一事实,计算出 $m∥x$ 形式的消息的哈希值,从而破坏伪随机函数的安全性,消息认证码也存在同样的问题。
不过,在某些受限设置下,如强制使用无前缀编码或只接受特定固定长度的消息,Merkle–Damgård变换可以基于安全的压缩函数(分别作为安全的MAC或PRF)产生安全的MAC或PRF。
2. NMAC和HMAC构造
由于在许多情况下无法假设是受限场景,我们需要考虑其他方法,HMAC是目前用于消息认证和作为伪随机函数的主要构造。HMAC即基于哈希的消息认证码,它是NMAC(嵌套消息认证码)的实用对应物。
NMAC基于Merkle–Damgård变换,但有所不同。为了从标准迭代哈希函数获得带密钥的变体,NMAC使用两个密钥 $k_1$ 和 $k_2$。$k_1$ 代替初始化向量IV,产生Merkle–Damgård函数的带密钥变体。为避免长度扩展攻击,NMAC在最后一步使用额外的隐藏密钥 $k_2$ 对哈希函数进行额外评估,将前一次评估的
超级会员免费看
订阅专栏 解锁全文
51

被折叠的 条评论
为什么被折叠?



