# EncryptAlgorithm **Repository Path**: pengyoucongcode/encrypt-algorithm ## Basic Information - **Project Name**: EncryptAlgorithm - **Description**: 本仓库是对一个具体密码构想的完整研究记录与参考实现: > **把字节摆成立方体做顶点置换(空间几何)→ 用高斯函数做数值变换(高等数学)→ 最后以哈夫曼编码输出文本(现场编码算法)** 我们把这个三元组合完整地实现了出来,量化了它的缺陷,然后按"同一原理、不同组合"的思路逐关节替换,最终收敛出一个通过 11 项企业准入基线的冻结版本 **CGAE-1**。 - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-01 - **Last Updated**: 2026-11-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EncryptAlgorithm — 组合式文本加密算法的拆解、度量与收敛 本仓库是对一个具体密码构想的完整研究记录与参考实现: > **把字节摆成立方体做顶点置换(空间几何)→ 用高斯函数做数值变换(高等数学)→ 最后以哈夫曼编码输出文本(现场编码算法)** 我们把这个三元组合完整地实现了出来,量化了它的缺陷,然后按"同一原理、不同组合"的思路逐关节替换,最终收敛出一个通过 11 项企业准入基线的冻结版本 **CGAE-1**。 同一套"先忠实实现、再逐关节替换"的方法论随后又被用在另外两组构想的拆解上, 分别产出素域矩阵线 **MFAE-1** 与八卦爻线 **BGAE-1**(详见下方"算法一览")。 --- ## 重要声明(先读这一段) **CGAE-1 是通过工程准入基线的自研构造,不是经过密码学分析的算法。** - 未做差分/线性密码分析量化,无第三方评审,无形式化安全证明; - 通过 `tools/gate.py` 的 11 项基线**只说明"不再有显而易见的工程性缺陷"**,不等价于密码学安全; - **生产环境请使用 AES-256-GCM 或 ChaCha20-Poly1305**。 第二条线 **MFAE-1** 补上了其中一部分:它有可执行的密码学分析(差分均匀度、Weil 界、 逐层双射、特征概率)与跨语言互证,还有 C 实现的侧信道加固。但**"自证"仍然不是 "第三方评审"**——[`docs/MFAE1_CRYPTANALYSIS.md`](docs/MFAE1_CRYPTANALYSIS.md) 里有两条 claim 明确标着 `open`(无 PRP 区分界、未做代数/相关密钥攻击),该文档也逐条列出了没做的事。 声明不变:**不要把它部署到安全关键场景**。 第三条线 **BGAE-1** 走的是另一条路:它先按 [`task_list3.md`](task_list3.md) 的九步原文 实现一版**保留全部缺陷**的 `b1-spec`,用可执行实验证明"照字面写出来不能用" (24:1 定爻导致碰撞、48 比特外部输入只有 2 比特有效、GF(2) 线性导致零雪崩), 再逐处补四个关节。它通过 17 项准入判据,但**同样没有经过第三方密码分析**。 本仓库的定位是**教学与方法学研究**:它示范了组合式自创密码如何被系统地拆解、度量与收敛,以及在这个过程中哪些指标可信、哪些会误导。详见 [`PAPER.md`](PAPER.md) 第 9 节与 [`LICENSE`](LICENSE) 的附加声明。 --- ## 快速开始 无第三方依赖(仅标准库),Python 3.10+。已建好的虚拟环境在 `.venv/`(已在 `.gitignore` 中)。 ### 方式一:使用已建好的 .venv ```bash source .venv/bin/activate # Windows: .venv\Scripts\activate python tools/demo_cgae1.py pip install -r requirements.txt # 空操作:本项目确实没有第三方依赖 deactivate ``` ### 方式二:从零重建(换机器 / 重建环境时) ```bash python3 -m venv .venv source .venv/bin/activate python -m pip install --upgrade pip pip install -r requirements.txt # 当前为空操作,保留作依赖入口 python -m unittest discover -s tests -t . # 278 项全通过即环境就绪 ``` > `requirements.txt` 里只有注释,这是刻意的:它让 `pip install -r` 成为一个 > **可执行且诚实**的空操作,而不是让人怀疑“是不是还有依赖没写”。 ### 代码用法 ```python from cubic_cipher.final import CGAE1 cipher = CGAE1("master-key-0123456789abcdef") blob = cipher.encrypt("待加密的文本") # -> "cgae1.xxxxx" blob = cipher.encrypt("待加密的文本", ad=b"tenant=acme") # 绑定关联数据 text = cipher.decrypt(blob, ad=b"tenant=acme") # 失败抛 ValueError # 原始字节接口 blob = cipher.seal(b"\x00\x01\x02", ad="msg-id=42") raw = cipher.open(blob, ad="msg-id=42") ``` 命令行体验: ```bash python3 tools/demo_cgae1.py # ★ CGAE-1 端到端演示:加解密 / 随机化 / 篡改检测 / AD 绑定 / KAT 自检 python3 tools/demo.py # 原始三步组合的逐步演示(2.a / 2.b / 2.c 每一步都打印中间值) python3 tools/gate.py # 6 个变体的 11 项企业准入检查 ``` --- ## 算法一览 演进链上的每一个变体都保留在仓库里,用于复现论文中的归因结论: | 变体 | ① 几何 | ② 数学 | ③ 扩散 | ④ 最后编码关节 | 准入不达标项 | | --- | --- | --- | --- | --- | --- | | `v1-spec` | 固定置换 | 2 比特高斯 | 无 | 哈夫曼 | 9 / 11 | | `v2-hard` | 固定置换 | 2 比特高斯 | 半字节混合 + 全局置换 | 哈夫曼 | 2 / 11 | | `v3-spn-huffman` | 每轮密钥化 | 256 元高斯 S 盒 | 行移位 + 列混合 | 哈夫曼(**受控对照点**) | 2 / 11 | | `v4-ctr` | 同上 | 同上 | 同上 | Base64url + CTR | 1 / 11 | | `v5-aead` | 同上 | 同上 | 同上 | + HMAC-SHA256 | 0 / 11 | | **`CGAE-1`** | 同上 | 同上 | 同上 | + 关联数据 / 域隔离 / 12 字节 nonce | **0 / 11** | `v3` 是刻意保留的受控对照点:它的密码核心与 v4/v5 完全一致,唯一区别是最后关节仍是哈夫曼,因此 `v3 → v4` 的差异可以**唯一归因**于"更换了最后的编码关节"。 CGAE-1 的协议参数:16 字节分组 / 12 轮 SPN / 12 字节 nonce / 4 字节计数器 / 128 位 HMAC 标签 / Base64url 定长(1.34 倍)膨胀。 完整规范见 [`ALGORITHM_SPEC.md`](ALGORITHM_SPEC.md)。 ### 第二条线:MFAE-1(矩阵–傅里叶) CGAE-1 用的是 GF(2⁸) 上的字节代数。随后用同一套"逐关节替换"的方法论,把核心换到 **素域 𝔽₆₅₅₃₇ + 二维数论变换**上,得到冻结版 MFAE-1: | 项 | MFAE-1 的参数 | | --- | --- | | 状态 | 16×16 阶矩阵(256 个 `u16`) | | 轮数 | 8 轮 SPN,每轮六步:S 盒 → 首尾剪切折叠 → 左右夹乘 → 加常量 → 二维 NTT → 密钥驱动置换 | | 分组 | 512 字节进 → 504 字节密钥流(`p⁴` 打包抽取,每 4 个元素出 63 比特) | | 模式 | CTR + 12 字节 nonce + 4 字节大端计数器 | | 认证 | encrypt-then-MAC,`tag = HMAC-SHA256(mac_key, "mfae1/tag/v1" ‖ be32(|ad|) ‖ ad ‖ nonce ‖ ct)[:16]` | | 信封 | `mfae1.` | 它比 CGAE-1 强的地方不是"更快"(每 504 字节要跑约 33000 次模乘,**比 AES-256-GCM 慢 2–3 个数量级**), 而是**每一条强度主张都能被执行验证**:见 [`docs/MFAE1_CRYPTANALYSIS.md`](docs/MFAE1_CRYPTANALYSIS.md) 的 12 条 claim 与 `tools/mfae1_analysis.py` 的 17 项自检。完整规范见 [`docs/MFAE1_SPEC.md`](docs/MFAE1_SPEC.md)。 除 Python 参考实现外,另有**独立的 C99 与 Java 17 实现**,与参考实现逐字节、逐阶段对齐, 由 `tools/mfae1_interop.py` 做 3×3 交叉互证(50 项)。见 [`crosslang/`](crosslang/README.md)。 ### 第三条线:BGAE-1(八卦爻) `task_list3.md` 给出的是一条完全不同的原理:**每 3 字节取出若干个 24 比特整数, 按"1 的个数是否过半"定阴爻或阳爻,再首尾交叉取爻、两两配成六十四卦象、查表输出**。 这一条线的做法与前两条一致:先按原文写出**不做任何修复**的 `b1-spec`,用可执行实验钉住 每一处断裂,再逐处补关节,最后冻结为 BGAE-1。 | 项 | BGAE-1 的参数 | | --- | --- | | 状态 | 144 字节 = 384 个 3 比特单位 = 384 爻 = 128 三爻 = 64 卦象 | | 轮数 | 8 轮,每轮八步:字节置换 → 三比特成爻 → 交叉取爻 → 三爻乱序 → 首尾配卦 → 相邻换爻 → 密钥化 64 元表 → 爻-残差混合 | | 分组 | 固定 144 字节(不足补零、超长分段) | | 模式 | CTR + 12 字节 nonce + 4 字节大端计数器 | | 认证 | encrypt-then-MAC,`tag = HMAC-SHA256(mac_key, "bgae1/tag/v1" ‖ be32(|ad|) ‖ ad ‖ nonce ‖ ct)[:16]` | | 信封 | `bgae1.` | **补上的四个关节**(每个只修一条断裂,原文语义不变): | 断裂(按字面实现) | 关节 | | --- | --- | | 第 2 步 24:1 定爻,`000000` 与 `000001` 密文相同 | 3 比特成爻改成 `(爻, 2 比特残差)` 双射:阴 {0,1,2,4} / 阳 {3,5,6,7} | | 第 3/4 步 48 比特外部输入只有 2 比特有效,爻位重叠且漏用 | 交叉取爻补成 384 爻位双射,派生 4 种变体(基型 / 输入反向 / 输出反向 / 双反) | | 第 6 步落单与余数未定义,输出长度随输入跳变 | 分组固定 144 字节,三爻池恒定 128 个,配卦 `H_j = (T_j << 3) \| T_{127-j}` | | 第 7/8 步只用异或与取反,GF(2) 线性、零雪崩 | 密钥化 64 元 S 盒(GF(2⁶) 逆元,DDT=4 / 线性度=16)+ 爻-残差双通道混合 | 准入判据 17 条全通过(`tools/bagua_gate.py`)。**其中第 10 条是反向守卫**: 它要求 `b1-spec` 仍然保留 24:1 碰撞与 2 比特有效密钥——如果有人"顺手优化"了原理版本, 这条会立刻失败,因为那意味着改了原理而不是修了实现。 完整推导见 [`docs/BGAE1_FEASIBILITY.md`](docs/BGAE1_FEASIBILITY.md),冻结规范见 [`docs/BGAE1_SPEC.md`](docs/BGAE1_SPEC.md),四代演进与踩坑见 [`docs/BGAE1_REPORT.md`](docs/BGAE1_REPORT.md)。 --- ## 仓库结构 ```text cubic_cipher/ ├── kdf.py HKDF-SHA256、HMAC-CTR DRBG、置换生成 ├── cube.py 任务 2.a:立方体顶点置换(对角线换位 + 面旋转 + 拉平) ├── gaussian.py 任务 2.b:高斯排名置换(可逆化改造)与 16 元 S 盒 ├── huffman.py 任务 2.c:规范哈夫曼编码 ├── codec.py 比特流 ↔ 文本符号 ├── cipher.py v1 / v2:原始三步组合(SPEC / HARDENED 两种模式) ├── iteration/ 迭代版:v3 ~ v5 演进链 │ ├── primitives.py GF(2^8) 乘法、行移位、列混合、256 元高斯 S 盒、立方体扭位 │ ├── engine.py 12 轮 SPN 引擎 + CTR / ECB 工作模式 │ ├── sealed.py CTR + HMAC + Base64url 封装 │ └── variants.py 统一接口与变体注册表 └── final.py ★ 冻结版 CGAE-1(唯一推荐入口) matrix_cipher/ ★ 第二条线:MFAE-1(素域 65537 + 二维 NTT) ├── field.py 域运算(含常数时间求逆) ├── matrix.py 矩阵乘、首尾剪切折叠、二维 NTT、密钥驱动置换 ├── engine.py 8 轮轮函数、CTR、p⁴ 打包抽取、逐阶段轨迹 ├── spec.py 协议常量(p、ω、det(DFT)、域前缀) ├── kdf.py HKDF / DRBG / 8 轮密钥派生 ├── codec.py Base64url 与信封 ├── variants.py m1 ~ m4 研究变体 └── final.py ★ 冻结版 MFAE-1(参考实现,规范的事实来源) bagua_cipher/ ★ 第三条线:BGAE-1(三字节定爻 + 交叉取爻 + 六十四卦) ├── primitives.py 3 比特成爻、交叉取爻、组卦换爻、64 元替换表 ├── kdf.py 主密钥 -> 轮参数(域前缀 bgae1) ├── engine.py 8 轮可逆置换 + CTR 密钥流 ├── spec.py 九步忠实参考实现(b1-spec,保留全部缺陷) ├── variants.py b1 / b2 / b3 / b4 演进链(每个变体只改一个关节) └── final.py ★ 冻结版 BGAE-1(唯一推荐入口) crosslang/ MFAE-1 的独立重写 + 交叉互证(见 crosslang/README.md) ├── build.py 构建入口(工具链探测 + C/Java 编译) ├── c/ 零依赖 C99:sha256 / 域运算 / 轮函数 / AEAD / CLI └── java/mfae1/ Java 17:同上,无第三方依赖 tests/ ├── test_cipher.py 28 项:原始构造的原语与往返 ├── test_iteration.py 45 项:线性层、引擎、CTR、认证封装、变体契约 ├── test_final.py 23 项:协议常量、已知答案向量、认证语义 ├── test_matrix_*.py MFAE-1:域、原语、引擎、编码、KAT、准入 ├── test_mfae1_crosslang.py 8 项:三方 KAT / 轨迹 / 信封 / 3×3 互解 / 拒绝 ├── test_mfae1_analysis.py 8 项:密码学分析报告的自检 ├── test_mfae1_sidechannel.py 4 项:侧信道测量 ├── test_bagua_*.py BGAE-1:原语双射 / 引擎可逆 / 断裂守卫 / KAT 与认证语义 ├── kat_cgae1.json CGAE-1 已知答案测试向量(由 tools/gen_kat.py 生成) ├── kat_mfae1.json MFAE-1 已知答案测试向量(由 tools/matrix_gen_kat.py 生成) └── kat_bgae1.json BGAE-1 已知答案测试向量(由 tools/bagua_gen_kat.py 生成) tools/ ├── demo_cgae1.py ★ CGAE-1 端到端演示(加解密 / 篡改 / AD / KAT 自检) ├── demo.py 原始三步组合的逐步演示 ├── analyze.py 统计特征、长度泄漏、选择明文分析 ├── benchmark.py 原语级算力开销 ├── gate.py 11 项企业准入检查 ├── gen_kat.py 生成 / 刷新已知答案向量 ├── matrix_*.py MFAE-1 的演示 / 分析 / 基准 / 准入 / KAT ├── mfae1_interop.py ★ 三方交叉互证驱动(Python / C99 / Java,50 项) ├── mfae1_analysis.py ★ 密码学分析的可执行版(17 项自检) ├── mfae1_sidechannel.py 侧信道测量(dudect 式交错采样 + Welch t 检验) ├── bagua_*.py BGAE-1 的度量 / 分析 / 基准 / 准入 / KAT ├── demo_bgae1.py ★ BGAE-1 端到端演示(加解密 / 篡改 / AD / KAT 自检) └── report/ 文档制品生成(Markdown 合册出 PDF、出分享图) ├── build_pdf.py 两条实现线各自合并成一册 PDF ├── make_poster.py 两张朋友圈说明图(1080×1440 @2x) ├── preview_pdf.py 指定页渲染成 PNG,用于校版 └── style.css 合册排版样式(页面、表格、代码块) dist/ ★ 已生成的对外制品(PDF / PNG,入库便于直接取用) build/ 中间产物(合册 HTML、校版截图、互证报告、编译产物、临时校验脚本) ``` --- ## 常用命令 ```bash source .venv/bin/activate # 先激活虚拟环境 python -m unittest discover -s tests -t . # 全部测试(CGAE-1 + MFAE-1 + BGAE-1 + 互证 + 分析 + 侧信道,278 项) python tools/demo_cgae1.py # CGAE-1 端到端演示 python tools/gate.py # 准入检查(论文表 6.2 的数据来源) python tools/gen_kat.py # 刷新 KAT;算法未改动时 git diff 应为空 python tools/analyze.py # 第一轮的统计与长度泄漏分析 python tools/benchmark.py # 原语级算力 python tools/matrix_demo_spec.py # MFAE-1 端到端演示 python tools/matrix_gate.py # MFAE-1 准入基线 python tools/matrix_gen_kat.py --check # 校验 MFAE-1 的 KAT 未漂移 python tools/mfae1_analysis.py # ★ 密码学分析:17 项自检全部通过 python tools/mfae1_interop.py # ★ 三方交叉互证:50 项(会顺带构建 C/Java) python tools/mfae1_sidechannel.py # 侧信道测量(阳性对照 + S 盒 + 整块 + 汇编) python tools/bagua_analyze.py # ★ BGAE-1:九步断裂实验 + 强度度量(A/B/C 三段) python tools/bagua_demo_spec.py # 九步逐步演示(打印每一步中间值) python tools/demo_bgae1.py # BGAE-1 端到端演示 python tools/bagua_gate.py --verbose # BGAE-1 准入基线(17 项,失败即非零退出) python tools/bagua_gen_kat.py --check # 校验 BGAE-1 的 KAT 未漂移 python tools/bagua_benchmark.py --quick # 原语 / 引擎 / 端到端三层性能 python3 crosslang/build.py # 只构建 C99 与 Java,各跑 selftest ``` --- ## 环境 | 项 | 值 | | --- | --- | | 解释器 | Python 3.10+(已验证 3.14.8) | | 虚拟环境 | `.venv/`(已加入 `.gitignore`,不入库) | | 第三方依赖 | **无**(仅标准库) | | 依赖声明 | `requirements.txt`(仅注释,安装为空操作) | --- ## 三个必须说清的度量口径 评估自研密码时,口径错误会直接导致归因错误。本仓库固定了三条规则: 1. **流模式的雪崩要在密钥流生成器上度量**。CTR 下密文与明文是异或关系,翻 1 比特明文必然只改 1 比特密文——这是正常性质,不是缺陷。真正需要满足雪崩要求的是分组变换本体,因此每个变体都暴露 `core_transform(block)`。 2. **熵要在核心输出上度量**。Base64url 的字母表只有 64 个符号,文本熵天然低于 6 bit/字符,拿它去比 7.90 的阈值是口径混淆。 3. **统计样本不能含整块重复**。ECB 的重复块问题会污染"原语强度"的度量,应交给独立的"重复明文块泄漏率"指标用专门探针度量。**每个指标只回答一个问题。** --- ## 文档索引 | 文档 | 内容 | | --- | --- | | [`PAPER.md`](PAPER.md) | 研究论文:问题、方法、构造、评估、负面结论、局限 | | [`ALGORITHM_SPEC.md`](ALGORITHM_SPEC.md) | CGAE-1 规范书(冻结):参数、轮函数、模式、封装、限制 | | [`ITERATION_REPORT.md`](ITERATION_REPORT.md) | 迭代报告:v1 → v5 的演进、归因与代价分析 | | [`SECURITY_ANALYSIS.md`](SECURITY_ANALYSIS.md) | 第一轮:可行性论证与原始构造的强度评估 | | [`docs/MFAE1_README.md`](docs/MFAE1_README.md) | MFAE-1 入口:它是什么、哪四条原理、怎么跑 | | [`docs/MFAE1_FEASIBILITY.md`](docs/MFAE1_FEASIBILITY.md) | 可行性分析:每一步的数学断裂点 | | [`docs/MFAE1_SPEC.md`](docs/MFAE1_SPEC.md) | MFAE-1 规范书(冻结):参数、六步轮函数、抽取、AEAD | | [`docs/MFAE1_REPORT.md`](docs/MFAE1_REPORT.md) | MFAE-1 迭代报告:m1 → m4 → 冻结版 | | [`docs/MFAE1_CRYPTANALYSIS.md`](docs/MFAE1_CRYPTANALYSIS.md) | **密码学分析报告**(12 条 claim,逐条标 proven / verified / sampled / open) | | [`docs/MFAE1_CROSSLANG.md`](docs/MFAE1_CROSSLANG.md) | **跨语言实现与互证**:C99 / Java、CLI 契约、六个 bug 复盘、`p⁴ > 2⁶⁴` 勘误 | | [`docs/MFAE1_SIDECHANNEL.md`](docs/MFAE1_SIDECHANNEL.md) | **侧信道加固与测量**:数据路径审计、掩码化抽取、Welch t 结果与消极对照 | | [`docs/BGAE1_README.md`](docs/BGAE1_README.md) | BGAE-1 入口:结论表、目录结构、命令、算法要点一屏 | | [`docs/BGAE1_FEASIBILITY.md`](docs/BGAE1_FEASIBILITY.md) | 可行性分析:九步逐条拆解断裂点、四个关节、与原文的显式偏离 | | [`docs/BGAE1_SPEC.md`](docs/BGAE1_SPEC.md) | BGAE-1 规范书(冻结):参数、八步轮函数、密钥调度、AEAD | | [`docs/BGAE1_REPORT.md`](docs/BGAE1_REPORT.md) | BGAE-1 迭代报告:b1 → b4 → 冻结版、归因、七个坑、性能分层 | | [`task_list.md`](task_list.md) | 最初的 5 项研究任务 | | [`task_list2.md`](task_list2.md) | 第二组任务(MFAE-1 的来源) | | [`task_list3.md`](task_list3.md) | 第三组任务:九步八卦加密原理(BGAE-1 的来源) | --- ## 文档制品 `dist/` 下是已经排版好的对外制品,可直接分享: | 文件 | 规格 | 内容 | | --- | --- | --- | | `CGAE-1_研究报告合集.pdf` | A4 / 44 页 | README + 研究论文 + 算法规格书 + 迭代报告 + 安全分析,5 章合册 | | `MFAE-1_研究报告合集.pdf` | A4 / 25 页 | 入口说明 + 可行性分析 + 冻结规范 + 迭代报告,4 章合册 | | `CGAE-1_朋友圈说明图.png` | 2160×2880 | 关键数字 + 演进链 + 核心结论的分享卡 | | `MFAE-1_朋友圈说明图.png` | 2160×2880 | 同上(紫色主题) | 两册 PDF 都有封面页、一页速览、带真实页码的两级目录,正文由原 Markdown 逐字转换, 文档间的相对链接已改写成册内跳转。 重新生成(需要 pandoc 与 Google Chrome;目录页码需要 `pypdfium2`,缺失时降级为不显示页码): ```bash python3 tools/report/build_pdf.py # -> dist/*.pdf python3 tools/report/make_poster.py # -> dist/*.png python3 tools/report/preview_pdf.py "dist/CGAE-1_研究报告合集.pdf" 1,3,17 -o build/preview ``` 中间文件(合册 HTML、浏览器日志、校版截图、互证报告 JSON、C/Java 编译产物、开发期临时校验脚本) 写在 `build/` 下,**同样随仓库入库**,便于复盘排版结果与互证过程;需要干净工作区时直接删掉即可重新生成。 --- ## 许可 [MIT](LICENSE) © 2026 彭友聪(Peng Youcong) [MIT](LICENSE) 只处理版权与责任。仓库另附**非使用授权声明**:本项目为研究与教学制品,未经第三方密码分析,不应部署于安全关键场景。