开发技能SSM & SpringSecurity加解密算法摘要哈希加密MAC

MAC,即消息认证码。与Hash 类似,它也用一段小的数据(称为MAC)来代表一段数据,不同的是,MAC 在生成消息认证码时使用对称加密 来保证数据来自约定好的合法的伙伴。

mac_code = mac_algorithm(mac_key + message);
MAC 的认证机制如下:
  1. 发送者和接收者存储对称加密的密钥。
  2. 发送者通过MAC算法计算出消息的MAC值,并和消息一起发给收信者
  3. 收信者用同样的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,这中恶意数据可能是一些窃取、攻击类信息,容易造成安全隐患。

Built with LogoFlowershow