【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

admin 2023年8月23日01:12:23评论928 views字数 3961阅读13分12秒阅读模式

CBC-MAC 异或伪造攻击和长度扩展攻击

CBC(Cipher Block Chaining)是一种常见的分组密码模式,用于将块密码转化为可以处理可变长度消息的密码系统。在CBC模式中,每个明文块会与前一个密文块进行异或操作,然后再进行加密。这种异或操作的目的是为了引入密文块之间的依赖性,增加密码的安全性。

然而,如果在实现CBC模式时存在漏洞,攻击者可能会利用异或的性质来进行伪造攻击。其中一种可能性是“Bit Flipping”攻击。

"Bit Flipping" 攻击是一种针对使用分组密码模式(例如CBC)的加密系统的攻击,其中攻击者试图通过修改密文中的某些位来影响解密后的明文。这种攻击的基本思想是,攻击者可以利用异或操作的性质,通过修改密文块中的位,来达到在解密后的结果中引入特定变化的目的。

在一个CBC加密过程中,明文会被分割成块,每个块与前一个密文块异或后再加密。攻击者如果能够控制某个明文块的内容,他们可以通过修改这个明文块来实现特定的影响,比如修改解密后的某个位,从而在解密后的结果中引入意想不到的变化。攻击者可以通过调整某些位来伪造数据,例如将一个特定标志位翻转,导致解密后的结果在特定条件下出现问题。

这种攻击的成功取决于攻击者能否控制特定明文块的内容以及攻击者对加密过程的理解。防止这种攻击的最佳方法是使用完整的消息认证码(MAC)来保护消息完整性,例如在CBC-MAC模式中,将MAC与密文一起传递,从而使攻击者无法对密文进行任意修改。

CBC模式(密码分组链接模式)—(Cipher Block Chaining mode)

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

首先,我们给定一组明文,我们按照SM4加密标准,将数据分成几块,每一块的大小可以是32字节等(将明文分为上面图示的明文分组)

然后我们给定一个长度和分组相同的初始化向量(IV),与每一块明文分组进行异或操作,将得到的数据通过密钥加密,得到密文分组。得到的当前一块的密文分组作为下一个块加密的初始化向量。(如图所示)

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

CBC-MAC 异或伪造攻击

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

还是通过上面的图来介绍,这里探究一下解密的过程:(从后往前)

例如,通过正常的解密,我们要得到明文分组4,应该怎么做:

将密文分组4解密后与密文分组3异或,便得到明文分组4

(这里稍微介绍一下异或的性质,例如A异或B得到C,那么C异或B也会得到A)

因为我们一般情况下,都会知道密文。我们可以任意修改密文分组3,当他与密文分组4解密后的那一部分异或后,那么得到的明文分组就与之前的不同。

(我们可以尽量尝试构造密文分组的每一位------因为我们知道异或是位的运算)

到这里,我们就可以伪造明文分组4为我们想要构成的数据(尽管我们不知道密文分组4的解密密钥是什么,但我们仍然可以任意构造明文分组4)

同理,明文分组3、明文分组2我们都可以通过前一个密文分组来自定义构造我们想要的值(至于第一部分,如果我们知道最初的初始化向量IV,那么也是可以构造的)

CBC-MAC 长度扩展攻击

【题目描述】系统利用一个相同的密钥对两个随机的消息(长度为32字节)进行SM4的CBC-MAC计算,消息和CBC-MAC分别为:{MSG1, MAC1},{MSG2, MAC2}。

【题目要求】 要求选手构造一个新的消息(长度为64字节)和对应的CBC-MAC值:{MSG3, MAC3},提交给系统并且可以通过原密钥的CBC-MAC验证。

【提示内容1】CBC-MAC在消息长度未事先约定的情况下存在伪造风险。

CBC-MAC(Cipher Block Chaining Message Authentication Code)是一种消息认证码算法,用于确保消息的完整性和真实性。然而,在使用CBC-MAC时,如果消息长度未事先约定并且没有进行适当的填充,可能会导致伪造的风险。

CBC-MAC使用了一个分块密码算法(通常是对称加密算法,如SM4)来生成消息的认证码。它将消息分割成块,然后将每个块与前一个块的加密结果进行异或操作,最终生成一个认证码。这个认证码可以用于验证消息是否被篡改。

然而,当消息长度未事先约定并且没有适当的填充时,攻击者可能会利用消息长度的变化来构造伪造的认证码。攻击者可以通过逐步添加块或删除块,来影响最终的认证码生成过程,从而导致认证码不再代表消息的真实完整性。

【提示内容2】:{MSG1||MSG2_1⊕MAC1||MSG2_2, MAC2}。MSG2_1和MSG2_2分别为MSG2的第一个和第二个分组。

  • MSG1:这是消息的第一个部分或分组。

  • MSG2:这是消息的第二部分或分组,它被拆分为两个子分组。

  • MSG2_1:MSG2的第一个子分组。

  • MSG2_2:MSG2的第二个子分组。

  • MAC1:这是应用于MSG1的消息认证码。

  • MAC2:这是应用于MSG2的消息认证码

在这种结构中,消息MSG2被分成两个子分组:MSG2_1和MSG2_2。然后,MSG2_1被与MAC1进行异或操作(⊕),然后与MSG2_2组合在一起。最终,整个结构被应用一个消息认证码算法生成MAC2。

当消息长度未事先约定且没有适当的填充时,攻击者可以利用消息长度的变化来实施一个称为"长度扩展攻击"(Length Extension Attack)的技术。这种攻击可能会影响基于MAC(消息认证码)的算法,如CBC-MAC,当用于不恰当的消息长度时。

下面我会详细解释攻击的原理,并通过一个简化的示例说明。假设我们有一个使用简化的CBC-MAC算法的情景:

  1. 消息分块:消息"M"被分成多个块,每个块用"B1"、"B2"、"B3"等表示。

  2. CBC-MAC过程:消息块"B1"通过加密生成认证码"A1",然后将这个认证码作为下一个块的输入继续加密。最后一个块的输出认证码"A"就是消息的认证码。

  3. 长度扩展攻击:攻击者获得了一个合法的认证码"A",但不知道消息内容。攻击者可以通过构造一个新的消息"M' = M || P",其中"M"是原始消息,"P"是攻击者想要添加的内容,长度与原始消息块一致。

现在让我们通过一个简单的例子来说明:

原始消息:M = "Hello" 原始认证码:A = CBC-MAC("Hello")

攻击者想要构造一个新的认证码,它包含额外的内容:"P = || Evil || Payload"

攻击步骤:

  1. 攻击者获得原始认证码"A"。

  2. 攻击者构造一个新消息:"M' = M || P",即:"Hello || Evil || Payload"。

  3. 攻击者使用原始认证码"A"作为初始认证码,将新消息的每个块依次进行加密。

  4. 最后一个块的输出认证码"A'"就是攻击者构造的伪造认证码。

这个攻击的关键在于,攻击者可以使用原始认证码作为初始认证码,并通过逐步添加块来计算伪造认证码,而不需要知道原始消息内容。这样,攻击者就能够构造出一个看起来合法的消息认证码,而实际上消息内容已经被篡改了。

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

提示:任何数与自身异或结果都是0。

解题代码:

#!/usr/bin/env python3# -*- coding: utf-8 -*-
def xor_hex_strings(hex_str1, hex_str2): """ 对两个十六进制字符串进行异或操作,并返回结果的十六进制表示。 参数: hex_str1 (str): 第一个十六进制字符串 hex_str2 (str): 第二个十六进制字符串 返回: str: 异或结果的十六进制表示 """ int_value1 = int(hex_str1, 16) int_value2 = int(hex_str2, 16) xor_result = int_value1 ^ int_value2 hex_result = hex(xor_result)[2:] # 去除 '0x' 前缀 return hex_result
# 用户输入user_input_hex01 = input("请输入第一个十六进制字符串 (hex01): ")user_input_hex02 = input("请输入第二个十六进制字符串 (hex02): ")
# 计算异或结果并输出hex03 = xor_hex_strings(user_input_hex01, user_input_hex02)print("异或结果:", hex03)

解题过程:

MSG1:218c86db500df382791940a7b4af5964 f34c4bd5c03d4a13ed122e01c426112cMAC1:bd3ddfe024d0765d57623f4ec118cd65-----------------------------------------------------MSG2:d591dede3ee96f2bd3d27b61f9631899 02d3279f2eae95eb944916f8541fac45MAC2:62445b8535c327f675b6837e5cbb7162-----------------------------------------------------请输入您的MSG3(64字节,128个Hex,不要添加空格!)(Please input your 64bytes MSG3(64 bytes,128 hexs,don't using space)):218c86db500df382791940a7b4af5964f34c4bd5c03d4a13ed122e01c426112c 68ac013e1a39197684b0442f387bd5fc 02d3279f2eae95eb944916f8541fac45请输入您的MAC3(Please input your MAC3):62445b8535c327f675b6837e5cbb7162

【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击


阅读 10万+

原文始发于微信公众号(利刃信安攻防实验室):【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年8月23日01:12:23
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【密码技术】CBC-MAC 异或伪造攻击和长度扩展攻击https://cn-sec.com/archives/1971484.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息