# 分组密码设计 **Repository Path**: cloud-lumiere/Secure-Enhanced-Feistel ## Basic Information - **Project Name**: 分组密码设计 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-09 - **Last Updated**: 2026-01-16 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # SEF-Cipher (Secure Enhanced Feistel Cipher) ## 项目概述 **SEF-Cipher** 是一个基于传统DES算法的现代增强型Feistel结构对称加密算法。本项目旨在解决原始DES算法的关键安全问题,包括密钥长度过短、S盒安全性不足和扩散速度慢等缺陷,同时保持Feistel结构的简单性和可分析性。 **核心理念**:在继承经典Feistel结构优点的同时,融入现代密码学设计思想,创建一个教育性与实用性兼备的加密算法。 ## 项目背景 ### 原始DES的问题 1. **密钥过短**:56位密钥易受暴力攻击 2. **S盒设计局限**:4×4 S盒,代数结构相对简单 3. **扩散缓慢**:需要多轮才能达到完全扩散 4. **分组长度限制**:64位分组在现代应用中不够安全 ## 项目结构 项目结构如下: Secure Enhanced Feistel Cipher - SEF - std_SEF.py 标准实现 - test_SEF.py 标准测试 - analysis_SEF - GUI_analy.py Feistel结构可视化 - ddt1.py 差分测试 - lat1.py 线性分析 - integral.py 积分分析 - MDS.py 矩阵分析 - 性能测试 - DES.py 原始DES实现 - aes.py 标准AES实现 - benchmark.py 性能基准测试 ## 算法基本信息 | 属性 | 规格 | | -------- | --------------------------- | | **算法名称** | **Secure Enhanced Feistel** | | **分组长度** | 128位 | | **密钥长度** | 128位 | | **轮数** | 16轮 | | **结构类型** | 平衡Feistel网络 | | **设计原则** | 借鉴安全组件的Feistel结构 | ## 已完成功能 - ✅ 完整算法实现: 包括加密、解密、密钥扩展等 - ✅ 测试套件: 完整的单元测试覆盖所有功能 - ✅ 性能基准: 加密性能测试工具 - ✅ 安全分析: 扩散性测试和常量验证 - ✅ API接口: 面向字节和块的不同接口 - ✅ 填充机制: PKCS#7填充标准 - ✅ 工作模式: CBC和CTR模式支持 - ✅ GUI: 设计使用界面,完整展示中间过程 - ✅ 性能分析:测试算法的运行效率和性能 - ✅ 安全性分析:差分分析和线性分析 - ✅ 测试报告:详细测试结果和报告 ## 算法整体框架 ### 算法总体流程 加密流程: 明文P(128位) → 初始拆分$(L₀,R₀)$ → 16轮Feistel轮函数 → 最终组合$(L₁₆,R₁₆)$ → 密文C(128位) 解密流程: 密文C(128位) → 初始拆分$(L₁₆,R₁₆)$ → 16轮Feistel轮函数(子密钥逆序) → 最终组合$(L₀,R₀)$ → 明文P(128位) #### S盒代换组件 组件: SubBytes 输入: 64位数据(8字节) 处理: 每个字节独立通过AES S-Box替换 输出: 64位数据(8字节) 属性: 非线性变换,提供混淆 #### 线性扩散组件 ```python # 8×8 MDS矩阵 M (元素为GF(2⁸)中十六进制值) mds_matrix = [ [0x01, 0x03, 0x04, 0x05, 0x06, 0x08, 0x0B, 0x07], [0x03, 0x01, 0x05, 0x04, 0x08, 0x06, 0x07, 0x0B], [0x04, 0x05, 0x01, 0x03, 0x0B, 0x07, 0x06, 0x08], [0x05, 0x04, 0x03, 0x01, 0x07, 0x0B, 0x08, 0x06], [0x06, 0x08, 0x0B, 0x07, 0x01, 0x03, 0x04, 0x05], [0x08, 0x06, 0x07, 0x0B, 0x03, 0x01, 0x05, 0x04], [0x0B, 0x07, 0x06, 0x08, 0x04, 0x05, 0x01, 0x03], [0x07, 0x0B, 0x08, 0x06, 0x05, 0x04, 0x03, 0x01] ] ``` MDS矩阵基于Cauchy矩阵构造 **矩阵特性**: 1. **MDS属性**:任何非零输入差分至少改变9个输出字节(最大距离可分) 2. **分支数**:9(对于8×8矩阵,理论最优) 3. **对称性**:矩阵具有分块对称结构,便于实现优化 4. **可逆性**:矩阵在GF(2⁸)上可逆,确保轮函数可逆 #### 密钥扩展组件 ```python 组件: KeyExpansion 输入: 128位主密钥 处理: 1. 初始化为4个32位字W[0..3] 2. 扩展为32个32位字W[0..31](AES-128算法) 3. 抽取16个64位轮密钥: Kᵢ = W[2(i-1)] || W[2(i-1)+1] 输出: 16个64位轮密钥K₁..K₁₆ ``` #### 初步测试 `test_SEF.py` 包含了全面的单元测试,验证以下功能: - **常量初始化**:AES S-box、逆S-box、MDS矩阵、RC表和RCON值 - **数据转换**:字节与整数间的转换函数 - **有限域运算**:GF(2^8)上的乘法运算 - **S盒操作**:AES S-box及其逆操作 - **MDS变换**:最大距离可分矩阵变换 - **轮函数**:加密轮函数的正确性 - **密钥扩展**:128位主密钥扩展为16个64位轮密钥 - **加解密往返**:确保加密后再解密能恢复原文 - **字节级加解密**:处理任意长度字节数据 - **填充机制**:PKCS#7风格的数据填充 - **扩散性质**:雪崩效应验证 - **性能基准**:加密吞吐量测试 ## 安全性分析 ### 差分密码分析 S盒最大差分概率$2^{-6}$ 4轮最小活跃S盒数18个 4轮最大差分概率:$P_{diff}(4) ≤ (2^{-6})^{18} = 2^{-108}$ ### 线性密码分析 S盒最大线性相关系数$ε_{max} = 2^{-3}$ 根据线性堆积引理,r轮线性逼近的相关系数上界为: $ε_{lin}(r) ≤ (ε_{max})^{AS_{lin}(r)}$ 其中$AS_{lin}(r)$是r轮的线性活跃S盒数,与差分活跃S盒数具有相同的下界 因此: - 4轮:$ε_{lin}(4) ≤ (2^{-3})^{18} = 2^{-54}$ - 6轮:$ε_{lin}(6) ≤ (2^{-3})^{27} = 2^{-81}$ - 8轮:$ε_{lin}(8) ≤ (2^{-3})^{36} = 2^{-108}$ **攻击数据复杂度**:线性攻击所需明文对数量约为$ε_{lin}^{-2}$: - 4轮:$N ≥ 2^{108}$ - 8轮:$N ≥ 2^{216}$,完全不可行 ### **积分攻击** MDS矩阵对积分攻击的抵抗体现在: 1. **快速破坏平衡性**:在第3轮时,MDS矩阵将单个活跃字节的积分特性扩散到多个字节,在第4轮完全破坏平衡性 2. **提高积分区分器轮数**:在Feistel结构中,MDS矩阵使积分区分器最多维持3轮,4轮后完全失效 ## 算法特性总结 ### 结构特性 | 特性 | 描述 | |------|------| | **对称性** | 加解密结构对称,仅子密钥顺序不同 | | **可逆性** | 每轮变换均可逆,确保整体可逆 | | **模块化** | 轮函数独立,易于分析和实现 | | **并行性** | S盒层可并行处理8字节 | ### 安全特性 | 组件 | 安全性贡献 | 抗攻击类型 | | --------- | ------------- | -------- | | AES S-Box | 高非线性、低差分/线性概率 | 差分、线性、代数 | | MDS矩阵 | 强扩散性、高分支数 | 差分、线性、积分 | | 轮常数 | 破坏对称性 | 滑动、相关密钥 | | Feistel结构 | 实现简单、解密相同 | | ### 性能特性 | 操作 | AES-128 (10轮) | 3DES (48轮) | SEF-16 (16轮) | SEF-10 (10轮) | **单位说明** | | ---------- | ------------- | ----------- | ------------ | ------------ | -------- | | **分组大小** | 128位 | 64位 | 128位 | 128位 | 算法基本参数 | | **总轮数** | 10 | 48 | 16 | 10 | 加密轮次 | | **S盒查找** | 160次 | 768次 | 128次 | 80次 | 非线性操作 | | **置换/扩展** | 120次 | 144次 | | | 比特重排 | | **GF乘法** | 160次 | | 1024次 | 640次 | 有限域乘法 | | **异或运算** | 160次 | 240次 | 256次 | 160次 | 比特异或 | | **矩阵操作** | 40次(4×4) | 0次 | 16次(8×8) | 10次(8×8) | 线性变换 | | **密钥调度** | 简单 | 复杂 | 中等 | 中等 | 密钥扩展 | | **每字节操作数** | 30 ops/byte | 144ops/byte | 88 ops/byte | 55 ops/byte | 操作密度 | ## 🔧 实现规划 ### 阶段一:核心算法(3天) - DES的实现 - Feistel结构基础实现 - 128位分组支持 - S盒实现 - 密钥扩展 ### 阶段二:安全增强(2天) - MDS扩散层实现 - 完整密钥扩展算法 ### 阶段三:安全分析(2天) - 性能优化 - 完整测试套件 - 基准测试 - 安全分析 - 报告撰写 - 文档编写 - 测试报告 - 讲解PPT ## 📊 成果 ### 可交付成果 1. **完整的算法规范文档** 2. **优化的Python语言实现** 3. **报告和讲解PPT** 4. **完整的测试套件和测试向量** 5. **性能基准测试报告** 6. **安全性分析报告** 7. **设计与实现博客** https://www.cnblogs.com/luminescence/p/19467354 8. **安全性分析博客** https://www.cnblogs.com/luminescence/p/19483816