密码学工具4——消息认证码(MAC最全版)

消息认证码介绍

消息认证码,Message Authentication Code(MAC),又称为消息鉴别码、文件消息认证码、讯息鉴别码和信息认证码,是将原消息经过一系列特定算法后得到一小段信息,可以检查原消息的完整性以及身份验证。通过消息认证码可以检查出原消息是否被篡改,也可以检查消息的来源。

消息认证码的输入包括任意长度的消息和一个发送者和接收者之间的共享密钥,可以输出固定长度的数据,即MAC值。

消息认证码与单向散列函数类似可以输出固定长度的输出值,但是消息认证码算法需要使用密钥,进行消息通信时,没有共享密钥的一方,无法验证消息认证码,故基于共享密钥可以实现消息的认证功能;消息认证码算法和单向散列函数还有一个一样的性质,输入消息改变1比特,输出的MAC值会发生变化,故认为消息认证码可以进行消息的完整性确认。

消息认证码的使用步骤可以参考下图

因为共享密钥,使用消息认证码也存在密钥配送的问题,因此使用时也需要解决密钥配送问题,解决密钥配送问题的方法例如公钥密码,密钥分配中心、Diffie-Hellman密钥交换等,在公钥密码的文章已经提及,此处不再赘述。

消息认证码在以下场景有广泛应用

  • SWIFT,银行之间的交易信息传递使用SWIFT,通信内容的认证和完整性校验使用消息认证码;
  • IPsec,IP协议增加安全性的一种方式,基于IPsec的通信内容的认证和完整性都使用消息认证码;
  • SSL/TLS,SSL/TLS中对通信内容的认证和完整性校验使用消息认证码;

消息认证码实现

使用单向散列函数实现消息认证码(HMAC)

HAMC,Hash-MAC,是一种使用单向散列函数来构造消息认证码的方法。HMAC中的散列函数可以使用SHA-1、SHA-2-224/256/384/512,产生多种变种结构。

HMAC的计算流程如上图所示:

密钥处理

如果密钥长度比单向散列函数的分组长度短,则需要对密钥进行填充,一般在末尾补充0;如果密钥长度比单向散列函数的分组长度长,则需要对密钥进行散列处理得到密钥的散列值,再作为密钥使用;

生成密钥序列1

将处理后的密钥与特殊序列1(ipad序列,00110110不断循环,直到与散列函数分组长度一致)进行异或(XOR)计算,得到和密钥相关的比特序列ipadkey;

消息组合

将ipadkey与消息进行组合,将ipadkey附加在消息的开头;

计算散列值

将组合后的消息输入单向散列函数,计算出散列值;

生成密钥序列2

将处理后的密钥与特殊序列2(opad序列,01011100不断循环,直到与散列函数分组长度一致)进行异或(XOR)计算,得到和密钥相关的比特序列opadkey;

散列值组合

将秘钥序列2(opadkey)与散列值组合,将opadkey附加在散列值的开头;

计算MAC

将组合后的散列值再输出单向散列函数,输出的散列值就是种种的MAC。

使用分组密码实现消息认证码(AES-CMAC)

AES-CMAC,基于AES加密的MAC算法,将分组密码的秘钥作为消息认证码的共享密钥来使用,并用AES-CBC模式将消息明文进行加密。在AES-CMAC算法中,IV是固定的,由于消息认证码不需要解密,只需要保留最后一个分组的密文作为消息认证码。

AES-CMAC使用了CBC模式的AES算法对明文进行处理,流程图如下所示:

具体实现细节,可参考之前发布的关于对称加密的文章。

使用公钥密码实现消息认证码

基于公钥密码也可以实现消息认证码,如使用之前文章由提及的ECC算法,RSA算法,具体实现方法与分组密码方法类似,发送方利用公钥做共享密钥对消息加密并得到最终的消息认证码,接收方使用公钥计算MAC进行对比,并使用私钥对密文消息进行解密

加密认证

认证加密(Authenticated Encrption with Associated Data,AEAD) 

常见的对称加密算法,在解密过程中无法确认秘钥是否正确,这样密文可以用任何密钥执行解密运算,得到一组无法确认明文正确性,因此为了保证信息的正确性,需要在堆成加密加密算法上增加一层验证机制,这就是AEAD。

认证加密是一种将对称密码和消息认证码(MAC)相结合,同时满足机密性、完整性和认证三大功能机制。

有一种认证加密方式叫做Encrypt-then-MAC,这种方式先用对称密码将密文加密,然后计算密文的MAC值。在Encrypt-then-MAC方式中,消息认证码的输入消息是密文,通过MAC值就可以判断密文是否可信。

除了Encrypt-then-MAC之外,还有一些其他的认证加密方式,如Encrypt-and-MAC(将明文用对称加密,并对明文计算MAC值)和MAC-then-Encrypt(先计算明文的MAC值,然后将明文和MAC值同时用对称密码加密)。

常见的认证加密方法有GCM和CCM,具体算法可以参考之前发布的文章——对称加密算法,有详细描述。

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值