为什么在UMAC(通用消息认证码)算法中进行散列之后进行安全性所需的加密?

问题描述:

在*UMAC,https://en.wikipedia.org/wiki/UMAC,它指出:为什么在UMAC(通用消息认证码)算法中进行散列之后进行安全性所需的加密?

结果摘要或然后指纹被加密隐藏所使用的散列函数的 身份。

此外,在本文中,http://web.cs.ucdavis.edu/~rogaway/papers/umac-full.pdf,它指出:

甲消息由与共享散列函数散列 ,然后进行加密所得到的散列(使用加密密钥)验证。

我的问题是,如果设定的散列函数H是足够大的,和散列桶|B|的数量足够大,我们为什么需要加密 - 是不是秘密的散列是否足够安全?

例如,在最坏的情况下,每个客户端都发送相同的短内容,如“x”。如果我们散列到32个字节,并且我们的散列取决于一个32字节的密钥,并且散列表现出统一的属性,那么即使没有加密,攻击者又有什么希望知道任何单个客户端的秘密散列密钥?

而且,如果攻击者不知道密钥,攻击者怎么会希望恶意更改消息内容?

谢谢!

+0

不幸的是,通用的散列函数族是我从来没有学过的东西。但是,如果我现在有时间研究它,我会查看UMAC概念基于的旧的[Wegman和Carter论文](http://www.sciencedirect.com/science/article/pii/0022000081900337) 。 – TheGreatContini

我不知道很多关于UMAC明确,但:

  • 具有特定的散列函数rainbow table击败你穿上了信息任何加密所以不是具有单一的攻击面,你现在有两个
  • 随着计算能力随着时间的推移而增加,您将越来越可能找出消息的明文,因此如果您将MAC解密,PFS(https://en.wikipedia.org/wiki/Forward_secrecy)将永远不可能。除此之外,如果你可以从MAC值中找出单个纯文本消息,那么你可以通过获取关于PRNG,其他数据的上下文,IV的信息,指数地接近解密剩下的消息,等等