1、MAC这玩意是什么?
提起这个MAC我就不得不说一下消息摘要。
什么是消息摘要?
消息摘要是把任意长度的输入揉和而产生长度固定的伪随机输出的算法。消息摘要的主要特点有:
-
①无论输入的消息有多长,计算出来的消息摘要的长度总是固定的。例如应用MD5算法摘要的消息有128个比特位,用SHA-1算法摘要的消息最终有160比特位的输出,SHA-1的变体可以产生192比特位和256比特位的消息摘要。一般认为,摘要的最终输出越长,该摘要算法就越安全。
-
②消息摘要看起来是“随机的”。这些比特看上去是胡乱的杂凑在一起的。可以用大量的输入来检验其输出是否相同,一般,不同的输入会有不同的输出,而且输出的摘要消息可以通过随机性检验。但是,一个摘要并不是真正随机的,因为用相同的算法对相同的消息求两次摘要,其结果必然相同;而若是真正随机的,则无论如何都是无法重现的。因此消息摘要是“伪随机的”。
-
③一般地,只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。这正是好的消息摘要算法所具有的性质:输入改变了,输出也就改变了;两条相似的消息的摘要确不相近,甚至会大相径庭。
-
④消息摘要函数是无陷门的单向函数,即只能进行正向的信息摘要,而无法从摘要中恢复出任何的消息,甚至根本就找不到任何与原信息相关的信息。当然,可以采用强力攻击的方法,即尝试每一个可能的信息,计算其摘要,看看是否与已有的摘要相同,如果这样做,最终肯定会恢复出摘要的消息。但实际上,要得到的信息可能是无穷个消息之一,所以这种强力攻击几乎是无效的。
-
⑤好的摘要算法,没有人能从中找到“碰撞”,虽然“碰撞”是肯定存在的。即对于给定的一个摘要,不可能找到一条信息使其摘要正好是给定的。或者说,无法找到两条消息,使它们的摘要相同。
看完之后,发现这个玩意不就是进行了一个hash计算嘛(sha一下)。没毛病这样理解,讲一个信息计算个hash当成消息的digest。
消息认证码(Message Authentication Code,MAC)的概念与消息摘要相似,但是有一个差别。可以看到,消息摘要是消息的简单指印,消息摘要不涉及加密过程。相反,MAC要求发送方与接收方知道共享对称密钥,用其准备MAC。因此,MAC涉及加密过程,下面介绍MAC的工作原理。
- (1)A与B共享一个对称密钥K,是别人不知道。A计算MAC时,要将密钥K作用于消息M。
- (2)A将消息M和MAC H1发送B。
- (3)B收到M时,也用K对M求出MAC H2。
- (4)B比较H1与H2,如果两者相同,则表明消息M没有被中途改变,否则B拒绝消息,因为消息M已经被中途改变。
再来看一个图:
MAC的意义如下:
- (1)MAC向接收方B保证消息M没有被中途改变。这是因为,如果攻击者改变消息而不改变MAC(这里是H1),则接收方求出的MAC(这这里是H2)与其不同。计算MAC时,使用的密钥K是只有发送方A和接收方B知道,因此攻击者不知道密钥K,无法改变MAC。
- (2)接收方B保证消息是从正确的发送方A发来的。由于只有发送方与接收方知道密钥K,别人不可能求出发送方所发的MAC(这里是H1)。
尽管计算MAC与加密过程非常相似,但是有一个重要不同,在对称密钥加密中,加密过程是可逆的,即加密和解密是相互镜像。但在MAC中,发送方与接收方都只进行加密过程,因此MAC算法不需要可逆,只要单向函数加密就可以了。
这里其实如果你想起我之前写过一篇HMAC就能便于理解。
2、MAC的类型
虽然所有Mac的最终目标都是相同的,但MAC有几种不同的类型。
一次MAC
一次消息认证码(OTMAC)是一种加密技术,可以用来提供数字消息自创建以来没有被篡改或更改的高水平的保证。OTMAC是一种消息认证代码(MAC)形式,使用一次性密钥创建消息的哈希。然后用发送者的私钥签名该散列,创建数字签名。接收者可以使用发送者的公钥来验证签名并确认消息没有被篡改。
Carter-Wegman MAC
Carter-Wegman Mac是一种用于验证消息完整性的消息认证代码。该消息认证码是使用消息发送者和接收者共享的密钥创建的。该消息认证码是使用哈希算法生成的,消息的哈希包含在消息本身中。当收到消息时,再次计算哈希,并将其与与消息发送的哈希进行比较。如果散列匹配,则消息没有被篡改,并且被认为是真实的。
HMAC
HMAC(基于哈希的消息认证代码)是一种消息认证代码,它使用加密哈希函数创建消息的摘要(或“消息认证代码”)。摘要可用于验证消息的真实性。HMAC是一种MAC,除了消息外,还使用密钥来生成摘要。
算法公式:HMAC(K,m) = H((K ⊕ opad) ∥ H((K ⊕ ipad) ∥ m))
MAC(Message Authentication Code,消息认证码算法)是含有密钥的散列函数算法,兼容了MD和SHA算法的特性,并在此基础上加入了密钥。因次,我们也常把MAC称为HMAC(keyed-Hash Message Authentication Code)。
MAC算法主要集合了MD和SHA两大系列消息摘要算法。MD系列的算法有HmacMD2、HmacMD4、HmacMD5三种算法;SHA系列的算法有HmacSHA1、HmacSHA224、HmacSHA256、HmacSHA384、HmacSHA512五种算法。
经过MAC算法得到的摘要值也可以使用十六进制编码表示,其摘要值长度与参与实现的摘要值长度相同。例如,HmacSHA1算法得到的摘要长度就是SHA1算法得到的摘要长度,都是160位二进制码,换算成十六进制编码为40位。
HMAC和MAC在密码学上的区别:
- MAC是一个散列映射关系
- HMAC是构建MAC的一种方式
关于细节部分算法的部分可以看看这篇文章:
【HMAC-SHA256】
3、完美无缺?
那不可能
推荐一篇讲MAC很详细的文章【消息认证码(MAC)】
后续涉及到了我一定要好好学一学。
参考链接:
https://www.jianshu.com/p/1c3fd615ead8