An open-source computational analysis of Kryptos K4
671 billion+ configurations evaluated across recorded experiments. 1,000+ experiment scripts. Zero verified breakthroughs.
kryptosbot.com · Workbench · Submit a Theory · Browse Eliminations
Kryptos is an encrypted sculpture at CIA headquarters in Langley, Virginia. Installed in 1990 by artist Jim Sanborn with cryptographic assistance from Ed Scheidt (retired Chairman of the CIA Cryptographic Center), it contains four encrypted messages. The first three (K1–K3) were solved in 1998–1999. The fourth, K4, remains unsolved after over 35 years.
This repository is a systematic attempt to solve K4. At a minimum, it rigorously documents what doesn't work within clearly stated assumptions. No K4 solution is claimed by this project; no real-K4 progress is currently claimed; K4 is not proven impossible. Public-data-only K4 is judged underdetermined from the current public evidence pool — see docs/REAL_K4_CURRENT_POSITION.md for the authoritative status report.
| Ciphertext | OBKRUOXOGHULBSOLIFBBWFLRVQQPRNGKSSOTWTQSJQSSEKZZWATJKLUDIAWINFBNYPVTTMZFPKWGDKZXTJCDIGKUHUAUEKCAR |
| Length | 97 characters (prime), all 26 letters present |
| Known plaintext | Positions 21-33: EASTNORTHEAST, Positions 63-73: BERLINCLOCK |
| IC | 0.0361 (below random expectation of 0.0385) |
src/kryptos/ # Core library: cipher transforms, scoring, constraints
kernel/ # Pure computation: alphabets, transforms, Bean constraints
scoring/ # Crib scoring, n-gram analysis, IC
pipeline/ # Candidate evaluation and parallel sweep runner
novelty/ # Hypothesis generation and triage
corpus/ # Egyptological corpus for running-key testing
cli/ # Command-line tools (sweep, reproduce, novelty, report)
scripts/ # 1,000+ experiment scripts organized by cipher family
substitution/ # Vigenere, Beaufort, Hill, monoalphabetic, etc.
transposition/ # Columnar, rail fence, route, grid-based
fractionation/ # Bifid, Trifid, ADFGVX, Playfair
grille/ # Cardan grille, turning grille, tableau overlays
polyalphabetic/ # Kasiski analysis, period detection
running_key/ # Book ciphers, thematic running keys
encoding/ # Morse (K0), misspelling analysis, binary tests
campaigns/ # Structured multi-stage campaigns (preregistered)
...and more
kryptosbot/ # Multi-agent research controller (Claude Agent SDK):
# theorist/critic/red-team cycle, typed hypothesis DSL,
# kernel-verified dispatch, provenance-gated claims
tests/ # 2,000+ unit, QA, and benchmark tests (plus 2,400+ under kryptosbot/tests/)
bench/ # Cipher-solving benchmark framework + K4Bench synthetic calibration suite
ops/site_builder/ # Static site generator for kryptosbot.com
ops/api/ # FastAPI backend (theory classifier, submission queue)
ops/publish/ # Content-scan guard run by the pre-push hook
Python 3.11+ required. The repo uses a small Python dependency stack for testing, scientific computing, web/API serving, and agent tooling; see requirements.txt.
# Clone
git clone https://github.com/jcolinpatrick/kryptos.git
cd kryptos
# Run tests
PYTHONPATH=src pytest tests/
# Run an experiment
PYTHONPATH=src python3 -u scripts/substitution/e_atbash_01_keyword_decrypt.py
# Try the workbench cipher solver
PYTHONPATH=src python3 -m kryptos sweep <config.toml>
# Check environment health
PYTHONPATH=src python3 -m kryptos doctor
Every candidate decryption is scored against known constraints:
| Score | Classification | Meaning |
|---|---|---|
| 0-9 | Noise | Expected random performance |
| 10-17 | Interesting | Worth logging, likely noise |
| 18-23 | Signal | Unusual within tested scope; requires follow-up and validation |
| 24 | Breakthrough | All cribs match; potential solution |
The score is based on crib consistency (do the known plaintext positions produce a valid keystream?), Bean constraints (equality/inequality relationships between key positions), index of coincidence, and n-gram quality.
After 671 billion+ configurations: no verified solution has emerged within the tested families and parameter ranges. Many standard bounded classical families have been saturated under direct positional correspondence, but that does not rule out multi-layer, procedural, or differently aligned constructions.
The kryptosbot.com site currently documents 522 recorded eliminations across 7 categories (count as of 2026-06-11; the site rebuilds from the same data in this repo):
Important caveat: These eliminations are always scoped to the assumptions actually tested. Single-layer eliminations do not rule out the same cipher family as one layer of a multi-layer construction.
None of these are proven. They represent live hypothesis surfaces or residual coverage gaps. Status as of June 2026.
C-SANBORN-01 and C-SANBORN-02), not as a load-bearing piece of operational evidence. The phrase admits multiple mutually-incompatible structural interpretations and has so far not produced a non-arbitrary cipher mechanism. Any specific mechanistic interpretation remains a hypothesis that must be paired with independent measurable evidence before it gains evidentiary weight. See the pseudo-clue-pack admission standard rule 11.Ws at positions 20, 36, 48, 58, and 74 explain the old width-21 vertical-bigram anomaly. As a single-layer construction the W-segmentation hypothesis has been saturated (80+ tested, no signal); it remains admissible as one layer within multi-layer constructions. Whether the Ws are delimiters, nulls, row markers, or something else remains open.See docs/research_questions.md for the full list of open questions.
As of June 2026 this repository is published in full as a gift to the
Kryptos community, including the complete kryptosbot/ multi-agent
controller and the full research history. Exactly four classes stay out
of the public repo:
.claude/): the precise prompt
construction of the research agents stays private. The architecture
they implement is fully visible in kryptosbot/..env files.reference/, archive/,
analysis_runs/): third-party books and scans (some copyrighted),
bulk photo corpora, and community-thread archives. The photographs
the project shares are the ones published on
kryptosbot.com/archive.results/
and docs/.The whole point of open-sourcing this is to get more eyes on K4.
Try a theory: Use the browser workbench, no install needed. Apply transpositions and substitutions, see crib scores in real time.
Submit a theory: Use kryptosbot.com/submit to check if your idea has already been tested. Novel feasible theories are queued for evaluation.
Write an experiment: See any script in scripts/ for the pattern. Import constants from kryptos.kernel.constants, implement an attack() function, check results against the scoring system.
Report an error: If you think an elimination is wrong, open an issue.
reference/ corpus of third-party source material is not in the public repo for copyright reasons.)Built by Colin Patrick (human lead) and Claude (computational partner, Anthropic).
The sculpture Kryptos was created by Jim Sanborn with cryptographic assistance from Ed Scheidt (retired Chairman of the CIA Cryptographic Center).
2 commits
Python
97.9%
An open-source computational analysis of Kryptos K4
671 billion+ configurations evaluated across recorded experiments. 1,000+ experiment scripts. Zero verified breakthroughs.
kryptosbot.com · Workbench · Submit a Theory · Browse Eliminations
Kryptos is an encrypted sculpture at CIA headquarters in Langley, Virginia. Installed in 1990 by artist Jim Sanborn with cryptographic assistance from Ed Scheidt (retired Chairman of the CIA Cryptographic Center), it contains four encrypted messages. The first three (K1–K3) were solved in 1998–1999. The fourth, K4, remains unsolved after over 35 years.
This repository is a systematic attempt to solve K4. At a minimum, it rigorously documents what doesn't work within clearly stated assumptions. No K4 solution is claimed by this project; no real-K4 progress is currently claimed; K4 is not proven impossible. Public-data-only K4 is judged underdetermined from the current public evidence pool — see docs/REAL_K4_CURRENT_POSITION.md for the authoritative status report.
| Ciphertext | OBKRUOXOGHULBSOLIFBBWFLRVQQPRNGKSSOTWTQSJQSSEKZZWATJKLUDIAWINFBNYPVTTMZFPKWGDKZXTJCDIGKUHUAUEKCAR |
| Length | 97 characters (prime), all 26 letters present |
| Known plaintext | Positions 21-33: EASTNORTHEAST, Positions 63-73: BERLINCLOCK |
| IC | 0.0361 (below random expectation of 0.0385) |
src/kryptos/ # Core library: cipher transforms, scoring, constraints
kernel/ # Pure computation: alphabets, transforms, Bean constraints
scoring/ # Crib scoring, n-gram analysis, IC
pipeline/ # Candidate evaluation and parallel sweep runner
novelty/ # Hypothesis generation and triage
corpus/ # Egyptological corpus for running-key testing
cli/ # Command-line tools (sweep, reproduce, novelty, report)
scripts/ # 1,000+ experiment scripts organized by cipher family
substitution/ # Vigenere, Beaufort, Hill, monoalphabetic, etc.
transposition/ # Columnar, rail fence, route, grid-based
fractionation/ # Bifid, Trifid, ADFGVX, Playfair
grille/ # Cardan grille, turning grille, tableau overlays
polyalphabetic/ # Kasiski analysis, period detection
running_key/ # Book ciphers, thematic running keys
encoding/ # Morse (K0), misspelling analysis, binary tests
campaigns/ # Structured multi-stage campaigns (preregistered)
...and more
kryptosbot/ # Multi-agent research controller (Claude Agent SDK):
# theorist/critic/red-team cycle, typed hypothesis DSL,
# kernel-verified dispatch, provenance-gated claims
tests/ # 2,000+ unit, QA, and benchmark tests (plus 2,400+ under kryptosbot/tests/)
bench/ # Cipher-solving benchmark framework + K4Bench synthetic calibration suite
ops/site_builder/ # Static site generator for kryptosbot.com
ops/api/ # FastAPI backend (theory classifier, submission queue)
ops/publish/ # Content-scan guard run by the pre-push hook
Python 3.11+ required. The repo uses a small Python dependency stack for testing, scientific computing, web/API serving, and agent tooling; see requirements.txt.
# Clone
git clone https://github.com/jcolinpatrick/kryptos.git
cd kryptos
# Run tests
PYTHONPATH=src pytest tests/
# Run an experiment
PYTHONPATH=src python3 -u scripts/substitution/e_atbash_01_keyword_decrypt.py
# Try the workbench cipher solver
PYTHONPATH=src python3 -m kryptos sweep <config.toml>
# Check environment health
PYTHONPATH=src python3 -m kryptos doctor
Every candidate decryption is scored against known constraints:
| Score | Classification | Meaning |
|---|---|---|
| 0-9 | Noise | Expected random performance |
| 10-17 | Interesting | Worth logging, likely noise |
| 18-23 | Signal | Unusual within tested scope; requires follow-up and validation |
| 24 | Breakthrough | All cribs match; potential solution |
The score is based on crib consistency (do the known plaintext positions produce a valid keystream?), Bean constraints (equality/inequality relationships between key positions), index of coincidence, and n-gram quality.
After 671 billion+ configurations: no verified solution has emerged within the tested families and parameter ranges. Many standard bounded classical families have been saturated under direct positional correspondence, but that does not rule out multi-layer, procedural, or differently aligned constructions.
The kryptosbot.com site currently documents 522 recorded eliminations across 7 categories (count as of 2026-06-11; the site rebuilds from the same data in this repo):
Important caveat: These eliminations are always scoped to the assumptions actually tested. Single-layer eliminations do not rule out the same cipher family as one layer of a multi-layer construction.
None of these are proven. They represent live hypothesis surfaces or residual coverage gaps. Status as of June 2026.
C-SANBORN-01 and C-SANBORN-02), not as a load-bearing piece of operational evidence. The phrase admits multiple mutually-incompatible structural interpretations and has so far not produced a non-arbitrary cipher mechanism. Any specific mechanistic interpretation remains a hypothesis that must be paired with independent measurable evidence before it gains evidentiary weight. See the pseudo-clue-pack admission standard rule 11.Ws at positions 20, 36, 48, 58, and 74 explain the old width-21 vertical-bigram anomaly. As a single-layer construction the W-segmentation hypothesis has been saturated (80+ tested, no signal); it remains admissible as one layer within multi-layer constructions. Whether the Ws are delimiters, nulls, row markers, or something else remains open.See docs/research_questions.md for the full list of open questions.
As of June 2026 this repository is published in full as a gift to the
Kryptos community, including the complete kryptosbot/ multi-agent
controller and the full research history. Exactly four classes stay out
of the public repo:
.claude/): the precise prompt
construction of the research agents stays private. The architecture
they implement is fully visible in kryptosbot/..env files.reference/, archive/,
analysis_runs/): third-party books and scans (some copyrighted),
bulk photo corpora, and community-thread archives. The photographs
the project shares are the ones published on
kryptosbot.com/archive.results/
and docs/.The whole point of open-sourcing this is to get more eyes on K4.
Try a theory: Use the browser workbench, no install needed. Apply transpositions and substitutions, see crib scores in real time.
Submit a theory: Use kryptosbot.com/submit to check if your idea has already been tested. Novel feasible theories are queued for evaluation.
Write an experiment: See any script in scripts/ for the pattern. Import constants from kryptos.kernel.constants, implement an attack() function, check results against the scoring system.
Report an error: If you think an elimination is wrong, open an issue.
reference/ corpus of third-party source material is not in the public repo for copyright reasons.)Built by Colin Patrick (human lead) and Claude (computational partner, Anthropic).
The sculpture Kryptos was created by Jim Sanborn with cryptographic assistance from Ed Scheidt (retired Chairman of the CIA Cryptographic Center).
2 commits
Python
97.9%