1. 数据完整性
类似于通信中的校验码功能,在密码学领域数据完整性用于验证收到信息的正确性,校验收到的信息是否经过篡改,校验收到的信息是真实的发送者发送而非伪造。发送者通过编码为消息增加一些“冗余”,生成一个校验值,并将该校验值附在消息之后。接收者根据协商好的规则,利用附加的校验值来检测接收到消息的正确性。
2. 对称技术
- 有效的变换f和g是对称算法,意味着f = g,并且Ke = Kv;
- MAC(消息认证码):由对称密码技术生成的MDC;
- MAC的生成验证可以使用:keyed hash函数,分组加密等;
3. Keyed hash函数与HMAC
- 一个确定的函数,可以将任意长的比特串映射为一个固定长的比特串,该函数需要key作为参数;
- 设h表示一个Keyed hash函数,其固定输出长度为|h|;
- h应当是混合变换的;
- h应当可以抵抗冲突攻击;
- h应当可以抵抗原像攻击;
- h应当具有实用有效性;
使用keyed hash函数构造生成的MAC被称为HMAC,与发送者共享key的接收者收到M,并重新计算HMAC,检验与收到的HMAC是否一致,HMAC = h(key || M || key),用密钥包含信息的两端是阻止攻击者直接修改信息前缀或者消息后缀。
4. 基于分组加密算法的MAC
使用分组加密构造keyed hash函数,选择CBC模式,密钥为k,每一块加密函数为Ek(m):
- 对信息M分组,分成若干长度相同(分组加密算法每一块的长度)的块M = m(1)m(2)……m(t),如果最后一块长度不够,则需要随机填充padding;
- H(0) = IV,随机初始向量;
- H(i) = Ek(m(i) ⊕ H(i-1)),i = 1, 2……t;
将(IV, H(t))作为MAC;
说明:CBC-MAC是一个单向变换,不可求其逆数据:因为MAC里面包含的只是分组加密得到的最后一块H(t)与IV,根据CBC的加密解密流程:无论是接收者还是中间的攻击者都无法根据最后一块H(t)和IV反推出全部的MAC值,因此这是一个单向变换;
- MAC在MAC空间中分布均匀;
- 发送者与接收者共享密钥k,发送者发送消息M与CBC-MAC,接收者收到M与MAC(IV, H(t)),进行再一次计算,验证是否相同;
5.生日攻击
生日攻击又称平方根攻击,攻击者利用生日现象,找到冲突的哈希函数值,伪造报文,从而进行攻击。为了实施攻击,攻击者通过计算若干message-hash数值对,直到找到冲突。
【例】
M = (price, description, R), h = h(price, description, R)
M1 = (price1, description, R1), h1 = h(price1, description, R1)
M ≠ M1, h = h1, use (M1 || h1) to forge(M || h)
生日攻击:攻击者计算 2