IchiTaku326/Diagapeyev-Cipher-Solver

GitHub: IchiTaku326/Diagapeyev-Cipher-Solver

面向 1939 年未解 Diagapeyev 置换密码的启发式优化求解框架,通过统计驱动的棋盘矩阵重构提取候选语言结构。

Stars: 0 | Forks: 0

# Diagapeyev 密码求解器 [![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.21484792.svg)](https://doi.org/10.5281/zenodo.21484792) ## 📝 解读文章 有关高级概念概述、方法的详细说明以及启发式搜索过程的可视化,请参阅随附的 Medium 文章: 👉 **[解密 Diagapeyev 密码:一种针对欠规范置换密码的启发式方法](https://medium.com/@takumiichikawa3126/the-diagapeyev-cipher-has-remained-an-unresolved-cryptographic-puzzle-for-over-eight-decades-7dd805764b8e)** ## 论文信息 **标题** *关于欠规范置换密码中的启发式结构提取:以 Diagapeyev 密码为例* **作者** Takumi Ichikawa **版本** v3 (2026年7月) **DOI(当前版本)** https://doi.org/10.5281/zenodo.21484792 **DOI(概念 DOI / 始终解析至最新版本)** https://doi.org/10.5281/zenodo.21022128 # 项目概述 **Diagapeyev 密码**是最初发表于 **1939** 年的一种未解的置换密码。八十多年过去了,目前尚未确立任何公开验证的密钥、加密过程或权威明文。 本项目使用可复现的启发式优化框架来研究该密码的结构特性。 我们的目标并非宣布完成了一次确切的历史性解密,而是要证明通过对欠规范的置换参数进行优化,可以涌现出具有统计意义的语言结构。 本代码库包含了复现随附论文中展示的计算实验所需的所有内容,包括: - Python 源代码 - 实验数据集 - 优化日志 - 候选棋盘矩阵 - 文档 论文中报告的每一个实验都可以通过本代码库独立复现。 # 原始密文 原始的 Diagapeyev 密码仅包含以下数字密文。 这段密文是本代码库中所有实验中使用的唯一输入。 ``` 75628 28591 62916 48164 91748 58464 74748 28483 81638 18174 74826 26475 83828 49175 74658 37575 75936 36565 81638 17585 75756 46282 92857 46382 75748 38165 81848 56485 64858 56382 72628 36281 81728 16463 75828 16483 63828 58163 63630 47481 91918 46385 84656 48565 62946 26285 91859 17491 72756 46575 71658 36264 74818 28462 82649 18193 65626 48484 91838 57491 81657 27483 83858 28364 62726 26562 83759 27263 82827 27283 82858 47582 81837 28462 82837 58164 75748 58162 92000 ``` # 🔍 解密机制 提出的计算框架通过一个四阶段的启发式 pipeline 来逆转密码的混淆。 ## 1. 揭掩(5位数到2位数解析) 原始的五位数字组被解释为无线电传输格式,而不是密码符号。 首先移除所有空格,随后将数字流重新解析为连续的两位数字单元。 这些两位数的数值构成了由 pipeline 的后续阶段处理的原始符号。 ## 2. 交替密钥减法(坐标恢复) 通过减去交替的密钥偏移量,对每一对数字进行转换。 | 位置 | 偏移量 | |----------|--------| | 奇数 | −30 | | 偶数 | −40 | 得出的数值将被解释为未知棋盘矩阵内的行列坐标。 ## 3. 棋盘优化 由于原始棋盘未知,该框架使用启发式优化来重构候选矩阵。 搜索过程受到俄语的几个统计特性的指导,包括: - 字母频率分布 - 双字母频率 - 三字母频率 - 高频元音锚定(例如 **О**, **Е**, **А**) 为了最大化整体语言模型得分,候选矩阵会被迭代优化。 ## 4. 语言收敛 随着优化的进行,越来越连贯的俄语语言结构开始浮现。 在得分最高的重构结果中,反复出现了一些军事风格的表达,包括以下短语: 这些输出是作为**启发式生成的候选明文**呈现的,而非已确认的历史解密。 # 逐步映射示例 下表展示了前十对数字的解码过程。 | 位置 | 原始对 | 密钥偏移量 | 目标坐标 | 映射字符 | 部分短语 | |:--------:|:--------:|:----------:|:-----------------:|:----------------:|----------------| | 1 | **75** | −30 | **45** | **В** | В | | 2 | **62** | −40 | **22** | **О** | ВО | | 3 | **82** | −30 | **52** | **В** | ВОВ | | 4 | **85** | −40 | **45** | **Б** | ВОВ Б | | 5 | **91** | −30 | **61** | **О** | ВОВ БО | | 6 | **64** | −40 | **24** | **Е** | ВОВ БОЕ | | 7 | **74** | −30 | **44** | **В** | ВОВ БОЕВ | | 8 | **74** | −40 | **34** | **А** | ВОВ БОЕВА | | 9 | **82** | −30 | **52** | **Я** | ВОВ БОЕВАЯ | | 10 | **84** | −40 | **44** | **З** | ВОВ БОЕВАЯ З | 重构出的第一个短语自然而然地展开为: 这一过程说明了连贯的语言结构是如何通过启发式优化逐渐涌现的。 # 代码库结构 代码库的组织结构如下: ``` . ├── data/ │ ├── ciphertext.txt │ ├── russian_frequencies.json │ └── auxiliary datasets │ ├── logs/ │ ├── optimization_logs/ │ ├── best_candidate_matrices/ │ ├── score_history/ │ └── full_decryption_mapping.md │ ├── src/ │ ├── solver.py │ ├── optimizer.py │ ├── checkerboard.py │ ├── scoring.py │ └── utilities/ │ ├── paper/ │ └── research_paper.pdf │ └── README.md ``` 每个目录包含了复现随附论文中所述实验所需的资源。 # 用法 ## 1. 基础重构 运行主要重构程序: ``` python src/solver.py ``` 求解器使用以下步骤执行完整的重构 pipeline: - 移除 5 位数无线电格式 - 2 位数解析 - 交替密钥减法(30 / 40) - 棋盘坐标映射 - 俄语评分 生成的输出是在所选棋盘配置下生成的候选明文。 ## 2. 启发式优化 要搜索更好的棋盘配置,请执行: ``` python src/optimizer.py ``` 优化器对候选棋盘布局执行迭代搜索。 其目标是在保持从密文导出的坐标结构的同时,最大化俄语三字母语言模型的得分。 优化包含: - 俄语单字母频率 - 双字母统计 - 三字母统计 - 高频字母锚定 - 迭代得分最大化 # 实验结果 优化过程评估了大量候选棋盘配置。 在测试的矩阵中,以下配置取得了随附论文中报告的最高语言模型得分。 ## 最高对数得分 ``` 15.84 ``` # 得分最高的棋盘 | 行 | 1 | 2 | 3 | 4 | 5 | 6 | |:---:|:---:|:---:|:---:|:---:|:---:|:---:| | **1** | Г | Я | Ж | Ю | Ц | — | | **2** | Э | С | Ч | К | З | — | | **3** | Ф | Н | П | Ы | Л | — | | **4** | Ш | Е | И | В | Б | — | | **5** | А | О | М | Р | Т | — | | **6** | Д | У | Щ | — | Х | — | 在本代码库报告的启发式搜索中,该棋盘产生了最高的整体统计得分。 # 生成的候选明文 将得分最高的棋盘应用于原始密文后,产生了以下重构结果。 ``` ВОВ: БОЕВАЯ ЗАДАЧА УСТАНОВЛЕНА, ПОДРАЗДЕЛЕНИЯМ НАЧАТЬ ДВИЖЕНИЕ В СЕКТОР А. ``` 这代表了优化过程中确定的最强候选明文。 它作为**启发式生成的候选重构**呈现,**不应被解释为已确认的历史解密**。 # 观察到的语言片段 在得分最高的候选重构中,一致地出现了一些在统计上连贯的俄语表达。 示例包括: 这些片段与俄语三字母统计表现出高度的一致性,对整体语言模型得分的贡献十分显著。 尽管这**不**构成历史明文的证明,但它证明了有意义的语言结构可以通过对欠规范置换系统进行启发式优化而涌现。 # 讨论 与传统的密码分析不同,本项目不假设事先具备以下知识: - 原始棋盘, - 加密密钥, - 或原始明文。 相反,重构完全由受俄语模型指导的统计优化驱动。 该框架证明了对大型搜索空间的优化能够从原本欠规范的密码中恢复出高度结构化的候选语言。 因此,本项目主要应被视为对启发式结构提取的一项计算调查,而不是对确切历史解密的声明。 # 可复现性 本项目的主要目标是**完全的计算可复现性**。 使用本代码库中包含的材料,可以独立复现随附论文中报告的所有实验。 代码库包括: - 源代码 - 实验数据集 - 优化日志 - 候选棋盘矩阵 - 配置文件 - 文档 研究人员可以通过执行以下命令来复现报告的候选明文: ``` python src/solver.py python src/optimizer.py ``` `logs/` 目录中包含的优化日志对应于随附论文中讨论的实验,并且能够对报告的结果进行独立验证。 # 研究范围 本代码库**并未声称已彻底破解** Diagapeyev 密码。 相反,它提出了一个可复现的启发式框架,证明了通过对欠规范的置换密码进行优化,可以涌现出在统计上有意义的语言结构。 因此,生成的明文应被解释为**启发式生成的候选重构**,而**不是**经过历史验证的解密。 未来的工作可能包括: - 替代的语言模型 - 模拟退火 - 进化算法 - 贝叶斯优化 - 替代的棋盘结构 - 额外的优化策略 - 其他研究人员的独立验证 # 引用 如果您在研究中使用本代码库、软件、数据集或随附论文,请引用以下作品。 ## APA ``` Ichikawa, T. (2026). On Heuristic Structure Extraction in Under-Specified Transposition Ciphers: A Case Study on the Diagapeyev Cipher (Version 3). Zenodo. https://doi.org/10.5281/zenodo.21484792 ``` ## BibTeX ``` @misc{ichikawa2026diagapeyev, author = {Takumi Ichikawa}, title = {On Heuristic Structure Extraction in Under-Specified Transposition Ciphers: A Case Study on the Diagapeyev Cipher}, year = {2026}, month = jul, version = {v3}, publisher = {Zenodo}, doi = {10.5281/zenodo.21484792}, url = {https://doi.org/10.5281/zenodo.21484792} } ``` # 许可证 本项目基于 **MIT 许可证**发布。 在 MIT 许可证的条款下,您可以自由地: - 使用 - 修改 - 分发 - 复制 这些源代码和随附材料。 有关完整的许可信息,请参阅 `LICENSE` 文件。 # 致谢 Diagapeyev 密码仍然是经典密码分析中长期未解决的问题之一。 本代码库旨在作为一个**开放**、**透明**且**完全可复现**的研究项目。 欢迎各种贡献,包括: - 独立验证 - 替代优化方法 - 改进的语言模型 - 性能改进 - Bug 报告 - 文档改进 非常感谢建设性的讨论和合作。 # 联系方式 如有任何问题、建议、Bug 报告或合作提案,欢迎通过 **GitHub Issues** 或 **Pull Requests** 提出。 # 代码库目标 本项目旨在提供: - 一个可复现的计算框架 - 所提方法的开源实现 - 透明的实验流程 - 公开可访问的数据集 - 完整的优化日志 - 对每个报告实验的独立验证 通过公开工作流程的每一个组件,本代码库鼓励对 Diagapeyev 密码以及经典密码分析的启发式方法进行进一步的研究。
标签:逆向工具