Feistel结构自设计分组密码的安全性分析

SEF v2 分组密码安全性分析报告


摘要

本报告针对SEF v2分组密码算法的安全性进行了深入评估。该算法采用16轮Feistel网络结构,轮函数融合了AES S-Box替换层与MDS矩阵线性扩散层。通过构建差分分布表(DDT)、线性逼近表(LAT)以及积分测试,验证了该算法对抗差分攻击、线性攻击及积分攻击的强度。分析结果表明,SEF v2在仅3-4轮迭代后即达到极高的安全阈值,16轮的设计提供了充足的安全余量,可有效抵御现有主流密码分析手段。

代码仓库:https://gitee.com/cloud-lumiere/Secure-Enhanced-Feistel


算法结构概述

SEF v2基于Feistel结构,将128位数据分为左右两部分 \(L_0\)\(R_0\)。第 \(i\) 轮的变换如下:

\[L_{i} = R_{i-1} \]

\[R_{i} = L_{i-1} \oplus F(R_{i-1}, K_i) \]

参数

  • 结构类型:平衡 Feistel 结构
  • 分组长度:128 位(64 位半块)
  • 密钥长度:128 位
  • 轮数设计:16 轮
  • 轮函数类型:SPN-like 结构
    组件
  • S盒:使用 AES S-Box(8×8 双射)
  • 扩散层:8×8 MDS 矩阵(GF(2⁸) 上)
  • 密钥扩展:类似 AES-128 的密钥扩展
  • 轮常数:16 个 64 位轮常数
    其中轮函数 \(F\) 的核心步骤包括:
  1. 密钥加\(X = R \oplus K_i\)
  2. 非线性替换\(Y = \text{SBox}(X)\)
  3. 线性扩散\(Z = M_{MDS} \times Y\) (在GF(2^8)上)
  4. 轮常数加\(W = Z \oplus RC_i\)

分析配置

分析方法

分析类型 测试方法 测试轮数 关键指标
差分分析 DDT构建+束搜索 1-4轮 差分概率
线性分析 LAT构建+束搜索 1-4轮 相关系数
积分分析 平衡性测试 1-6轮 平衡字节

测试环境

  • 测试次数:差分/线性多次采样,积分4次重复
  • 数据复杂度:差分/线性使用束搜索,积分使用256明文集合
  • 评估标准:攻击复杂度 ≥ 2¹²⁸ 为安全阈值

差分分析

理论基础

差分攻击利用输入差分 \(\Delta X\) 导致特定输出差分 \(\Delta Y\) 的概率。

\[P[\Delta X \to \Delta Y] = \frac{\#\{x | S(x) \oplus S(x \oplus \Delta X) = \Delta Y\}}{2^n} \]

算法的安全性依赖于高概率差分特征的稀缺性。

代码实现与分析

代码 ddt1.py 构建了S-Box的差分分布表,并使用束搜索寻找最佳路径。

def build_sbox_ddt() -> List[List[int]]:
    ddt = [[0] * 256 for _ in range(256)]
    for x in range(256):
        sx = AES_SBOX[x]
        for y in range(256):
            sy = AES_SBOX[y]
            dx = x ^ y
            dy = sx ^ sy
            ddt[dx][dy] += 1
    return ddt

关键发现

  • S-Box特性:AES S-Box的最大单轮差分概率仅为 \(4/256 = 2^{-6}\)
  • 多轮搜索结果
    • 1轮:单字节活跃,最大概率 \(2^{-6}\)
    • 2轮:经过MDS矩阵扩散,活跃字节增多,概率约为 \(2^{-54}\)
    • 3轮:全状态活跃,最佳路径概率降至约 \(1.262 \times 10^{-29}\) (即 \(2^{-96}\))。
      公式推导
      若每一轮的有效活跃S-盒数量为 \(k\),单个S-盒最大概率为 \(p_{max}\),则 \(r\) 轮后的概率上界为:

\[P_{upperbound} \approx (p_{max})^{\sum_{i=1}^{r} k_i} \]

由于MDS矩阵的扩散性,第3轮后 \(k_i \approx 8\)(全活跃)。3轮累计概率:

\[P_{3-round} \approx (2^{-6})^{6+8+8} = 2^{-132} \]

(注:实际搜索结果为 \(2^{-96}\),虽优于上界但远低于安全阈值 \(2^{-80}\))。

安全性结论

SEF v2 的3轮概率 \(2^{-96}\) 已远低于攻破所需的数据复杂度。对于16轮版本,差分攻击所需的密文对数量将超过 \(2^{128}\)算法抗差分攻击能力极强


线性分析

理论基础

线性攻击寻找输入掩码 \(\Gamma_{in}\) 和输出掩码 \(\Gamma_{out}\),使得:

\[P[\Gamma_{in} \cdot X \oplus \Gamma_{out} \cdot S(X) = 0] = \frac{1}{2} + \epsilon \]

其中 \(\epsilon\) 为线性偏差。

代码实现与分析

代码 lat1.py 计算了线性逼近表,并分析掩码传播。

def build_sbox_lat() -> List[List[int]]:
    lat = [[0] * 256 for _ in range(256)]
    for a in range(256):
        for b in range(256):
            count = 0
            for x in range(256):
                linear_value = dot_product(a, x) ^ dot_product(b, AES_SBOX[x])
                if linear_value == 0:
                    count += 1
            lat[a][b] = count - 128  # 存储偏差项 (count - 128)
    return lat

关键发现

  • S-Box特性:AES S-Box的最大线性偏差为 \(\pm 32\)(即 \(\epsilon_{max} = 2^{-3}\))。
  • 多轮累积
    • 2轮累积优势(log2|corr|)约为 -30。
    • 4轮累积优势降至约 -72。
      公式推导
      根据Matsui的线性堆积引理,假设各轮独立,多轮累积偏差 \(\epsilon_{total}\) 满足:

\[\epsilon_{total} \approx 2^{r-1} \cdot \prod_{i=1}^{r} \epsilon_i \]

转换为对数优势 \(Adv = \log_2 |\epsilon|\)

\[Adv_{total} \approx \sum_{i=1}^{r} \log_2 |\epsilon_i| + (r-1) \]

对于16轮,若每轮保持较优的偏差传播,总优势将极其微小。攻击所需的数据复杂度约为 \(|\epsilon_{total}|^{-2}\)

安全性结论

线性攻击的复杂度与偏差的平方成反比。当累积优势低于 -64 时,攻击复杂度将超过 \(2^{128}\)。SEF v2 在4轮时已达 -72,因此 16轮设计对线性攻击完全免疫


积分/平方分析

理论基础

积分攻击通过选取特定属性的明文集合(如一个字节遍历所有值,其余固定),观察经若干轮加密后输出字节的平衡性(即集合内所有值的异或和是否为0)。

代码实现与分析

代码 integral.py 验证了字节的平衡性。

def bytes_xor_accumulate(values: List[Block128]) -> List[int]:
    acc = [0] * 16
    for v in values:
        b = split_128bit_to_bytes(v)
        for i in range(16):
            acc[i] ^= b[i]
    return acc

关键发现

  • 第1-2轮:所有输出字节保持平衡(和为0)。
  • 第3轮:仅左半部分(前8字节)保持平衡。
  • 第4轮:所有字节的平衡性均被破坏(和不为0)。
    Feistel结构影响:平衡特性可保持 n-1 轮
  • 区分器存在轮数:3轮
  • 最小安全轮数:4轮(无积分区分器)
  • 推荐安全轮数:6轮(完全抵抗积分攻击)

安全性结论

积分区分器在第4轮失效。由于Feistel结构的特性及MDS矩阵的强扩散,输入集合的结构在经过多轮混合后完全消失。SEF v2 的16轮迭代完全防御积分攻击


综合评估

分析维度 理论安全阈值 (近似) SEF v2 实际表现 (3-4轮)
差分分析 \(P < 2^{-80}\) \(P \approx 2^{-96}\) (3轮)
线性分析 \(\epsilon< 2^{-64}\) \(\epsilon\approx 2^{-72}\) (4轮)
积分分析 存在平衡字节 无平衡字节 (4轮)

各类攻击对比

攻击类型 最小安全轮数 推荐轮数
差分攻击 4轮 8轮
线性攻击 4轮 8轮
积分攻击 4轮 6轮
综合评估 4轮 8轮

组件安全性贡献

组件 安全性贡献 抗攻击类型 改进建议
AES S-Box 高非线性、低差分/线性概率 差分、线性、代数 无,已最优
MDS矩阵 强扩散性、高分支数 差分、线性、积分 可优化系数
轮常数 破坏对称性 滑动、相关密钥 增强非线性
Feistel结构 实现简单、解密相同 结构攻击 增加轮数弥补

与标准算法的比较

特性 SEF v2 (16轮) AES-128 (10轮) 3DES (48轮)
结构 Feistel+SPN SPN Feistel
S盒 AES S-Box AES S-Box DES S-Box
扩散 MDS矩阵 MixColumns 置换
实际轮数 16轮 10轮 48轮

性能预估

操作 单轮复杂度 16轮总复杂度 性能预估
S盒查表 8次/轮 128次 极快
MDS矩阵 64次乘法 1024次乘法 中等
密钥扩展 类似AES 一次
总吞吐量 - ~40-60 cycles/byte 良好
posted @ 2026-01-14 18:51  lumiere_cloud  阅读(0)  评论(0)    收藏  举报