防窃听模式CFB

举报
码乐 发表于 2025/12/27 15:23:15 2025/12/27
【摘要】 1 简介国密SM4的CFB模式,,不具备完整性保护这就是为什么逐渐被 CTR / AEAD 模式取代。现代密码学发展的核心趋势:从单纯保证机密性,到同时保证机密性、完整性和认证。我们来详细分析SM4-CFB模式的特点及其被取代的原因。防窃听模式CFB(Cipher Feedback) 工作原理将分组密码“转成流密码”: Ci = Pi ⊕ SM4(K, Ci-1)特点不需要填充支持按字...

1 简介

国密SM4的CFB模式,,不具备完整性保护这就是为什么逐渐被 CTR / AEAD 模式取代。

现代密码学发展的核心趋势:从单纯保证机密性,到同时保证机密性、完整性和认证。我们来详细分析SM4-CFB模式的特点及其被取代的原因。

  • 防窃听模式CFB(Cipher Feedback) 工作原理

将分组密码“转成流密码”:

			Ci = Pi ⊕ SM4(K, Ci-1)
  • 特点

不需要填充

支持按字节/位加密

  • 安全性

⚠️ 中等

抵抗明文结构泄露

不具备完整性保护

  • 优缺点

优点

支持流式数据
无填充
适合通信

缺点
误差扩散,性能一般
不认证数据

  • 应用

实时通信

串口、流式链路

2 SM4-CFB模式原理与特点

CFB(Cipher Feedback)模式工作原理:
加密:前一个密文块作为输入,经过SM4加密后与明文块异或产生密文

密文[n] = 明文[n] ⊕ 加密(密文[n-1])
解密:使用相同的流程,因为异或操作的可逆性

明文[n] = 密文[n] ⊕ 加密(密文[n-1])
CFB的优点(相比CBC):
不需要填充:CFB是流密码模式,可将分组密码转换为自同步流密码

错误传播有限:单个比特错误只影响当前块和下一个块的对应位置

支持实时加密:适合数据流加密,无需等待完整分组

3 为什么CFB逐渐被CTR/AEAD取代

  1. 缺乏完整性保护是根本缺陷

这是CFB被淘汰的最核心原因。我们通过实例说明:

场景:银行使用SM4-CFB加密传输交易指令:“转账1000元给账户A”

攻击示例 - 比特翻转攻击:

原始密文流:C1 C2 C3 C4 C5 …
对应明文: “转 账 1 0 0 0 元 给 账 户 A”

攻击者操作:

  1. 定位到加密金额的位置(假设已知或可猜测格式)

  2. 将密文字节C3的某个比特翻转(异或特定值)

  3. 修改后的密文仍能成功解密,但:

    • 解密后的"1"可能变成"9"(ASCII码0x31 → 0x39)
    • 结果:“转账9000元给账户A”

关键问题:接收方无法检测密文是否被篡改!攻击无需知道密钥,只需知道数据格式和位置。

  1. CFB的其他局限性
  • a. 无法并行加密

CFB必须串行加密(伪代码示意)

    def cfb_encrypt(plaintext, iv):
        ciphertext = []
        prev_cipher = iv

        for block in plaintext:
            keystream = sm4_encrypt(prev_cipher)  # 依赖前一个密文
            cipher_block = block ⊕ keystream
            ciphertext.append(cipher_block)
            prev_cipher = cipher_block  # 串行依赖

        return ciphertext

而CTR模式可以完全并行:

    def ctr_encrypt(plaintext, nonce):
        ciphertext = []

        # 所有计数器值可预先计算
        counters = [nonce + i for i in range(len(plaintext))]
        keystreams = parallel_sm4_encrypt(counters)  # 并行加密!

        for i, block in enumerate(plaintext):
            ciphertext.append(block ⊕ keystreams[i])

        return ciphertext
  • b. 错误传播特性在现代网络中弊大于利

历史优势:在易出错的通信信道(如早期无线电),CFB的错误有限传播是优点

现代劣势:在TCP/IP等可靠传输协议上,错误传播无意义,反而影响性能

  • c. 初始化向量(IV)管理复杂

CFB需要随机且唯一的IV

但IV重用导致的后果不如CTR模式严重,降低了开发者的警惕性

4 完整性缺失导致的具体攻击场景

场景1:加密数据库字段

– 使用CFB加密的信用卡号字段
加密存储:0x7A3F… (SM4-CFB加密"1234-5678-9012-3456")

攻击者:

  1. 即使不知密钥,也可将密文中的某些比特翻转
  2. 数据库查询仍能返回"解密后"的数据,但可能是:
     "1234-5678-9012-8456" -- 最后几位被修改
  3. 系统无任何异常告警!

场景2:物联网设备控制指令

设备接收加密指令(SM4-CFB):
“OPEN_VALVE=50%&TIMEOUT=60s”

攻击者通过有线/无线嗅探:

    1. 截获加密数据包
    2. 修改特定位置的密文比特
    3. 设备解密后执行:
       "OPEN_VALVE=100%&TIMEOUT=3600s"  -- 阀门全开1小时!
    4. 无完整性校验 → 设备执行恶意指令

场景3:协议降级攻击
在混合支持CFB和GCM的系统中:

客户端支持:GCM, CBC, CFB
服务器支持:GCM, CFB

中间人攻击:

  1. 拦截TLS握手,将算法列表中的GCM移除
  2. 强制双方使用CFB模式
  3. 后续通信无完整性保护,可随意篡改

5 CTR/AEAD模式的全面优势

CTR(计数器)模式优势:
完全并行:所有计数器块可同时加密

随机访问:可直接解密任意位置数据

无需填充:天然支持任意长度数据

与认证结合简单:CTR+HMAC是常见安全组合

AEAD(认证加密)模式(如GCM)的绝对优势:

  1. 机密性+完整性+认证三位一体
  • GCM工作流程

ciphertext, tag = gcm_encrypt(
plaintext=“转账1000元”,
key=sm4_key,
nonce=随机数,
aad=“交易ID:12345” # 额外认证数据
)

  • 解密时自动验证

try:
plaintext = gcm_decrypt(ciphertext, tag, key, nonce, aad)
# 任何篡改都会在此抛出异常
except AuthenticationError:
reject_message() # 密文被篡改!

  1. 抗重放攻击能力

通过aad(附加认证数据)可以绑定序列号、时间戳:

加密{明文:指令, aad:“seq=1001|time=2024-01-01 10:00:00”}
攻击者重放旧包 → 序列号/时间戳验证失败 → 拒绝

  1. 性能优化

硬件加速:现代CPU(Intel AES-NI)和密码芯片对GCM有专门优化

单次处理:加密和认证一次完成,比"CTR+HMAC"两次遍历高效

  • 国密标准的发展趋势

现行国密标准体系:
GB/T 17964-2021:定义了SM4的各种工作模式

实际应用推荐:

首选:SM4-GCM(GB/T 36624-2018)

次选:SM4-CTR + HMAC-SM3

遗留系统:SM4-CBC/CFB + HMAC-SM3

避免使用:纯SM4-ECB/CBC/CFB(无认证)

迁移路径示例:

传统系统:SM4-CFB加密存储
风险:数据可被悄无声息地篡改

升级方案:

  1. 短期:添加HMAC-SM3认证(Encrypt-then-MAC)
  2. 中期:迁移到SM4-CTR + HMAC-SM3
  3. 长期:全面采用SM4-GCM

SM4-CFB被取代的根本原因在于:它只解决了"偷看"问题,但没解决"篡改"问题。

在现代威胁模型中:

机密性威胁(偷看)依然存在

完整性威胁(篡改)更为常见和危险

认证需求(身份确认)必不可少

6 小结

CFB模式诞生于以"防窃听"为主要威胁的时代,而现代密码学已进入"认证加密"时代。
SM4-GCM等AEAD模式提供了"一键式"安全解决方案,开发者不再需要手动组合加密和认证组件,从根本上避免了因错误实现导致的安全漏洞。

因此,在新系统中采用SM4-GCM,不仅更安全,而且更简单、更高效,符合"安全默认化"的设计原则。CFB模式仅应在维护遗留系统或特定约束环境下使用,且必须与HMAC-SM3等认证机制配对使用。

【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。