消息认证码

1 1月

1. 消息认证码(message authentication code,简称MAC)

加密用于保护信息的”隐私性“,单向散列函数能防止信息被”篡改“,但这还不够。还需要对信息防伪,即这条信息不是骗子发的。

消息认证码(message authentication code,简称MAC)的输入是信息和一个发送者与接收者之间的共享密钥,输出是一个固定长度的数据,称为MAC值。和单向哈希函数相似,只要消息中改变1比特,MAC值也会随之变化,所以可以这样理解:

消息认证码是一种与共享密钥相关联的单向哈希函数,用于防”伪装“。生活中会看一下短信手机号码,或邮箱地址来识别骗子,MAC就相当于手机号码或邮箱地址。

【单向哈希函数】与【消息认证码】的比较:

注意,共享密钥不直接使用对称密码的密钥,这样会遇到密钥配送问题,如果共享密钥被攻击者截获,攻击者也能计算出MAC值来伪装攻击。所以常用混合密码来解决配送问题:即发送者本地用伪随机数生成器生成对称密码的密钥,并计算出MAC值。然后用公钥对密钥进行加密后,通过网络传递给接收者。接收者收到后用私钥解密得到对称密码的密钥,再计算出MAC值,和接收者的MAC值比对。

消息认证码在现实中使用的场景很广:

  • SWIFT(Society for Worldwide Interbank Financial Telecommunications,环球银行金融电信协会)银行和银行间通过SWIFT来交易,交易过程中SWIFT就使用了消息认证码。
  • IPSec通信协议,也用消息认证码进行校验
  • SSL/TLS安全协议,也用消息认证码进行校验

同混合密码一样,消息认证码会遇到中间人攻击(man-in-the-middle attack)的问题,防止中间人攻击需要对公钥使用证书。

消息认证码无法解决“否认”的问题,因为消息认证码在发送者和接收者之间共享密钥,因此双方都能基于共享密钥计算出MAC值。接收者收到了包含MAC值的消息,MAC值由发送者和接收者两人的共享密钥计算出,因此接收者可以说是发送者发来的,发送者可以说是接收者自编自导自演伪造的,两人就吵起来了。

1.2 HMAC

HMAC是一种使用单向哈希函数来构造消息认证码的方法(RFC2104),其中H就是Hash的意思。任何单向哈希函数都可以被用于HMAC,例如使用SHA-1,SHA-224,SHA-256,SHA-384,SHA-512所构造的HMAC,分别被称为HMAC-SHA-1,HMAC-SHA-224,HMAC-SHA-256,HMAC-SHA-384,HMAC-SHA-512

HMAC过程如下图:

  1. 密钥填充:如果密钥比单向哈希函数的分组长度短,就在末尾补0。如果密钥比单向哈希函数的分组长度长,就先用单向哈希函数生成密钥的哈希值,用这个哈希值作为HMAC的密钥。
  2. ipad是00110110这一比特序列,i是inner的意思
  3. opad是01011100这一比特序列,o是outer的意思

发表评论

邮箱地址不会被公开。 必填项已用*标注