消息认证码 MAC

今天聊的 Mac ,不是苹果电脑名字,也不是 Mac 地址中的 Mac ,而是指消息认证码 Message authentication code 。Mac 有时候也被叫做 tag ,是用来认证一段信息用的。所谓认证,就是要保证两点:第一,信息的发出者的确是声称的那个人,第二,信息没有被篡改过。

什么是 Mac ?

要生成 Mac ,涉及三种算法:

经过这三个步骤,就对信息生成了 Mac 。

Mac 和哈希

Mac 跟哈希有点像,有人称它为“带密钥的哈希”。

哈希也可用于校验信息有没有被篡改。例如常见的一种使用方式,就是在软件下载页面上,会看到下载包,以及它的哈希值。用户下载完成后,重新对包进行哈希运算,如果得到的哈希跟网上公布的哈希相同,证明下载过程中信息没有损坏或者被篡改。

但是 Mac 比哈希要复杂,因为 Mac 的生成和验证过程都是需要密钥的。通过验证算法,不仅仅可以保证信息没有被篡改,也可以确认发出人身份,也就是说,信息的确是密钥的持有人发布的。

这就是 Mac 和哈希的差异了。

Mac 和数字签名

Mac 跟数字签名也有很多区别和联系的。

Mac 跟数字签名也有类似的地方,因为都可以确认发出人身份,同时判断文件有无被篡改。

但是区别也是明显的,因为生成 Mac 和验证 Mac 需要的密钥是同一个,属于对称加密的范畴。而数字签名属于非对称加密,生成签名用私钥,而验证签名是否有效要用公钥。Mac 的工作方式决定了,发送方和接收方要事先共享同一个密钥,这也是对称加密算法的共性。数字签名的接收方是不能再生成签名的,也就是说不可伪造。但是 Mac 的接收方因为手里也有密钥,所以可以对其他信息生成 Mac 。

这就是 Mac 和数字签名的对比了。

总结

最后总结一下,Mac 是一种带密钥的哈希,可以用来认证发出人身份以及文件是否被篡改。

参考: