消息认证码mac和哈希消息认证码hmac
标题消息认证码—MAC
背景:
用于解决信息加密传输过程中,密码(这里通常为对称加密)被破解从而导致的信息篡改,即使得消息接收者可以通过消息认证码mac识别出收到的信息是否已经被篡改。
原理:
mac是一种与密钥有关的hash函数,具体步骤:
- 接收方和发送方共享一个密钥K
- 发送方将明文消息M和密钥K共同作为mac函数的输入,得到一个mac值,称为A,将A和明文消息M共同加密(使用密钥K)得到密文N,发送给接收方
- 接收方收到消息N后,先用密钥K进行解密,得到明文M和mac值A,将明文M和密钥K共同输入MAC函数,重新得到一个MAC值称为B
- 比较A和B,若A与B相同,则说明消息没有被篡改
消息认证码机制利用的是hash函数的特点,即便密钥被破解,攻击者也只能看到明文M而无法对明文进行修改。若进行修改则无法保持新生成的mac值与原mac值相同
哈希消息认证码—HMAC
HMAC简述:
HMAC是以字节为单位的,任何数据位数都必须被8整除
HMAC中有两个规定好的数分别为ipad=00110110 opad=01011100(不断循环生成一个B字节长的数据)
HMAC算法的实际运算如下:
H
M
A
C
(
K
,
M
)
=
H
(
(
K
⊕
o
p
a
d
)
∣
H
(
(
K
⊕
i
p
a
d
)
∣
M
)
)
HMAC(K,M)=H((K⊕opad)|H((K⊕ipad)|M))
HMAC(K,M)=H((K⊕opad)∣H((K⊕ipad)∣M))
【注】:上式的K是经过处理的,与初始密钥K并不一定相同
算法步骤:
- 若密钥K长度大于B,则用H对K进行压缩产生长为B的新密钥K;若密钥K长度小于B,则用0进行填充,形成一个长度为B的新密钥K(要注意经过步骤1后,K与原先的K有区别,为了书写方便,仍将之称为K)
- 将K与ipad做异或运算得到ikeypad
- 将ikeypad与明文m组合,经过hash函数得到hash sum1
- 将K与opad做异或运算得到okeypad
- 将okeypad与hash sum1组合,经过hash函数得到hash sum2作为最终结果输出