在前面的文章中,我们介绍了哈希算法,今天我们来聊一个带密钥的Hash函数——MAC算法。

什么是MAC算法?

MAC(Message Authentication Codes),是一种消息摘要算法,也叫消息认证码算法。这种算法的核心是基于秘钥的散列函数。可以简单这样理解,MAC算法是MD5算法和SHA算法的升级版,是在这两种算法的基础上,又加入了秘钥的概念,所以会更加安全。

为什么需要MAC算法?

Hash算法只可以验证数据的完整性,但是无法保证数据防篡改。

Hash算法

乍一看,好像上述的示例是成立的,但是一旦遇到“中间人攻击”。

中间人攻击

你会发现攻击者对消息进行篡改了,但是通过Hash算法计算摘要值,你是无法知道消息被改动过的。因此这个时候就需要MAC算法了。

MAC算法的特点

跟Hash算法一样,可以验证数据的完整性,可以验证数据确实是由原始发送方发出的。

MAC算法

发送端根据消息和一个mac算法,生成mac秘钥,将mac秘钥和消息同时发送,接收端收到消息,用同样的mac算法,得到mac秘钥,判断自己生成mac秘钥和接收到的mac秘钥是否一致,从而判断消息是否一致。

MAC算法的种类

MAC算法是含有密钥的散列算法,兼容MD和SHA算法,在此基础上添加了密钥支持,因此也被称为Hmac算法,定义在RFC 2014中,分为两大分支MD和SHA分支:

MD分支:Hmac-MD2、Hmac-MD4、Hmac-MD5。

SHA分支:Hmac-SHA1、Hmac-SHA256、Hmac-SHA384、Hmac-SHA512、Hmac-SHA224等。

MAC算法应用于很多场景,如linux客户端的SecureCRT,Google身份验证器、银联pos机终端等,都可以看到MAC算法的影子。

免责声明:素材源于网络,如有侵权,请联系删稿。