消息认证码的输入包含:任意长度的消息,密钥(发送者和接收者共享).输出:固定长度的密钥。
消息认证码的主要功能:
- 数据完整性:计算MAC时,将消息和密钥进行计算产生MAC值,若数据被第三方攻击者修改则计算的MAC值并不相同,这保证了数据的完整性。
- 数据真实性:计算MAC时,由于密钥只有发送者和接收者共享,则保证了数据的真实性。若密钥被第三方攻击这窃取则就无法保障数据的真实性。
- 密码验证:在某些情况下,MAC还可以用作用户密码的验证机制,当合法的用户数据正确密码时,系统可以提取正确的MAC,使用正确的密码和API key所所生成的MAC与存储在服务器上的MAC进行比较,就可以完成密码验证工作。
- 重放攻击
攻击者截获网络上的MAC数据包,并将其重新发送到目标用户,欺骗目标用户相信这是合法的通信。比如:
讯享网实验:
讯享网
在上面的代码中,使用了ARP,ICMP和TCP三种不同类型的数据包的处理函数。每种函数根据接收到的数据包构建新的数据包,并使用send或者sendp函数将其发送回网络中。在主程序中执行sniff函数捕获10个数据包,然后对每个数据包进行重放攻击,既实现的三个函数。
- 中间人攻击
攻击者伪装为合法的通信方,并试图截获或篡改数据包。
下面这个实验使用scapy实现消息认证码的中间人攻击的一个简单案例,该脚本将获取网络上的数据包,篡改身份验证并重放。
- 内部攻击
当攻击者拿到系统内部权限时,攻击者获取到密钥,从而达到攻击的目的。
- 差分攻击
攻击者拥有2个或者多个有效的MAC输入,并试图推测出正确结果。这种攻击需要针对具体实现的算法进行分析。

差分攻击需要对加密算法进行分析,在python中有HMAC库支持差分攻击,下面是一个简单的案例:
讯享网
上面的代码使用hmac库来计算SHA-256 HMAC,并通过枚举查找与给定输出匹配的密钥字节。
- 密钥生成算法(Gen):
输入:安全参数n, 输出: 满足特定分布的密钥k
- 消息验证码子算法(Mac)
输入:密钥k, 消息m; 输出:MAC标签t,
- 验证子算法(Vrfy)
输入: 密钥k, 消息m, 标签t; 输出:
其中b=1则认证成功,否则失败
消息认证码的消息验证码子算法有两个方法:
- 单向散列函数()的实现
- 分组密码
- 密钥生成算法(Gen):
单向散列函数HMAC
其中:k是密钥,m是认证消息,XOR是异或运算,opad是外部的填充常数,ipad是内部的填充常数,“+”是连接, H()是哈希函数,比如MD5,SHA1,SHA256等。

- MD5-MAC
讯享网
- SHA1-MAC
- SHA256-MAC
分组密码
- CBC-MAC
加密过程:

解密过程:

CBC-MAC的消息认证公式如下:
实验:
讯享网
我们需将此消息进行cbc-mac计算。在发送之前,需要对其进行填充以确保其长度是AES块大小的倍数(在本例中为16字节)。代码如下:
使用pyaes库来计算经过CBC-MAC处理后的数据块,利用循环使整个信息经过处理:
讯享网
参考博客




版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/147289.html