{"id":51578782,"url":"https://github.com/systemslibrarian/crypto-lab-enigma-forge","last_synced_at":"2026-07-11T03:32:26.385Z","repository":{"id":367818472,"uuid":"1282191054","full_name":"systemslibrarian/crypto-lab-enigma-forge","owner":"systemslibrarian","description":"Browser-based Enigma machine demo — full mechanical simulation of rotors, stepping with double-step, plugboard, and reflector, plus the crib-based Bombe break exploiting the no-letter-maps-to-itself flaw. Real wiring tables. No backends. No simulated math.","archived":false,"fork":false,"pushed_at":"2026-06-27T19:22:44.000Z","size":136,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-27T21:08:53.911Z","etag":null,"topics":["bombe","cipher","classical-cipher","codebreaking","cryptanalysis","crypto-lab","cryptography","enigma","enigma-machine","historical-cryptography","rotor-machine","turing","wwii"],"latest_commit_sha":null,"homepage":"https://systemslibrarian.github.io/crypto-lab-enigma-forge/","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/systemslibrarian.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-27T12:49:23.000Z","updated_at":"2026-06-27T19:37:16.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/systemslibrarian/crypto-lab-enigma-forge","commit_stats":null,"previous_names":["systemslibrarian/crypto-lab-enigma-forge"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/systemslibrarian/crypto-lab-enigma-forge","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/systemslibrarian%2Fcrypto-lab-enigma-forge","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/systemslibrarian%2Fcrypto-lab-enigma-forge/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/systemslibrarian%2Fcrypto-lab-enigma-forge/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/systemslibrarian%2Fcrypto-lab-enigma-forge/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/systemslibrarian","download_url":"https://codeload.github.com/systemslibrarian/crypto-lab-enigma-forge/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/systemslibrarian%2Fcrypto-lab-enigma-forge/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35350133,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-11T02:00:05.354Z","response_time":104,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bombe","cipher","classical-cipher","codebreaking","cryptanalysis","crypto-lab","cryptography","enigma","enigma-machine","historical-cryptography","rotor-machine","turing","wwii"],"created_at":"2026-07-11T03:32:25.573Z","updated_at":"2026-07-11T03:32:26.377Z","avatar_url":"https://github.com/systemslibrarian.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# crypto-lab-enigma-forge\n\n## What It Is\n\nEnigma Forge is a faithful, in-browser simulation of the **Wehrmacht Enigma I**\n(3-rotor) cipher machine, paired with the **crib + simulated-Bombe** attack that\nbroke it. The cipher is a symmetric, electromechanical polyalphabetic\nsubstitution: a signal passes through the plugboard (Steckerbrett), three rotors\n(chosen from I–V, with ring settings and start positions), a reflector (UKW-B or\nUKW-C), back through the rotors, and out the plugboard — stepping the rotors\nevery keystroke. It solves the problem of a constantly-changing substitution\nalphabet, and it is its own inverse (the same settings decrypt). It is **not**\nsecure by any modern standard: a structural flaw (no letter ever encrypts to\nitself) plus predictable cribs let the demo recover settings by elimination.\n\n## When to Use It\n\n- **Teaching how rotor machines actually work** — the path visualizer traces a\n  keystroke contact-by-contact, because the mechanism, not a formula, is the point.\n- **Demonstrating the no-self-encryption flaw** — the empty diagonal is shown\n  interactively and then exploited, making an abstract weakness concrete.\n- **Explaining real cryptanalysis** — crib placement, menu construction, and the\n  Bombe's deduction-by-contradiction mirror the historical break, not a hand-wave.\n- **Showing that keyspace size isn't security** — Enigma's ~10²³ keys still fell\n  because exploitable structure leaked; a vivid lesson for modern designers.\n- **Do NOT use Enigma for real security.** It is broken: it has no forward\n  secrecy, no authentication, a fixed-point-free reflector that leaks structure,\n  and is trivially recoverable from cribbed ciphertext. This is a teaching tool only.\n\n## Live Demo\n\n**[systemslibrarian.github.io/crypto-lab-enigma-forge](https://systemslibrarian.github.io/crypto-lab-enigma-forge/)**\n\nType a message to encrypt it live (and, with identical settings, decrypt it — the\nmachine is its own inverse) while the lampboard, rotor windows, and signal-path\ndiagram update per keystroke. Controls include rotor selection and order (I–V),\nring settings (Ringstellung), initial positions (Grundstellung), reflector (B/C),\nand plugboard pairs (Steckerbrett). The break workflow then takes a crib and\nciphertext through placement (self-map rejection), menu construction, and a\nsimulated Bombe that recovers candidate settings you can load back to read the message.\n\n## What Can Go Wrong\n\n- The reflector is fixed-point-free, so no letter ever encrypts to itself — a structural leak that crib placement exploits to reject impossible alignments.\n- Predictable plaintext (stereotyped openings, weather reports) gives cribs that a Bombe-style search uses to eliminate rotor and plugboard settings.\n- Operator procedure failures — reused message keys, lazy rotor choices, repeated indicators — historically shrank the effective keyspace far below its theoretical size.\n- The large keyspace (~10²³) creates a false sense of security; exploitable structure, not brute force, is what broke it.\n- It provides no authentication or integrity and no forward secrecy, so ciphertext can be altered undetectably.\n\n## Real-World Usage\n\n- Historically the primary German military cipher of World War II; breaking it (the Polish Biuro Szyfrów, then Bletchley Park) materially affected the war.\n- A foundational case study in cryptanalysis teaching — known-plaintext attacks, search-space reduction, and why keyspace size alone is not security.\n- The origin point for mechanized codebreaking (the Bombe), a precursor to modern computing.\n- Today purely a teaching and museum artifact, not used for any real protection.\n\n## How to Run Locally\n\n```bash\ngit clone https://github.com/systemslibrarian/crypto-lab-enigma-forge\ncd crypto-lab-enigma-forge\nnpm install\nnpm run dev\n```\n\n## Related Demos\n\n- [crypto-lab-vigenere-break](https://systemslibrarian.github.io/crypto-lab-vigenere-break/) — breaking a classical polyalphabetic cipher with Kasiski and frequency analysis.\n- [crypto-lab-dead-sea-cipher](https://systemslibrarian.github.io/crypto-lab-dead-sea-cipher/) — substitution, Vigenère, and Atbash, the historical ciphers Enigma descends from.\n- [crypto-lab-otp-vault](https://systemslibrarian.github.io/crypto-lab-otp-vault/) — the one cipher with provable secrecy, and the key-reuse mistake that breaks it.\n- [crypto-lab-biham-lens](https://systemslibrarian.github.io/crypto-lab-biham-lens/) — modern differential cryptanalysis of a substitution-permutation network.\n\n---\n\n*One of 120+ browser demos in the [Crypto Lab](https://crypto-lab.systemslibrarian.dev/) suite.*\n\n*\"So whether you eat or drink or whatever you do, do it all for the glory of God.\" — 1 Corinthians 10:31*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsystemslibrarian%2Fcrypto-lab-enigma-forge","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsystemslibrarian%2Fcrypto-lab-enigma-forge","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsystemslibrarian%2Fcrypto-lab-enigma-forge/lists"}