MAC
MAC,即消息认证码。与Hash 类似,它也用一段小的数据(称为MAC)来代表一段数据,不同的是,MAC 在生成消息认证码时使用对称加密 来保证数据来自约定好的合法的伙伴。
mac_code = mac_algorithm(mac_key + message);
MAC 的认证机制如下:
- 发送者和接收者存储对称加密的密钥。
- 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者
- 收信者用同样的MAC算法计算收到的消息的MAC值,并对比
接收到的mac与计算后的mac。
从本质上讲,MAC是一种算法,它将消息与共享密钥组合在一起作为输入,输出一个代表共享密钥和消息的数据。
MAC可用于数据完整性和身份验证。消息、密钥中的任何更改都会导致不同的 MAC,因此只要没有密钥,攻击者就无法识别和验证MAC。
MAC 算法可能受到长度扩展攻击
MAC 算法面临的常见威胁是长度扩展攻击。要实现长度扩展攻击只需要知道密钥的长度和使用的算法即可。
mac算法:
mac_code = md5("my_key" + "my_message1")
原始要发送的消息+mac:
"my_message1" + mac1
MD5 计算具备可循环冗余计算的特性:
md5_code1 = md5("base");
md5_code2 = md5(md5_code1 + "extern");
其中,md5_code1、md5_code2 都是正确的 md5 mca。即在计算 md5 mac 时,可以在上一次的基础上追加一个数据,得到的 MD5 数据仍旧是正确的 MD5 mac。 那么作为攻击者,要实现长度扩展攻击,主要需完成下面几步:
设法获取 MAC 算法的 KEY 的加密数据 secret 的长度(不需要知道 key 的值)。 生成一个附加消息(extern)。使用原始消息对应的 md5_code1 与扩展的消息(攻击数据)生成 md5_code2.
重新组合 secret + base + extern + md5_code2,这样接收方在接收到数据后,运行 md5 算法并对 secret 执行解密数据,就会发现数据是对的,然而实际上,攻击者在原始的 base 信息后面增加了一段恶意的数据 extern,这中恶意数据可能是一些窃取、攻击类信息,容易造成安全隐患。