Verify Kryptos K4 Yourself

This page does not ask for trust. It provides the data, the tables, and the derivations for you to independently verify every position of the K4 reconstruction, and to audit the helper-card layer, the f-table, the gate, the per-position forcing grades, and the published structural signatures.

97 positions checkable Full grids published Forward decoder included Falsifiable claims

What's on this page

A reference page for skeptical readers. The arithmetic is verifiable at every position. The supporting structure is graded honestly: the helper packet reading and an 11-of-26 f-spine are forward-derived from public data, the gate follows a declared position rule, and the helper cards are back-solved from the plaintext. The per-position grade map below shows exactly which letters a public-rules-only solver could force today. Anchor links jump to each section.

How to verify: step by step

Two independent verification paths exist. Either one is sufficient; together they are complementary.

Path A: Arithmetic verification: Compute R = (C − P) mod 26 at each of the 97 positions and compare to the published R-grid. Requires only pencil, alphabet, and the published plaintext. Confirms that the plaintext is arithmetically consistent with the ciphertext.
Path B: On-site / physical reconstruction: Use the four-step on-site procedure (KRYPTOS keyword, back-of-sculpture helper letter, one-bit gate, Quagmire III subtraction) at each position and confirm each shift matches the R-grid. The keyword and the helper letters come off the sculpture; the cards that turn helper letters into shifts are a reconstruction back-solved from the plaintext, so this path checks the machine's internal consistency, not an independent recovery. The complete procedure is in the On-Site Field Guide. Note that the gate, unlike the helper letter, is currently applied as a position-derived value rather than read from the sculpture; see the gate map for why.

Step 1: Get the ciphertext

The K4 ciphertext is 97 characters, as inscribed on the sculpture:

OBKRUOXOGHULBSOLIFBBWFLRVQQPRNGKSSOTWTQSJQSSEKZZWATJKLUDIAWINFBNYPVTTMZFPKWGDKZXTJCDIGKUHUAUEKCAR

Step 2: Get the K4 plaintext

The K4 plaintext (97 characters):

THECOMPASSROSEISHEREXEASTNORTHEASTTHISISYOURPOSITIONXCOMMISSIONBERLINCLOCKWHICHISNORTHEASTOFHEREX

Step 3: Assign letter values

Use the standard alphabet: A=0, B=1, C=2, D=3, E=4, F=5, G=6, H=7, I=8, J=9, K=10, L=11, M=12, N=13, O=14, P=15, Q=16, R=17, S=18, T=19, U=20, V=21, W=22, X=23, Y=24, Z=25.

Step 4: Compute (C − P) mod 26 for each position

For each of the 97 positions, subtract the plaintext letter value from the ciphertext letter value. If the result is negative, add 26. The result is R, the shift at that position.

Worked example, Position 1: C = O (14), P = T (19). R = (14 − 19) mod 26 = (−5) mod 26 = 21. ✓

Position 22: C = F (5), P = E (4). R = (5 − 4) mod 26 = 1. ✓

Step 5: Compare to the published R-grid

The R-grid table below lists the verified R value at every position. Your computed values should match at all 97 positions. If they do, the plaintext is arithmetically valid.

Step 6: Spot-check the anchors

Verify specifically that positions 22–25 produce EAST, 26–34 produce NORTHEAST, 64–69 produce BERLIN, and 70–74 produce CLOCK. These are artist-confirmed and must be preserved exactly.

Step 7 (optional). Use the downloadable tools

The verification bundle includes a Python script (verify.py), CSV and JSON reconciliation tables, and an Excel workbook (verify.xlsx) with formulas already set up. These automate the full 97-position check.

Quick check: verify any position in 30 seconds

Pick any position from 1 to 97. Look up the ciphertext letter (C) and the proposed plaintext letter (P) in the table below. Compute (C − P) mod 26. Compare the result to the R value in the table. It will match.

For example, position 22: C = F (5), P = E (4). Shift: (5 − 4) mod 26 = 1. The table shows R = 1. ✓ This is the start of the confirmed anchor EAST.

Try position 64: C = N (13), P = B (1). Shift: (13 − 1) mod 26 = 12. The table shows R = 12. ✓ This is the start of the confirmed anchor BERLIN.

Every one of the 97 positions resolves the same way. No position requires a special case, an exception, or a secondary key. The formula is uniform.

Position lookup tool

Enter any position (1–97) to see its full data: ciphertext letter, plaintext letter, grid coordinates, gate value, shift values, and the arithmetic verification.

Confirmed anchors (hard constraints)

Any proposed K4 solution must preserve these artist-confirmed plaintext segments at their exact documented positions. A proposal that moves them is not testing the same K4.

Anchor Positions Ciphertext R values Year
EAST 22–25 FLRV 1, 11, 25, 2 2020
NORTHEAST 26–34 QQPRNGKSS 3, 2, 24, 24, 6, 2, 10, 0, 25 2020
BERLIN 64–69 NYPVTT 12, 20, 24, 10, 11, 6 2010
CLOCK 70–74 MZFPK 10, 14, 17, 13, 0 2014

How a skeptic tests this

Four independent checks, any of which would falsify the proposal if it fails:

1. Anchor lock

Verify that EAST appears at positions 22–25, NORTHEAST at 26–34, BERLIN at 64–69, and CLOCK at 70–74 in the proposed plaintext. If any anchor is misplaced, the proposal fails immediately.

2. Uniform arithmetic and grid consistency

Compute R[i] = (C[i] − P[i]) mod 26 at all 97 positions. Every result must match the published R value. Verify that lane = ((i − 2) mod 14) + 1 and tier = ⌈i ÷ 14⌉ hold at all 97 positions, and that the one-bit gate for each cell matches the published gate map (R = r + gate at every position). The gate value is fixed by position and reproducible from the published rule chain (see the gate map).

3. Decomposition agreement

Verify that R = r + gate at every position. Both the direct R lookup and the r + gate decomposition must produce identical results. Any discrepancy invalidates the mechanism.

4. Falsification test

If Sanborn or any verified source confirms a plaintext letter inconsistent with this proposal at its documented position, or if original coding records show R values contradicting this table, the proposal is falsified. This is stated in advance and by design.

Step-by-step verification walkthrough

This walkthrough demonstrates the full verification process for several positions, including both gate = 1 and gate = 0. Follow these steps with any position to independently confirm the arithmetic.

Step 1: Get the letters

For position 22 (the first letter of the confirmed EAST anchor): ciphertext letter C = F, plaintext letter P = E.

Step 2: Convert to numbers

Using A=0, B=1, … Z=25: F = 5, E = 4.

Step 3: Compute the shift

R = (C − P) mod 26 = (5 − 4) mod 26 = 1.

Step 4: Check the decomposition

Position 22: gate = 1. The r-grid value is r = 0. r + gate = 0 + 1 = 1 = R. Verified.

Step 5: Confirm the grid coordinates

tier = ⌈ 22 ÷ 14 ⌉ = 2. lane = ((22 − 2) mod 14) + 1 = 7. Position 22 is Tier 2, Lane 7.


More examples

i C P C−P R Gate r r+Gate Tier Lane
1 O (14) T (19) −5 21 0 21 21 ✓ 1 14
22 F (5) E (4) 1 1 1 0 1 ✓ 2 7
64 N (13) B (1) 12 12 0 12 12 ✓ 5 7
74 K (10) K (10) 0 0 0 0 0 ✓ 6 3
97 R (17) X (23) −6 20 1 19 20 ✓ 7 12

Position 1 (gate = 0): a boundary position. Position 74 (K→K): a self-mapping position where ciphertext equals plaintext. Position 97: the last filled cell in the 7×14 grid. All follow the same formula with no exceptions.

Automate it: A Python verification script (verify.py) is included in the download bundle. It runs all four checks across all 97 positions with no dependencies beyond the standard library.

The R-grid (verified shift values)

The complete 7×14 grid of R values. Each value is verified: R = (C − P) mod 26 at the corresponding position.

L14 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13
T1 21 20 6 15 6 2 8 14 14 15 3 23 9 14
T2 6 19 1 1 10 23 25 1 11 25 2 3 2 24
T3 24 6 2 10 0 25 21 12 14 1 8 0 11 2
T4 24 1 15 22 7 17 3 18 5 22 13 9 6 17
T5 22 18 4 16 5 17 14 12 20 24 10 11 6 10
T6 14 17 13 0 0 25 21 8 18 15 1 22 14 12
T7 15 25 6 20 15 1 12 15 23 6 11 22 20 ·

The dot (·) marks the blank cell at Tier 7, Lane 13.

The r-grid (base shift values)

Derived from the R-grid: r = R − gate. Where gate = 1, r is one less than R. Where gate = 0, r equals R.

L14 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13
T1 21 19 6 14 6 2 7 13 13 14 2 23 8 13
T2 6 18 0 0 9 23 25 0 10 24 1 2 2 24
T3 23 5 1 10 0 25 20 11 13 0 7 25 10 1
T4 23 0 14 21 6 16 2 17 4 21 12 9 5 16
T5 21 17 3 15 5 16 13 12 20 24 9 11 6 10
T6 13 16 12 0 25 25 21 7 17 14 0 21 14 11
T7 14 25 6 19 14 0 11 14 22 6 10 21 19 ·

Each r value is produced by r = (f(C) + g_state(T)) mod 26, where f is the row-identity card applied to the cipher letter and g_state is the helper-card value for the back-side letter at that position. See The four helper cards below for the complete tables.

The one-bit gate map

Each cell carries a one-bit gate (0 or 1) that is added to the base shift r to give the final shift R. The gate value at every position is fixed and verifiable: it is whatever makes R = r + gate match the arithmetic R = (C − P) mod 26. Equivalently, it is reproducible from position alone (col31, tier mod 3, and seam-corner), or from the ciphertext letter and its lane. See The gate on the How It Works page for the position-derived rule.

Gate status: fixed by position, plaintext-independent by construction. The one-bit gate is reproduced exactly by the published rules: X cap = 0101, Y-row gate rule, Z1 from Y by +3 internal drift with terminal +1 carry, and Z2 from Y by footer / basis-handoff collapse. This reconstructs all 97 gate bits. The ray reading of the same map (69 E, 18 NE, 10 S) is a physical conjecture awaiting the blind on-site audit.
L14 L1 L2 L3 L4 L5 L6 L7 L8 L9 L10 L11 L12 L13
T1 0 1 0 1 0 0 1 1 1 1 1 0 1 1
T2 0 1 1 1 1 0 0 1 1 1 1 1 0 0
T3 1 1 1 0 0 0 1 1 1 1 1 1 1 1
T4 1 1 1 1 1 1 1 1 1 1 1 0 1 1
T5 1 1 1 1 0 1 1 0 0 0 1 0 0 0
T6 1 1 1 0 1 0 0 1 1 1 1 1 0 1
T7 1 0 0 1 1 1 1 1 1 0 1 1 1 ·

Across the 97 active cells, the solved gate map contains 69 cells with gate = 1 and 28 cells with gate = 0. These counts are directly reproduced by the position-defined X/Y/Z rules.

The helper packet from the physical flip

The helper letter T at each K4 position is not fitted, guessed, or computed from text. It is read physically off the tableau side of the copper screen at the same row and column as the K4 ciphertext letter. The full 97-character helper keystream is generated by this one rule.

Boundary alignment (the K4 entry)

On the cipher side, the K4 region begins at the bottom of the screen. Reading the continuous cipher transcript, cipher row 25 columns 26–31 are:

cipher row 25, columns 26-31:    ... W ? O B K R

At the same physical row and columns on the tableau side of the screen:

tableau row 25, columns 26-31:   U V W X Z K

So the cell-by-cell mapping at the boundary is:

cipher  W  ?  O  B  K  R
tableau U  V  W  X  Z  K
                |  |  |  |
                pre-K4 boundary, then OBKR
                |  |  |  |
                ? -> V              (excluded "virtually invisible" bridge cell)
                OBKR -> WXZK        (active X-pass cap, positions 1-4)

The full helper packet (97 cells)

Continuing the physical flip down the screen, the next three K4 lines (positions 5–35, 36–66, 67–97) map to the full Y row, the full Z row, and the footer shelf:

positions  1-4    cap:    WXZK                              (4 cells)
positions  5-35   Y row:  YXZKRYPTOSABCDEFGHIJLMNQUVWXZKR  (31 cells)
positions 36-66   Z row:  ZZKRYPTOSABCDEFGHIJLMNQUVWXZKRY  (31 cells)
positions 67-97   footer: _ABCDEFGHIJKLMNOPQRSTUVWXYZABCD  (31 cells, blank + standard A-Z + ABCD)
                                                            ─────────
                                                            4 + 31 + 31 + 31 = 97

The visible footer is the standard A–Z alphabet plus a partial wrap, not a re-read of the Z row. This matches the physical fact that there is no normal alphabetic row beneath the Z row of the tableau, only the alphabetic footer shelf.

The Z2 footer basis handoff

The Z2 pass visibly reads the standard footer, but its effective lookup basis is not the visible standard letter itself. Before the g_Z2 lookup, the footer is converted into KALPHA state with a one-step carry:

visible footer:       _ABCDEFGHIJKLMNOPQRSTUVWXYZABCD
effective Z2 key:    ZZKRYPTOSABCDEFGHIJLMNQUVWXZKRY

effective_Z2_key = KALPHA[(stdpos(footer_letter) - 1) mod 26]
blank = carried Z

In mapping form: blank -> Z, A -> Z, B -> K, C -> R, D -> Y, E -> P, and so on through Z -> X, then the wrap repeats A -> Z, B -> K, C -> R, D -> Y. This reproduces the derived g_Z2 values at 31/31 Z2 positions.

Why this is the second physical layer

Sanborn's 2006 correction to the K2 ending, replacing the previously read "ID BY ROWS" with "X LAYER TWO", names the second physical layer of the sculpture. The Morse phrase "VIRTUALLY INVISIBLE" on the entrance slab names the excluded V cell. The Morse phrase "T IS YOUR POSITION" becomes literal: the helper letter T at each cipher position is determined by your physical position on the screen, by flipping to the tableau side.

The full coordinate ledger, every K4 position, its continuous-transcript position, its (row, col) on the cipher side, the matching helper letter T on the tableau side, and the resulting r, gate, R, is included in the verification bundle.

The four helper cards (summary)

The active helper layer uses g_X, g_Y, g_Z1, g_Z2, and Z2_delta. These are computed values, not guesses, but computed means determined by arithmetic given the plaintext: the recipe below uses P at step 1, which is why the cards are back-solved and reproduce the reconstruction by construction.

  1. For each position, compute R = (C - P) mod 26.
  2. Remove the gate to get base shift: r = (R - gate) mod 26.
  3. Read C on the front, read T on the back at the same cell.
  4. Solve helper value with g_state(T) = (r - f(C)) mod 26.
  5. Store it on the pass card (X, Y, Z1, Z2) and verify repeats stay consistent.

Note: mod 26 means wrap around, after 25 comes 0.

Cap-pass lock values are g_X(W)=21, g_X(X)=4, g_X(Z)=24, g_X(K)=11. Then Y is solved from positions 5-35, Z1 is derived from Y by +3 drift with terminal +1 carry, Z2 is derived by footer or basis-handoff collapse, and Z2_delta = (g_Z2 - g_Z1) mod 26.

Full card tables and derivation chain: Appendix, helper cards.

Y template replacement note

The previous zero-template writeup has been replaced by the rev 16 Y master template derivation and explicit Y -> Z1/Z2 transforms.

Full derivation: Appendix, Y master template.

The f-table derivation and IDQLNAME signature (summary)

The f-table is partly forward-derived and partly reconstruction: 11 of 26 values come forward from public data (the 7-of-7 tail rule at kpos ≥ 19, f(O) = 0 from UNDERGRUUND, the misspelling rule fixing f(L), the June anchor-frontier closure f(P) = 11 via the R-of-BERLIN anchor and the derived Z1 scaffold, and the July 1 transitive-closure result f(T) = 13 via the composite Z2 helper cell forced at positions 67–68); the remaining entries are back-solved. The KRYPTOSA -> IDQLNAME identity-card signature is retained as a working-theory reading.

Full derivation: Appendix, f-table. Uniqueness proof: Appendix, KRYPTOSA -> IDQLNAME.

The Z1 binary mask (summary)

The mask is derivable from KALPHA class structure (kpos mod 8 with constrained exceptions), no plaintext feedback required.

Full derivation: Appendix, Z1 mask.

SUB UMBRA FLOREO, hero summary

A 14-lane register signature appears in the helper layer as SUB UMBRA FLOREO. It survives a strict boundary null, with two caveats: it is read from the back-solved cards, and the 6.82 x 10^-8 headline reflects one tested condition without accounting for how many card operations and bases were searched. Status: working-theory authorial-signature candidate.

Full construction and probability proof: Appendix, SUB UMBRA FLOREO.

AMID GRAY / I MAP J (summary)

The internal instruction card is read from D = g_Y - g_Z1 under the KYPT/ROSA basis switch. It is read out of the back-solved cards and is not uniquely forced; we keep it as an interpretive working theory.

Full derivation: Appendix, AMID GRAY.

KYPT / ROSA balance laws (summary)

The 26-letter partition and balance identities remain consistent with the helper-card transport model. They are read from the back-solved cards; status: working theory.

Full derivation: Appendix, balance laws.

ANDER -> KYARX witness (summary)

The Alexanderplatz witness mapping is retained as a publication-grade closure test tied to YAHR.

Full derivation: Appendix, ANDER -> KYARX.

K / C / S -> T / Z / K closure (superseded)

Superseded, June 2026. The earlier terminal-state reading of the three hard cells (K, C, S) is retained for history only. Those cells now carry the rose-East rule, an A-class candidate scoped to the three cells, with its evidence package on the solution page and the appendix.

Full derivation: Appendix, K / C / S -> T / Z / K.

Where the evidence stands

The proposed plaintext satisfies the four artist-confirmed anchors and full Quagmire III arithmetic at 97/97 positions; the helper stream is physically read; the gate follows its declared position rule; the rev 16 Y master template fits 31/31 with a 0/100,000 null; and as of June 2026 the whole machine runs forward end to end with no plaintext input. The plaintext itself was recovered from Sanborn's Smithsonian archive (Kobek and Byrne, September 2025) and authenticated by Sanborn; the authenticated text is not public, and this site's 97 characters remain a reconstruction consistent with the anchors.

The 2025 archive recovery. Writer Jarett Kobek and journalist Richard Byrne recovered the K4 plaintext from Sanborn's publicly accessible papers at the Smithsonian in September 2025, and Sanborn confirmed its authenticity. The coding method and key were not part of what was found; both discoverers emphasized they had not solved the cipher cryptographically.

What a competing plaintext would have to satisfy

No competing proposal currently in circulation satisfies even three of these simultaneously.

Sanborn's authoring budget

Under the rev 16 reductions, K4's authored choices collapse to three design decisions:

  1. The plaintext, about 97 characters of English.
  2. The KRYPTOS keyword, inherited from K1-K3.
  3. The SUBUMBRAFLOREO phrase choice.

Under the reconstruction, everything else follows mechanically from the published transport rules, which were themselves back-solved. The open items are listed honestly in the open problems register: the g_Y card first, then the rose rule's step-16 witness, the wrap procedure, and the blind gate/ray field read.

The forward decode and the per-position grade map (June and July 2026)

The reconstructed method now runs forward as a decoder. With no plaintext input anywhere, only the ciphertext, the tableau transcript, the declared cards, and the gate, the machine outputs the 97-character reconstruction exactly, anchors included (Tier 1). Two independent implementations agree, and the standalone script forward_decode.py (all constants embedded, self-checks only against the four artist-confirmed anchors) is in the downloads (Tier 3). This proves the written method is complete and executable; it does not prove every card value is publicly derivable.

Tier 2 grades every position by the worst component its decode requires: D = anchor or derived rule, C = public-relational f (the A/E/I chain), A = rose-East delta cells, W = witness-claimed values, B = FPZ-bridge value, F = back-solved only.

pos 1..97:
FFFFFFFFFFFFFFFFFFFFFDDDDDDDDDDDDDFWWDWFFWFFWFWWDCWFFDWFWCWWWFFDDDDDDDDDDDWFFFWWBFFFWFFWFWWWWFFFF

counts:  D = 27 · C = 2 · W = 22 · B = 1 · F = 45
by pass: X 4F · Y 13D/18F · Z1 6D/2C/13W/10F · Z2 8D/9W/1B/13F

The honest reading: 52 positions decode under derived or witness-claimed rules; 45 still require at least one back-solved value. The F-mass is concentrated in g_Y (18 of the Y pass's 31 positions) and the X cap, so g_Y is still the largest underived object in the system, though no longer wholly underived: the June anchor-frontier sweep public-forces six of its 26 cells (I, L, M, N, V, Q). The rose rule removes the delta values at C, K, and S from the back-solved ledger, and the July 1 transitive closure now derives the K cell outright (delta(K) = 6) and flips position 38 to a fully public decode; fully forcing the C and S positions still waits on their companions. Under the graded conditional ladder (FPZ bridge [B], witnessed exception families [W]) the back-solved count falls from 45 to 37. This map shows exactly which letters a public-rules-only solver could force today.

Certainty ladder

The project's findings sit at different levels of certainty. This ladder makes them explicit. Higher levels are stronger claims.

Locked (arithmetic / artist-confirmed)

Physically derived (artifact-grounded)

Gate certainty

Forward-derived (from public data)

Witness-claimed (readings tied to public objects, not yet forced)

A-class candidate

Structural signatures (working theory)

Still open

The boundary: what public data cannot force

The boundary has moved, and we can now draw it per position. 52 of 97 positions decode under derived or witness-claimed rules; 45 require values that exist only as an authored worksheet. The largest single underived object is the Y-pass helper card (g_Y), though six of its cells are now public-forced; the Z2 correction card is now fitted everywhere except its three hard cells, which carry the rose-East rule. The anchor-frontier sweeps add four live plaintext-free relational invariants between g-cells (four of the original eight are now absorbed into absolute derived values), promote delta(Y) = 3 and delta(K) = 6 to derived, and, under the graded conditional ladder, lower the back-solved count from 45 to 37. The anchors-only underdetermination theorem still holds: the public anchors give 24 equations in 37 variables across 13 disconnected components with no cycles, so no amount of public anchor data can reconstruct the method. The remaining mass is the sealed chart, by design.

The corollary cuts both ways, and we state it plainly: because the full-system incidence graph is a forest (no forcing cycles; given the plaintext, the fitted f/g layer carries six degrees of freedom), the fitted card cells can always be tuned to reproduce a supplied shift stream. 97/97 agreement therefore certifies that the plaintext is arithmetically consistent with the ciphertext under the reconstructed machine; it does not independently validate the plaintext or the method, and we have never claimed it does. The evidential weight of this project rests on the derived [D] chain, the plaintext-free invariants, the artist-confirmed anchors, and the pre-registered null batteries, and every claim on this site is graded accordingly.

Absolute derived values [all D]: g_Z2(T) = 1, g_Z2(Z) = 24, g_Z2(K) = 19, g_Z2(Y) = 16, g_Y(Q) = 13, g_Z1(Y) = 13, delta(Y) = 3, delta(K) = 6. Live plaintext-free invariants any candidate chart must satisfy (mod 26): g_Y(H) − g_Z2(P) = 10; g_Y(J) − g_Y(U) = 1; g_Y(X) − g_Z2(O) = 10; g_Y(Z) − g_Y(K) = 1. Four of the original eight invariants are now theorems of the absolute values above, all verified exactly, an internal consistency audit of the anchor web.

The likely shape of that missing artifact is itself a finding: under the generated-Z2 helper, the full shift stream reduces to a sparse lookup of 92 unique (cipher, helper) entries plus 3 pass-dependent exceptions. The authored chart need not be the algebraic f/g factorization we reconstructed; it may be a practical 92-entry worksheet with three marked exceptions.

The keystream wanted poster (the 24 confirmed values)

The 24 artist-confirmed keystream values any real mechanism must reproduce. Chance scores about one of 24.

pos 22–34 (EAST NORTHEAST):  1  11  25   2   3   2  24  24   6   2  10   0  25
pos 64–74 (BERLIN CLOCK):   12  20  24  10  11   6  10  14  17  13   0

profile: full-range, near-uniform, no period, near-zero lag-1 autocorrelation,
not a function of C, ~456-bit ceiling

The on-sculpture clues are all selectors: small, few-bit instructions (a bearing, a clock state, a count) that can choose a route through a large object but cannot be the object. The key itself is a high-information chart, authored and sealed. That is why testing a bearing or a clock state as a keystream always returns noise.

How we evaluate claims

We hold every claim to a forward-derivability standard: a finding counts only if it can be derived from public data without already knowing the answer. We classify each as Derived, Constrained, or Fitted, and we say which. New mechanism ideas are tested against the 24 artist-confirmed keystream values: a real key reproduces them; chance scores about one. We use null baselines, account for the number of variants tried (the look-elsewhere effect), and treat internal consistency, a model reproducing the answer it was built from, as not being evidence of correctness.

Negative results, what was ruled out

The K4 project ruled out a long list of candidate mechanisms before arriving at the current model. These are listed here so future solvers do not retrace dead ends.

Direct keyword keystreams (ruled out)

Direct text keystreams (ruled out)

Direct external-clock encodings (ruled out)

Simple tableau reads (ruled out)

Period analysis (no period found)

June 2026 null batteries (Z2_delta, null-calibrated)

Survived falsifications and rejected non-witnesses (June 2026)

We also publish the tests our own positive claims had to survive, and the tempting readings we rejected:

A reader-facing negative-test summary ships as negative_tests_summary.txt in the downloads. We cite these because a reconstruction earns credibility by what it survives, not only by what it fits.

Reconciliation table (all 97 positions)

The complete position-by-position data. Every row is independently checkable: verify that R = (C − P) mod 26 and that R = r + gate.

i T L C C# P P# Gate r R Check
1 1 14 O 14 T 19 0 21 21
2 1 1 B 1 H 7 1 19 20
3 1 2 K 10 E 4 0 6 6
4 1 3 R 17 C 2 1 14 15
5 1 4 U 20 O 14 0 6 6
6 1 5 O 14 M 12 0 2 2
7 1 6 X 23 P 15 1 7 8
8 1 7 O 14 A 0 1 13 14
9 1 8 G 6 S 18 1 13 14
10 1 9 H 7 S 18 1 14 15
11 1 10 U 20 R 17 1 2 3
12 1 11 L 11 O 14 0 23 23
13 1 12 B 1 S 18 1 8 9
14 1 13 S 18 E 4 1 13 14
15 2 14 O 14 I 8 0 6 6
16 2 1 L 11 S 18 1 18 19
17 2 2 I 8 H 7 1 0 1
18 2 3 F 5 E 4 1 0 1
19 2 4 B 1 R 17 1 9 10
20 2 5 B 1 E 4 0 23 23
21 2 6 W 22 X 23 0 25 25
22 2 7 F 5 E 4 1 0 1
23 2 8 L 11 A 0 1 10 11
24 2 9 R 17 S 18 1 24 25
25 2 10 V 21 T 19 1 1 2
26 2 11 Q 16 N 13 1 2 3
27 2 12 Q 16 O 14 0 2 2
28 2 13 P 15 R 17 0 24 24
29 3 14 R 17 T 19 1 23 24
30 3 1 N 13 H 7 1 5 6
31 3 2 G 6 E 4 1 1 2
32 3 3 K 10 A 0 0 10 10
33 3 4 S 18 S 18 0 0 0
34 3 5 S 18 T 19 0 25 25
35 3 6 O 14 T 19 1 20 21
36 3 7 T 19 H 7 1 11 12
37 3 8 W 22 I 8 1 13 14
38 3 9 T 19 S 18 1 0 1
39 3 10 Q 16 I 8 1 7 8
40 3 11 S 18 S 18 1 25 0
41 3 12 J 9 Y 24 1 10 11
42 3 13 Q 16 O 14 1 1 2
43 4 14 S 18 U 20 1 23 24
44 4 1 S 18 R 17 1 0 1
45 4 2 E 4 P 15 1 14 15
46 4 3 K 10 O 14 1 21 22
47 4 4 Z 25 S 18 1 6 7
48 4 5 Z 25 I 8 1 16 17
49 4 6 W 22 T 19 1 2 3
50 4 7 A 0 I 8 1 17 18
51 4 8 T 19 O 14 1 4 5
52 4 9 J 9 N 13 1 21 22
53 4 10 K 10 X 23 1 12 13
54 4 11 L 11 C 2 0 9 9
55 4 12 U 20 O 14 1 5 6
56 4 13 D 3 M 12 1 16 17
57 5 14 I 8 M 12 1 21 22
58 5 1 A 0 I 8 1 17 18
59 5 2 W 22 S 18 1 3 4
60 5 3 I 8 S 18 1 15 16
61 5 4 N 13 I 8 0 5 5
62 5 5 F 5 O 14 1 16 17
63 5 6 B 1 N 13 1 13 14
64 5 7 N 13 B 1 0 12 12
65 5 8 Y 24 E 4 0 20 20
66 5 9 P 15 R 17 0 24 24
67 5 10 V 21 L 11 1 9 10
68 5 11 T 19 I 8 0 11 11
69 5 12 T 19 N 13 0 6 6
70 5 13 M 12 C 2 0 10 10
71 6 14 Z 25 L 11 1 13 14
72 6 1 F 5 O 14 1 16 17
73 6 2 P 15 C 2 1 12 13
74 6 3 K 10 K 10 0 0 0
75 6 4 W 22 W 22 1 25 0
76 6 5 G 6 H 7 0 25 25
77 6 6 D 3 I 8 0 21 21
78 6 7 K 10 C 2 1 7 8
79 6 8 Z 25 H 7 1 17 18
80 6 9 X 23 I 8 1 14 15
81 6 10 T 19 S 18 1 0 1
82 6 11 J 9 N 13 1 21 22
83 6 12 C 2 O 14 0 14 14
84 6 13 D 3 R 17 1 11 12
85 7 14 I 8 T 19 1 14 15
86 7 1 G 6 H 7 0 25 25
87 7 2 K 10 E 4 0 6 6
88 7 3 U 20 A 0 1 19 20
89 7 4 H 7 S 18 1 14 15
90 7 5 U 20 T 19 1 0 1
91 7 6 A 0 O 14 1 11 12
92 7 7 U 20 F 5 1 14 15
93 7 8 E 4 H 7 1 22 23
94 7 9 K 10 E 4 0 6 6
95 7 10 C 2 R 17 1 10 11
96 7 11 A 0 E 4 1 21 22
97 7 12 R 17 X 23 1 19 20

T = Tier, L = Lane, C# = ciphertext letter value (A=0), P# = plaintext letter value, Gate = the one-bit gate (0 or 1), R = verified shift. All 97 rows pass: R = (C# − P#) mod 26 and R = r + gate.

Download verification data

All verification data is published for independent analysis. The canonical bundle includes everything needed to reproduce the reconstruction and audit its boundary. The flagship artifact is forward_decode.py, the standalone forward decoder: all constants embedded, zero file dependencies, self-checks only against the four artist-confirmed anchors.

Bundle contents (v15):

Cipher_side.txt. Core cipher-side transcription helper
Tableau_side.txt. Core tableau-side transcription helper
k4_ciphertext.txt. The 97 ciphertext characters
k4_proposed_plaintext.txt. The 97 proposed plaintext characters
k4_confirmed_anchors.txt. The four artist-confirmed anchors with positions
k4_reconciliation.csv. All 97 rows: i, tier, lane, C, P, gate, r, R
k4_reconciliation_table.json. Same data as JSON (for programmatic use)
r_grid_7x14.txt. The verified R-grid and base r-grid in 7×14 layout (both in one file)
gate_map.txt, One-bit gate values (0/1 per cell)
ray_classification.txt, conjectural per-cell E/NE/S classification notes for field audit; not yet a measured physical survey
f_table.txt, Complete row-identity card (f) for all 26 KRYPTOS letters
helper_cards.txt. The four helper cards (g_X, g_Y, g_Z1, g_Z2) plus Z2_delta, full values for all 26 KRYPTOS letters
z2_footer_basis_handoff.txt. The visible-footer to KALPHA-state handoff, with the 31/31 Z2 check
verify.py, Python 3 verification script (no dependencies)
verify.xlsx, Excel workbook with formulas for verification (3 sheets)
k1_plaintext.txt, k2_plaintext.txt, k3_plaintext.txt. K1–K3 plaintexts
entrance_slab_morse.txt, Morse code transcriptions from the entrance slabs
forward_decode.py. Standalone forward decoder, all constants embedded, anchor-only self-checks (the flagship artifact)
claim_status_summary.txt. Public claim-status guide for derived, constrained, and fitted layers
negative_tests_summary.txt. Reader-facing negative-test summary
k5_precommitments.txt. Timestamped K5/late-archive predictions with written pass/fail conditions
GATE_BLIND_AUDIT_PROTOCOL_2026-06-09.md. The two-stage blind protocol for the on-site gate/ray read
gate_physical_preregistration_sheet.csv. The printable 97-row field sheet for the blind read
k4_keystream_wanted_poster.txt. The 24 confirmed keystream values and their statistical profile
BUNDLE_FILE_STATUS.md. File-by-file status index for the flat public bundle
README.txt, File manifest, indexing conventions, and verification instructions
SolveKryptos_README.txt, Extended documentation and cipher classification reference

Programmers: the CSV file imports directly into Python (pandas), R, Excel, or any spreadsheet application. The JSON file is a 97-element array of objects with all fields. All files are UTF-8 encoded, no BOM. The Python script runs all four checks across all 97 positions with no external dependencies.

The four helper-card values (g_X, g_Y, g_Z1, g_Z2) are included in helper_cards.txt. Their status is summarized in claim_status_summary.txt. A future bundle revision will add a full coordinate ledger (cipher row × column → tableau letter T) per position.

What would falsify this

A reconstruction worth taking seriously should state clearly what would prove it wrong:

Confirmation of any plaintext letter inconsistent with the proposed string at its verified position. Release of original coding records showing R values that contradict the published table. Demonstration that lane = ((i − 2) mod 14) + 1 fails at any position. Identification of a position where R ≠ (C − P) mod 26. Discovery of a tableau-side letter at any (row, column) that does not match the published helper packet (cap WXZK, Y row, Z row, footer shelf).

The mechanism claims are uniform across all 97 positions and do not depend on interpretive choices about the plaintext. They can be verified or falsified directly from the reconciliation table or by physically inspecting the tableau back.

Precommitted predictions. Before any further disclosure, we have timestamped what the archive and K5 should show if this reconstruction is right: the same-row helper principle, the footer basis switch, a sparse 92-entry worksheet with three marked exceptions, rose-frame handling of the K, C, and S cells, and K4-shared word positions in K5. Each prediction has a written pass/fail condition, in k5_precommitments.txt in the downloads. If they fail, this site will say so.

Continue