systemslibrarian/cipher-museum

GitHub: systemslibrarian/cipher-museum

一个涵盖2500年密码学历史的交互式教育网站,提供52种密码的实时加解密演示与密码分析工具。

Stars: 0 | Forks: 0

# 🏛️ 密码博物馆 探索密码学的历史与演变——从古典密码到现代安全系统。 这是一个开源的交互式教育网站,横跨 **10 个展厅** 中的 **52 种具有历史意义的密码** ——从公元前 500 年斯巴达的密码棒到后量子密码学。每个密码展品都配备了一个完全交互式的加密/解密演示。现代密码学使用的不仅仅是密码——安全系统结合了密钥交换、加密和哈希。 **[在线访问 →](https://ciphermuseum.com)** ## 📰 最新更新 - 在 [timeline.html](timeline.html) 中增加了一个高级的六阶段密码学演变条,位于历史事件时间线上方。 - 顺序明确且按序排列:古代 → 古典 → 机械 → 现代 → 对称 (AES) → 非对称 (公钥)。 - 实现了数学上均匀的水平间距、笔直的方向连接线和清晰的箭头。 - 强制执行严格的两行节点标签,包括以下确切措辞: - AES / 现代对称加密 - 公钥密码学 / 非对称加密 - 使用一致的内联 SVG 尺寸和描边粗细标准化了图标样式。 - 增加了微妙的展览式发光效果、响应式移动端行为以及减少动效支持。 ## ✨ 功能特性 ### 🗺️ 十个展厅 · 52 种密码 | 展厅 | 标题 | 密码 | |------|-------|---------| | I | 密码学的诞生 | Scytale, Caesar, Atbash, ROT13, Polybius | | II | 古典替换 | Monoalphabetic, Homophonic, Playfair, Four-Square, Two-Square, Hill, Straddling Checkerboard | | III | 多表替换革命 | Vigenère, Beaufort, Porta, Gronsfeld, Running Key, Chaocipher | | IV | 换位与分数化 | Rail Fence, Columnar, Double Transposition, Bifid, Trifid, Fractionated Morse | | V | 军事与间谍密码 | Nihilist, ADFGX, ADFGVX, Bazeries, Great Cipher, VIC | | ⚔ | 南北战争长廊 | Stager, Confederate Vigenère, Dictionary Code | | VI | 机械密码机 | Alberti Disk, Jefferson Disk, Chaocipher, Enigma, Lorenz, M-209, Purple, Vernam, Navajo Code Talkers | | VII | 谜题与趣味密码 | Pigpen, Bacon's Cipher, Tap Code, Babington, Copiale, Beale, Voynich, Kryptos, Zodiac | | ★ | 无法破解的密码 | One-Time Pad, Vernam, Solitaire, Shannon's Proof | | ⚜ | 密码破译者名人堂 | 15 个故事——从 Al-Kindi 到 Copiale 和 Chaocipher 的重构 | ### 🔐 每个展品遵循四部分结构 1. **历史背景** —— 时间、地点、使用者及原因 2. **工作原理** —— 加密步骤、图表、交互式演示 3. **破译过程** —— 具体的破译技术及其背景 4. **对现代密码学的启示** —— 从该密码到 AES/RSA 的直接演进 ### 🎯 52 个交互式演示 所有 52 个密码页面都配备了完全交互式的加密/解密演示,这些演示由原生 JavaScript 构建——无需框架,无需构建工具。输入一条信息,设置一个密钥,即可实时观看密码运作。演示由 [js/demo-loader.js](js/demo-loader.js) 从 [js/ciphers/all-engines.js](js/ciphers/all-engines.js) 中的密码引擎实现动态生成。 **完整的演示列表:** 每一行都给出了该密码首次为人所知/发表的时间以及被破译的时间(如果未被破译,则说明是如何未被破译的)。“—”表示任何时候都能通过简单的观察破译。 | 密码 | 创建时间 | 破译时间 | 演示功能 | |--------|---------|--------|--------------------| | [ADFGVX](ciphers/adfgvx.html) | 1918 年 6 月 (德国) | 1918 年 6 月 (Painvin,“胜利的电报”) | 增加了数字的 36 字符升级版——被 Painvin 在战时最后期限前破译。 | | [ADFGX](ciphers/adfgx.html) | 1918 年 3 月 (德国) | 1918 年 6 月 (Painvin) | 使用 A/D/F/G/X 字母的 Polybius 方阵,随后进行带密钥的列换位。 | | [Alberti Disk](ciphers/alberti-disk.html) | 1467 (Alberti) | 最终被破译 (对每个设置进行频率分析) | 旋转密码盘演示——在消息中途移动内圈以切换字母表。 | | [Atbash](ciphers/atbash.html) | 约公元前 600 年 | 极易破译 (单一密钥) | 颠倒字母表 (A↔Z, B↔Y...)。自反函数——相同的操作即可加密和解密。 | | [Babington](ciphers/babington.html) | 1586 | 1586 (Phelippes,同年) | 重现了 1586 年导致苏格兰女王玛丽被处死的 nomenclator;包含 Phelippes 的“双重字母”伪造陷阱。 | | [Bacon](ciphers/bacon.html) | 1605 (Francis Bacon) | 设计上即为隐写术 | Francis Bacon 的 5 位二进制代码 (a/b → 字母)——ASCII 的前身。 | | [Bazeries](ciphers/bazeries.html) | 1898 (Étienne Bazeries) | 统计分析 | 结合了 Polybius 替换和数字关键字换位。 | | [Beale](ciphers/beale.html) | 约 1820 | 仅 #2:1885 (Ward);#1 和 #3 未解 | 以《独立宣言》为密钥的书籍密码——复制了 1885 年 Beale #2 的机制。 | | [Beaufort](ciphers/beaufort.html) | 1857 | 1863 年 Kasiski 应用 | 互逆的 Vigenère 变体,加密和解密是相同的操作。 | | [Bifid](ciphers/bifid.html) | 1901 (Delastelle) | 统计分析 (周期相关) | Polybius 坐标分裂,跨越一个周期进行换位,然后重新组合。 | | [Caesar](ciphers/caesar.html) | 约公元前 58 年 | 约公元 850 年 (Al-Kindi,频率分析) | 将每个字母移动选定的数量 (1–25)。包含一个暴力破解面板,可同时显示所有 25 种位移。 | | [Chaocipher](ciphers/chaocipher.html) | 1918 (J.F. Byrne) | 2010 (Rubin 在资料公开后的重建) | 两个 26 字母的字母表在每次输入字符后自行排列组合——动态状态密码。 | | [Columnar](ciphers/columnar.html) | 古代 | 频率分析 / 统计分析 | 将明文按行写入关键字下,然后按关键字顺序按列读出。 | | [Confederate Vigenère](ciphers/confederate-vigenere.html) | 1861 | 1863 (Tribune 密码分析师) | 使用三个南方邦联关键词 ("Manchester Bluff"、"Complete Victory"、"Come Retribution") 的标准 Vigenère。 | | [Copiale](ciphers/copiale.html) | 约 1730 | 2011 (Knight, Megyesi, Schaefer) | 带有空字符的同音替换,源自 2011 年被破译的 18 世纪眼科公会手稿。 | | [Dictionary Code](ciphers/dictionary-code.html) | 18–19 世纪 | 取决于码本 | 通过页码/行号/单词的三元组在共享书籍中查找单词——南北战争时期的书籍密码。 | | [Double Transposition](ciphers/double-transposition.html) | 一战 | 2013 (Lasry 等人,计算机爬山算法) | 使用两个不同的密钥应用两次列换位——二战中的主力密码。 | | [Enigma](ciphers/enigma.html) | 1923 (Scherbius) | 1932 (Rejewski) → 1939+ (Bletchley) | 带有插线板、反射器和步进机制的三转子德国国防军 Enigma;实时渲染转子接线。 | | [Four-Square](ciphers/four-square.html) | 1902 (Delastelle) | 双字母组合分析 | 两个带密钥的方阵加上两个标准方阵——打乱双字母组合的频率。 | | [Fractionated Morse](ciphers/fractionated-morse.html) | 20 世纪初 | 统计分析 | 将文本转换为摩斯密码,将点/划/分隔符重新组合为三字母组合,然后通过带密钥的字母表进行替换。 | | [Great Cipher](ciphers/great-cipher.html) | 1626 (Rossignol) | 1893 (Bazeries) | Rossignol 的 nomenclator 将数字映射到音节和陷阱;演示展示了码本的实际运作。 | | [Gronsfeld](ciphers/gronsfeld.html) | 1655 | 1863 年 Kasiski (更快,密钥空间更小) | 仅限数字密钥 (0–9) 的 Vigenère,使其更弱但便于在野外携带使用。 | | [Hill](ciphers/hill.html) | 1929 (Lester Hill) | 已知明文攻击 (线性代数) | 将明文块乘以一个模 26 的可逆 2×2 矩阵。 | | [Homophonic](ciphers/homophonic.html) | 15 世纪 (意大利宫廷) | 17–19 世纪统计分析攻击 | 将每个字母替换为几个数字代码中的一个,从而拉平频率特征。 | | [Jefferson Disk](ciphers/jefferson-disk.html) | 1795 (Jefferson) | 被重用为 M-94 (1922);20 世纪末被破译 | 26 盘轮式密码:在一行上对齐明文,从另一行读取密文。 | | [Kryptos](ciphers/kryptos.html) | 1990 (Sanborn,CIA 总部) | K1–K3 已解 (1999);K4 未解 | 解开 K1/K2 (带 PALIMPSEST/ABSCISSA 密钥的 Vigenère) 和 K3 (换位);展示 Sanborn 的 K4 线索。 | | [Lorenz](ciphers/lorenz.html) | 1940 (德国) | 1942 (Tutte) / 1944 (Colossus) | SZ40 风格的 XOR 流密码,带有两组针轮——Colossus 计算机专为破译此密码而建。 | | [M-209](ciphers/m209.html) | 1940 (Hagelin C-38) | 二战 (德国人破译) | Hagelin C-38 模拟器:六个互质针轮和一个 27 杆制动笼,产生每个字符的 Beaufort 位移。 | | [Monoalphabetic](ciphers/monoalphabetic.html) | 古代 | 约公元 850 年 (Al-Kindi) | 从关键字构建带密钥的替换字母表并将其应用于文本。 | | [Navajo Code Talkers](ciphers/navajo-code-talkers.html) | 1942 | 从未被破译 | 在二战纳瓦霍密码词典中查找军事词汇(例如,“iron fish” = 潜艇)。 | | [Nihilist](ciphers/nihilist.html) | 19 世纪 80 年代 (俄罗斯) | 20 世纪初 | 将 Polybius 数字与循环关键字的 Polybius 数字相加 (mod 100)——俄罗斯革命时期的经典密码。 | | [One-Time Pad](ciphers/one-time-pad.html) | 1882 (Miller) / 1917 (Mauborgne) | 如果正确使用则无法破译 (Shannon 1949 年证明) | 生成并应用与消息长度相同的真正随机密钥——经证明无法破译。 | | [Pigpen](ciphers/pigpen.html) | 约 1700 (共济会) | 极易破译 | 几何替换:每个字母变成其网格单元的线条/点。 | | [Playfair](ciphers/playfair.html) | 1854 (Wheatstone) | 一战 (Friedman 及其他人) | 使用带密钥的 5×5 方阵加密字母对 (双字母组合);实时密钥方阵预览。 | | [Polybius](ciphers/polybius.html) | 约公元前 150 年 | 极易破译 (频率分析) | 将每个字母映射到 5×5 网格上的行/列数字对。 | | [Porta](ciphers/porta.html) | 1563 (Dellaa) | 1863 年 Kasiski 应用 | 13 行互易表——每个密钥字母交换字母表的两半。 | | [Purple](ciphers/purple.html) | 1939 (日本,97 式) | 1940 年 9 月 20 日 (Rowlett, Grotjan, SIS) | 日本 97 式步进开关密码的教学复现:元音和辅音通过单独的组件加密,然后再重新组合。 | | [Rail Fence](ciphers/rail-fence.html) | 古代 | 极易破译 | 在 N 条轨道上进行 Z 字形换位;栅栏的实时图表。 | | [ROT13](ciphers/rot13.html) | 约 1980 (Usenet) | 设计上即为极易破译 | 自反的 Caesar (偏移 13)。一个按钮即可在原位切换文本。 | | [Running Key](ciphers/running-key.html) | 19 世纪 | 20 世纪统计分析攻击 | 使用一段长自然语言文本而不是一个短单词作为密钥的 Vigenère。 | | [Scytale](ciphers/scytale.html) | 约公元前 700 年 (斯巴达) | 极易破译 (尝试所有杆宽度) | 将消息缠绕在具有 N 行的虚拟杆上;向下读取列会打乱顺序而不改变字母。 | | [Solitaire / Pontifex](ciphers/solitaire.html) | 1999 (Schneier,*Cryptonomicon*) | 注意到理论偏差 | Schneier 的由 54 张扑克牌驱动的手工操作流密码;牌组状态在每一步后都会动画显示。 | | [Stager](ciphers/stager.html) | 1861 (Anson Stager) | 战争期间安全 | Anson Stager 的联邦路线密码——对整个单词进行换位并用代号混淆它们。 | | [Straddling Checkerboard](ciphers/straddling-checkerboard.html) | 20 世纪 30 年代 (苏联) | 统计分析 (各异) | 常用字母获得一个数字,罕见字母获得两个——来自固定字母表的可变长度代码。 | | [Tap Code](ciphers/tap-code.html) | 1965 (河内希尔顿战俘) | 仅限战俘使用 | 5×5 Polybius 方阵敲击出先行后列的敲击声——被越南的战俘使用。 | | [Trifid](ciphers/trifid.html) | 1902 (Delastelle) | 统计分析 | 3D Polybius (3×3×3 立方体)——分数化为三进制数 (trits) 并在一个周期内将它们打乱。 | | [Two-Square](ciphers/two-square.html) | 19 世纪末 | 双字母组合分析 | 更轻量级的 Delastelle 变体,只有两个方阵(水平或垂直方向)。 | | [Vernam](ciphers/vernam.html) | 1917 (Gilbert Vernam, AT&T) | 如果纸带是一次性的则无法破译 | 明文与密钥带的 XOR 运算——最初的电传打字机流密码。 | | [VIC](ciphers/vic.html) | 1953 (KGB) | 1957 (Häyhänen 叛逃) | Reino Häyhänen 的 KGB 手工密码:跨步棋盘 + 双重换位 + 日期驱动的密钥流。 | | [Vigenère](ciphers/vigenere.html) | 1553 (Bellaso/Vigenère) | 1854 Babbage (私下) · 1863 Kasiski | 由循环关键字驱动的多表位移;实时 tabula-recta 查找和 Kasiski 提示面板。 | | [Voynich](ciphers/voynich.html) | 约 15 世纪 | 未解 | 用于未解手稿的可逆 EVA 字符往返转换器;强调目前未知任何明文映射。 | | [Zodiac](ciphers/zodiac.html) | 1969 | Z408:1969 (Hardens) · Z340:2020 (Oranchak/Eaker/Blankenship) | Z-408 和 Z-340 中使用的同音替换;演示了 2020 年的对角线换位揭示过程。 | ### 📊 附加工具 - **[站内搜索](search.html)** —— 搜索所有 52 种密码、10 个展厅、密码破译者传记、密码分析技术和时间线。由索引驱动,无后端,通过 `?q=` 深度链接。 - **密码分析技术** —— 10 种交互式技术:频率分析、Kasiski 测试、重合指数、Crib 拖拽、已知明文攻击、爬山算法、模拟退火、步进开关密码分析、HMM/SMT 解码 以及 Chaocipher 重建 - **密码挑战** —— 从 Caesar 到 Enigma 的 10 个渐进式谜题,附带提示和解决方案 - **时间线** —— 具有 2400 年历史的交互式时间轴,支持时代过滤、滚动监视和 23 个可点击事件 - **对比表** —— 可排序、可过滤的表格,按类型、时代、安全级别和密钥方法比较所有 52 种密码 - **密码流浏览器** —— 密码家族之间的可视化关系图 - **博物馆地图** —— 包含所有展厅和密码展品的建筑平面图 - **导览** —— 贯穿整个收藏的结构化学习路径 - **词汇表** —— 全面的密码学术语参考 - **社区** —— 密码爱好者的讨论空间 ## 🚀 本地运行 ``` git clone https://github.com/systemslibrarian/cipher-museum cd cipher-museum python3 -m http.server 8000 # or just open index.html ``` 无需构建工具。无需框架。除了 Google Fonts 之外没有其他依赖。 纯 HTML + CSS + 原生 JavaScript。已为 GitHub Pages 做好准备。 ## 📁 项目结构 ``` cipher-museum/ ├── index.html ← Entrance Hall (hero + 10 hall cards) ├── museum-map.html ← Interactive floor plan with all exhibits ├── timeline.html ← 2,400-year timeline with era filtering & scroll-spy ├── comparison.html ← Sortable 52-cipher comparison table ├── challenges.html ← 10 progressive cipher challenges ├── glossary.html ← Cryptography glossary ├── cryptanalysis.html ← Cryptanalysis Techniques (7 interactive techniques) ├── cipher-flow.html ← Visual cipher family relationships ├── modern.html ← Modern Cryptography overview ├── favicon.svg ← Gold cipher wheel icon ├── css/ │ └── museum.css ← Complete design system (~400 rules) ├── js/ │ ├── nav.js ← Navigation system (sticky nav, hamburger, ARIA) │ ├── demo-loader.js ← Dynamic demo UI generator for all cipher pages │ └── ciphers/ │ └── all-engines.js ← 52 cipher engine implementations ├── halls/ ← 10 exhibit halls │ ├── ancient.html ← Hall I: Birth of Cryptography │ ├── substitution.html ← Hall II: Classical Substitution │ ├── polyalphabetic.html ← Hall III: Polyalphabetic Revolution │ ├── transposition.html ← Hall IV: Transposition & Fractionation │ ├── military.html ← Hall V: Military & Spy Ciphers │ ├── civil-war.html ← Special Exhibition: Civil War │ ├── machines.html ← Hall VI: Mechanical Machines │ ├── puzzle.html ← Hall VII: Puzzle & Novelty │ ├── unbreakable.html ← Final Hall: The Unbreakable │ └── codebreakers.html ← Special Exhibition: Hall of Codebreakers ├── ciphers/ ← 52 cipher exhibit pages (all with interactive demos) │ ├── caesar.html ← with interactive demo + SVG wheel diagram │ ├── enigma.html ← with rotor wiring SVG diagram │ ├── vigenere.html ← with tabula recta SVG + Kasiski analysis │ ├── playfair.html ← with key square builder SVG │ └── [48 more exhibits] ├── tours/ ← Guided learning paths ├── community/ ← Community discussion pages └── tests/ ├── test-all-engines.js ← Engine roundtrip & known-answer tests └── test-deep-ciphers.js ← Edge cases & stress tests ``` ## 🎨 设计系统 | 元素 | 值 | |---------|-------| | **美学风格** | 史密森尼黑 / 学术金 | | **展示字体** | Cinzel (serif) | | **正文字体** | Cormorant Garamond (serif) | | **代码字体** | JetBrains Mono (monospace) | | **背景** | `#060608` 搭配微妙的径向金色渐变 | | **强调色** | `#C9A84C` (金色) 包含 6 种色调变体 | | **文本** | `#EDE5D4` (标题), `#C8C0B0` (正文), `#ACA4B4` (标签) | ### 无障碍性 - 所有文本均符合 WCAG AA 对比度标准 - 每个页面都有跳过链接 - 导航、演示和交互元素上均有 ARIA 标签 - 所有交互元素的最小触控目标为 44px - 支持 `prefers-reduced-motion` - 全面的键盘导航 - 装饰性 SVG 上的 `aria-hidden` 属性 ### 搜索引擎优化 (SEO) - 每个页面都有独特的 meta 描述 - Open Graph + Twitter Cards - 规范的 URL (Canonical URLs) - XML 站点地图 (54+ 个页面) - 结构化数据 (JSON-LD) - 自定义 404 页面 ## 🧪 测试 本博物馆附带**六个测试工具——2,298 个断言,全部通过。** 它们涵盖了从密码引擎本身到访问者实际点击的渲染 DOM 的所有内容。 ``` # 一次性设置(仅 demo-page simulator 需要) npm install # 单独运行任何 suite … node tests/test-all-engines.js # 309 — engine roundtrip & known-answer tests node tests/test-deep-ciphers.js # 238 — edge cases & stress tests node tests/test-comprehensive.js # 417 — cross-cipher invariants node tests/test-accessibility.js # 790 — ADA / WCAG audit across 79 pages node tests/test-mobile.js # 240 — responsive / mobile audit across 79 pages node tests/test-demo-pages.js # 304 — end-to-end JSDOM simulation of every interactive demo # … 或通过 npm scripts npm run test:engines npm run test:deep npm run test:comprehensive npm run test:a11y npm run test:mobile npm run test:demos npm test # runs the engine + deep + comprehensive trio ``` `test-demo-pages.js` 是最强有力的正确性证明:它在 JSDOM 中加载每个 `ciphers/*.html` 页面并内联真实脚本,让 `js/demo-loader.js` 构建演示 UI,然后**点击页面上实际的加密和解密按钮**,并验证密文通过渲染的 DOM 往返转换回原始明文——这正是访问者所看到的。手工构建的页面 (Caesar, Playfair, Vigenère, Zodiac) 获得了针对标准已知答案测试 (KAT) 的专用断言 (Caesar 位移 3 → `WKHTXLFNEURZQIRA`,Vigenère `LEMON` → `LXFOPVEFRNHR`,Playfair `MONARCHY` 解码,Zodiac Z408 揭示)。 ## 📜 许可证 MIT 许可证——可免费使用、分支和在此基础上进行构建。 *为纪念人类保密历史上那些辉煌、充满缺陷甚至往往致命的过往而建。*
标签:AES, CMS安全, DNS 反向解析, DNS解析, HTML/CSS, JavaScript, RSA, 互动教育, 代码示例, 信息加密解密, 凯撒密码, 加密算法, 古典密码, 后端开发, 后量子密码学, 多模态安全, 密码分析, 密码学, 开源项目, 手动系统调用, 技术历史, 教育工具, 数据分析, 数据可视化, 现代密码学, 网络安全, 网络应用, 虚拟博物馆, 隐私保护