消息鉴别/认证(message authentication)
消息认证是一种允许通信者验证所收消息是否可信的措施。当消息、文件、文档或其他数据集合是真实的,且来自合法信源,就称其为可信的。
包括两个方面:
- 验证消息内容是否被篡改
- 验证信源是否可信
* 还可能希望验证消息的时效性(时间戳)及实体间消息流的相对顺序(序列号)
上述都属于数据完整性范畴
-
消息鉴别机制: 一般情况下
- 对称加密的鉴别 ---------------> (有密钥,需解密)
- 消息鉴别码MAC ---------------> (有密钥,不解密)
- 散列函数 ---------------> (无密钥,不解密)
- 数字签名机制 ---------------> (有密/私钥,需验证)
- 无条件安全鉴别码
消息鉴别机制——对称加密的鉴别
在加密的基础上能实现简单的消息鉴别
- 一定程度上验证了消息源:发送和接收方共享一个密钥,只有真正的发送者才能够成功为对方加密
- 一定程度上验证完整性:解密后的消息里带有错误检测码和序列,可被接收者用于确认消息是否被篡改过,序列号是否正常(在ECB模式下分组重排仍是威胁)
消息鉴别机制——消息鉴别码MAC
- 消息的发送者所做的:
①对要发送的消息,使用一个收发双方共享的密钥和一定算法产生一个短小定长的数据分组,称认证码
MAC = F(KAB,M)
M是可变长的报文, KAB是共享密钥,MAC是定长的认证码
②将认证码与消息明文(不关注消息是否保密)一起发送出去。
- 消息的接收方所做的:
①对收到的明文消息用同样的密钥和算法计算得MAC’;
②验证MAC’与收到的MAC是否相同;
验证了完整性:明文被篡改为M’,攻击者要计算一个新认证码F(KAB,M’)才能通过认证,但显然,没有密钥KAB攻击者无法得出认证码。所以只有完整的消息才能被验证MAC是匹配的。
验证了消息源:正确的MAC是利用密钥生成的。所以如果MAC匹配,意味着发送方是具有密钥的合法发送者;
* 若消息中包含序列号,接收者还可以确认消息的正确顺序
Mac的生成方法:
- 许多算法可用于MAC生成,FIPS PUB 113就推荐使用DES,选择密文的最后几个比特用作MAC。
- 生成MAC的过程虽然类似加密,但算法是不需要可逆的,所以许多认证函数由于设计的数学特性,相比加密更不容易被攻破。
消息鉴别机制——单向散列函数
- 单向散列函数是消息认证码的一种变形
MAC = E(K,H(M))
- 散列函数也可将任意长度的明文消息作为输入,生成定长的唯一的消息摘要。与MAC不同是消息摘要的生成不需要密钥。
- 利用单向散列函数进行消息认证,消息摘要须以可信形式传送,所以实际上仍会用到加密,只是加密的对象不是整个消息而是消息摘要,计算量很少。
- 基于软硬件实现速度、成本、专利等方面的考虑,人们很希望有“利用散列函数但不使用加密”的消息认证技术——带密钥散列MAC。
MAC = H(K,M)