国密加密OFB输出反馈模式

举报
码乐 发表于 2025/12/28 09:30:22 2025/12/28
【摘要】 1 简介OFB(Output Feedback)输出反馈模式OFB(Output Feedback Mode)作为五种用于 底 层对称密钥块密码算法的机密性作模式之一,电子密码本(ECB)、密码块链 (CBC)、密码反馈(CFB)、输出反馈(OFB)和计数器(CTR)。其过程几乎与密码反馈模式相同,只是它以反馈方式发送加密输出,而非实际密码的异或输出。在该输出反馈模式下,分块的所有位都被发...

1 简介

OFB(Output Feedback)输出反馈模式OFB(Output Feedback Mode)作为五种用于 底 层对称密钥块密码算法的机密性作模式之一,电子密码本(ECB)、密码块链 (CBC)、密码反馈(CFB)、输出反馈(OFB)和计数器(CTR)。

其过程几乎与密码反馈模式相同,只是它以反馈方式发送加密输出,而非实际密码的异或输出。在该输出反馈模式下,分块的所有位都被发送,而不是发送选定的s位。

2 工作原理

分组密码的输出反馈模式对比特传输错误具有极强的抵抗力。它还减少了密码对明文的依赖或关系。

在密码学中,分组密码(如AES)旨在加密固定大小的数据块(例如128位)。输入块的大小通常与加密输出块的大小相同,而密钥长度可能不同。

流密码更灵活:它们设计用于加密任意大小的数据(例如PDF文档),有时可能以流形式出现(字节或帧序列,例如视频流)。

大多数流行的对称密钥加密算法都是分组密码,但密码学家提出了几种方案,将分组密码转换为流密码并加密任意大小的数据。这些方案被称为“分组密码作模式”,适用于大多数分组密码,如AES、RC6、Camellia、Serpent等。

当对称密码与分组作模式结合时,所得到的密码构造用密码名称、分组模式名称以及密钥大小表示。示例:

AES-256-GCM——带有256位加密密钥和GCM分组模式的AES密码

AES-128-CTR - AES密码,配备128位加密密钥和CTR分组模式

Serpent-128-CBC——带有128位加密密钥和CBC块模式的Serpent密码

  • 工作原理

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

完全变成流密码

错误不扩散

  • 安全性

中等

IV 绝不能复用

不防篡改

3 为什么OFB模式在工程中较少使用

OFB(Output Feedback)模式工作原理:

密钥流[n] = 加密(密钥流[n-1]) # 初始为IV
密文[n] = 明文[n] ⊕ 密钥流[n]
OFB的独特特性与问题:

  1. 预计算优势但实际受限

OFB可以预先生成密钥流

    def ofb_precompute(iv, length):
        keystream = []
        current = iv
        for _ in range(length):
            current = sm4_encrypt(current)  # 仅依赖前一个密钥流
            keystream.append(current)
        return keystream  # 可离线计算

理论优势:在资源受限设备上,可在空闲时预计算密钥流。
实际问题:现代系统更看重实时性能和并行化,预计算优势不明显。

  1. 错误不传播的双刃剑

传输错误:密文比特翻转 → 仅影响对应明文的单个比特
解密结果:明文仅单个比特错误,其他部分完好
看似优点:在嘈杂信道中,错误影响最小化。
实际是致命缺陷:攻击者可以精准定位修改特定数据位!

攻击示例 - 数据库字段篡改:

  • 假设加密的员工工资字段

原始数据: “salary:0100000” # 10,000元
加密后: 0x3A7F…

攻击者翻转密文的特定比特(无需知道密钥)
解密后变为: “salary:0900000” # 90,000元!
只有一位字符从’1’(0x31)变为’9’(0x39),其他字符不变
系统完全无法察觉

  1. 同步敏感性极高

IV必须唯一:IV重用会导致相同的密钥流,等同于一次一密的本重用

失去同步即永久失效:若加解密端状态不同步(丢包、位滑动),必须重新初始化整个会话

  1. 与CFB/CTR的对比劣势

       特性		OFB			CFB			CTR
       错误传播		无		有限			无
       预计算能力		✔️		❌			✔️
       并行加密 		❌		❌			✔️
       随机访问		❌ 		❌			✔️
       自同步 		❌		✔️			❌
    

IV重用后果 灾难性(密钥流相同) 严重但可恢复 灾难性(密钥流相同)
关键洞察:OFB处在尴尬的中间位置:

想要错误不传播?CTR同样能做到且更优

想要自同步?CFB更合适

结果:OFB没有不可替代的独特优势

4 CTR为什么比OFB更优

决定性优势:并行化能力

CTR模式的天然并行性

      def ctr_encrypt_parallel(plaintext, nonce):
          # 生成计数器序列:完全独立!
          counters = [nonce + i for i in range(len(plaintext))]

          # 所有计数器可并行加密(硬件/多核优化)
          keystream = parallel_execute(sm4_encrypt, counters)

          # 并行异或操作
          return parallel_xor(plaintext, keystream)

OFB模式的串行依赖

    def ofb_encrypt_serial(plaintext, iv):
        keystream = iv
        ciphertext = []

        for block in plaintext:
            keystream = sm4_encrypt(keystream)  # 必须等上一步完成
            ciphertext.append(block ⊕ keystream)

        return ciphertext

性能实测对比(理论):

数据量:1GB
假设SM4加密耗时:50ns/block (16字节)

CTR模式:

  • 加密阶段:1000个核心并行 → 总时间 ≈ 主要开销在异或

OFB模式:

  • 加密阶段:完全串行 → 1GB / 16B × 50ns ≈ 3.125秒
  • 无法利用多核/GPU加速

工程友好性:

随机访问:CTR可直接解密文件中间部分,OFB必须从头开始

IV管理:CTR使用Nonce+Counter,更易保证唯一性

与认证组合:CTR+HMAC是标准模式,OFB较少见

  • OFB的优点

在CFB的情况下,一个块中的单个比特错误会传播到所有后续块。这个问题被OFB解决了,因为它在明文块中没有位错误。因此,传输中的错误不会传播。

错误不扩散
预计算
无填充

  • OFB的缺点

OFB的缺点是,由于其作模式相比CFB更容易受到消息流修改攻击。
如果密钥流被重复使用,安全性就会受到威胁。

不支持并行,
IV 复用即灾难,无完整性保证

无完整性 工程中较少使用,CTR 更优

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

评论(0

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

全部回复

上滑加载中

设置昵称

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

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

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