受Encrypt-then-MAC问题的启发。最明显的消息身份验证代码可能是HMAC或RFC 2104,它基本上是输入的哈希值,是带有键的xor ...您知道了。

但是,我也发现了UMAC听起来很像一个哈希函数/查找表,通过至关重要的“某些秘密过程”来选择用于MAC的适当哈希。

以这种方式秘密选择算法是安全的吗? UMAC中唯一的秘密是使用的算法,还是像HMAC那样结合了一些已知的秘密?换句话说,它是带有随机H的HMAC吗?

最后,它在任何地方都可以使用吗? HMAC拥有自己的RFC,而UMAC似乎尚未被很好地采用。

#1 楼

在RFC 4418中详细描述了UMAC。

当RFC谈论“秘密选择”时,它的真正含义是“此处涉及一个秘密密钥”。 UMAC与通用哈希(可以看作是哈希函数系列)一起使用,还可以选择用于选择我们正在讨论的哈希函数的键。术语“哈希函数”在这里可能有点令人困惑,因为它与SHA-256根本不是同一类野兽。如果单独放任不管,这些“哈希函数”将非常薄弱。

因此,UMAC的工作方式如下:只有一次;对于每个新消息,必须选择一个新的现时值(这非常重要)。
有两个键$ K_1 $和$ K_2 $。 $ K_1 $选择其家族中的通用哈希函数$ h $,而$ K_2 $则用于可以在块上操作的合适函数中;
使用$ h $处理输入消息,然后通过将$ h $的输出与$ \ mathrm {AES} _ {K_2} $异或来对$ h $的输出进行加密。 )_。

想法是,哈希函数$ h $(由$ K_1 $选择)在最终加密后仍“隐藏”。多亏了随机数,并假设最终的加密是不错的,所以,连续MAC消息不会向攻击者泄漏$ h $上的任何信息。即使在非常轻量级的$ h $的情况下,这也是有效的,比传统的哈希函数要快得多。硬性要求,非常类似于分组密码的IV管理。 HMAC更容易,从某种意义上说,更难将其弄错。但是,与加密集成时,UMAC或类似UMAC的系统非常流行,因为可以共享现时/ IV要求。例如,这就是OCB和GCM的工作方式。

评论


$ \ begingroup $
我认为这几乎涵盖了我想知道的所有内容……有一个绿色的勾!
$ \ endgroup $
–user46
2011年7月26日在17:06

$ \ begingroup $
我刚刚阅读了RFC,看起来K₁和K2实际上是相同的密钥K(4.1节)。 (尽管在h中,使用密钥派生功能时密钥有些扭曲。)
$ \ endgroup $
–PaŭloEbermann
2011年7月26日17:50



#2 楼

这不能完全解决问题,但是我想我会把帽子丢给别人:HMAC使用加密散列函数,例如MD5,SHA1等。这些(相对)慢。

有使用通用哈希函数系列的另一类MAC。这些家庭不是加密的。它们具有简单的组合属性,因此它们往往比加密散列函数快得多。 UMAC的核心是NH系列,它经过调整可以在商品处理器上快速运行,并在带有SIMD指令的处理器上快速起泡。 Poly1305是另一个非常快速的哈希家族,根据平台的详细信息,它的性能要好于NH。

正如Thomas指出的那样,哈希家族本身很容易破解(即,容易伪造消息) ,因此您必须执行一些简单的后处理(例如,在其上运行AES),但总的来说,这些操作仍然比HMAC快得多,后者必须使用两次调用加密哈希函数。

是的,像NH(UMAC)和Poly1305这样的基于通用哈希的MAC并未得到广泛使用,因为与CBCMAC这样的老版本相比它们是新奇的。

#3 楼

顺便说一句,如果您对UMAC感兴趣,那么您可能也对VMAC,Poly1305或Badger感兴趣。如果我今天必须选择一个MAC使用,而又不作任何进一步的研究,那么我将使用Poly1305。