Skip to content

Zodiac Z13

The Zodiac Killer remains one of the most notorious unidentified serial murderers in American history. Between 1968 and 1970, this individual murdered several people in Northern California and taunted law enforcement and the press with letters and cryptograms. Among the communications he sent to newspapers was one in April 1970 that included a short cipher of thirteen symbols prefaced by the preamble “My name is —”. This thirteen-symbol message, known in Zodiac literature as Z13, has remained stubbornly unsolved for over half a century and represents one of the most enduring puzzles in forensic cryptography. Despite its brevity, Z13 has attracted repeated attempts at decryption by professional cryptographers, independent researchers, and amateur sleuths alike, yet no solution has been universally accepted. Official histories of the Zodiac’s correspondence note that only two of the four Zodiac ciphers have ever been solved with confidence, while Z13 continues to resist traditional methods of decryption.

The most recent claim to have “solved” Z13 emerged in 2025 and 2026, when self-taught codebreaker Alex Baber publicly asserted that the plaintext of Z13 encodes the name Marvin Merrill, which Baber identifies as an alias used by a man previously considered a suspect in the 1947 murder of Elizabeth Short, known colloquially as the Black Dahlia. Baber’s work was reported in major media outlets and has subsequently become a subject of intense debate in both cryptographic and true-crime communities. According to reports, Baber generated a vast list of possible 13-letter names using artificial intelligence and filtered these candidates against historical records, eventually narrowing the list to a single name that he believes matches the cipher’s pattern and aligns with known circumstantial data regarding Zodiac and Black Dahlia suspects. This claim has been presented as a breakthrough that not only deciphers Z13 but also links two of America’s most infamous unsolved murders.

The claim that Z13 reveals the name Marvin Merrill captured public attention because it appears to offer a direct identity for the Zodiac Killer. News articles and analyses have described how Baber’s process involved cross-checking millions of candidate names generated by AI against military, census, and other public records, using known details about the Zodiac’s likely characteristics and witness descriptions to eliminate implausible entries. Baber’s assertion has been reported alongside endorsements from some retired law enforcement figures and private detectives who find the circumstantial connections compelling, and it was said to have been reviewed by former cryptographers who did not find obvious flaws in the computational work. From that perspective, the Marvin Merrill hypothesis has been treated by proponents as a synthesis of computational cryptanalysis and historical investigation. However, law enforcement agencies have not publicly confirmed the interpretation, and no official closure of the Zodiac case has been announced.

Independent technical evaluation of this solution has taken shape in various forms, including a publicly accessible Python notebook hosted on Google Colab, authored by other cryptanalysts. That notebook was designed to examine whether the Marvin Merrill reading holds up under classical cryptanalytic scrutiny and to evaluate how the cipher could be approached using foundational methods rather than heuristics or proprietary algorithms. The independent analysis described a plausible cryptographic scheme in which Z13 might be interpreted as the result of a monoalphabetic substitution combined with a grid-based transposition, patterns that are consistent with how certain historical ciphers are constructed. The analysis in the notebook incorporates techniques such as frequency analysis and order-of-appearance (OOA) analysis, which are invariant under simple substitution and thus allow structural constraints to be tested without knowing the specific substitution mapping. In this framework, the thirteen symbols of Z13 are mapped onto a rectangular grid, permutations are applied according to a keyword-derived ordering, and candidate plaintexts are compared using OOA patterns to see if they could correspond to unpermuted plaintext names. The notebook’s code builds name lists from publicly available sources and filters them according to these structural constraints, striving to isolate names that are consistent with both the cipher’s inherent pattern and plausible human names of appropriate length.

The code analysis underlying the cryptanalytic framework begins by defining structural invariants of text, such as character frequencies and the order in which each unique character appears. These are essential because they remain unchanged under monoalphabetic substitution, meaning that any candidate plaintext that could map to the observed cipher must share the same frequency counts and the same sequence pattern of first appearances. A typical implementation in the notebook looks like this:

def get_sorted_freqs(text: str) -> list[int]:
    '''Get the sorted frequency list of a text string.'''
    return sorted(text.count(char) for char in set(text))

def order_of_appearance(text: str, first: str = 'a') -> str:
    '''Return a string showing order of appearance of characters.'''
    chars = []
    ooa = []
    for char in text:
        if char not in chars:
            chars.append(char)
        ooa.append(chars.index(char))
    return ''.join([
        chr(ord(first) + ooa_val)
        for ooa_val in ooa
    ])

These utilities allow the code to generate a fingerprint of candidate plaintexts that can be compared directly with the cipher text pattern. The next step is to model the hypothesized grid transposition layer. The notebook implements a box permutation function that inserts a null placeholder into the text, arranges it into a two-row grid, permutes the columns according to a derived key, and reads out the resulting text. The function responsible for this transformation is structured as follows:

def box_permute(
    input: str,
    permutation: Permutation,
    insert_pos: int | None,
    reverse_inputs: bool = False,
    reverse_outputs: bool = False,
) -> tuple[str, int]:
    permutation = perm_0_up(permutation)
    if insert_pos is None:
        inserted = input
    else:
        inserted = input[:insert_pos] + '_' + input[insert_pos:]
    ...
    rows = [
        inserted[start:start + len(permutation)]
        for start in range(0, len(inserted), len(permutation))
    ]
    ...
    cols = list(zip(*rows))
    permuted_cols = [
        cols[selection]
        for selection in permutation
    ]
    permuted_text = ''.join(''.join(row) for row in permuted_rows)
    return permuted_text.replace('_',''), permuted_text.index('_')

This mechanism systematically simulates columnar transposition, requiring the evaluation of many permutations to see which align with the observed ciphertext. Once plausible alignments are generated, the notebook attempts to derive a monoalphabetic substitution mapping that would transform the unpermuted ciphertext into the candidate plaintext:

def derive_substitution(
    ciphertext: str,
    perm: Permutation,
    ct_pos: int,
    plaintext: str,
    strict: bool = False,
) -> dict[str, str]:
    if len(ciphertext) != len(plaintext):
        raise ValueError(f'Length mismatch CT:{len(ciphertext)} PT:{len(plaintext)}')
    unpermuted_ct, pt_pos = box_permute_decrypt(ciphertext, perm, ct_pos)
    substitution = {}
    for cc, pp in zip(unpermuted_ct, plaintext):
        if pp not in substitution:
            substitution[pp] = cc
        elif substitution[pp] != cc:
            if strict:
                raise ValueError(f'Not a monoalphabetic substitution {pp} -> {cc}, {substitution[pp]}')
            return {}
    return substitution

This exhaustive computational approach is designed to separate structural cryptanalytic evidence from superficial matches produced by high-level machine learning scoring. By testing millions of name candidates against a well-defined set of permutations and substitution patterns, the notebook framework attempts to identify names that are structurally compatible with the cipher before any historical or circumstantial filtering.

Despite the sophistication of these coded approaches and the enthusiasm they generate within parts of the true-crime community, experienced cryptanalysts and commentators have expressed deep skepticism regarding the Marvin Merrill conclusion, citing structural analytical reasons. A prominent evaluation points out that under basic substitution assumptions — where one symbol maps to one letter — any valid solution must respect specific symbol repeat positions inherent in the cipher text. These repeat patterns constrain the pattern of equal letters in the plaintext. When the proposed plaintext “MARVIN MERRILL” is tested against these positional constraints, it does not match the cipher’s fixed repeat structure. Since that structural requirement is fundamental, any proposed solution that fails it cannot be correct under the assumed cipher model.

This skepticism is amplified by the widely acknowledged fact that Z13 is mathematically underdetermined. Because the cipher offers only thirteen symbols, it lacks the statistical richness necessary for traditional frequency analysis to uniquely determine a substitution mapping without substantial external constraints or assumptions. Many cryptographic researchers emphasize that while computational techniques can dramatically reduce the space of candidate plaintexts, they do not, on their own, provide conclusive proof of a solution unless the candidate satisfies all structural constraints derived directly from the ciphertext itself.

The broader academic and independent cryptologic community has also explored alternative frameworks for understanding Z13 that do not rely on heavy assumptions about name lists or permutations. One influential structural analysis treats Z13 not as a standalone cryptogram encoding a name but as a structural remainder of earlier, larger Zodiac ciphers once inherited constraints were exhausted. This perspective reframes the cipher entirely, implying it may not be solvable in isolation and may instead be a byproduct of the design of previous, better-understood systems. Other independent analyses have proposed that Z13 might encode different phrases under non-standard reading assumptions, highlighting the diversity of approaches researchers have explored in nearly five decades of study.

Despite the technical debate, the Marvin Merrill hypothesis has gained traction in popular narratives and media coverage, partly because it offers a narrative coherence that ties a computational claim to a historical suspect involved in another infamous unsolved murder. Articles covering the story emphasize the interdisciplinary ambition of the claim, linking cryptographic evidence with historical and contextual clues. However, law enforcement agencies have not publicly validated the interpretation, and the prevailing position among cryptanalysts is that without reproducible, peer-reviewed evidence that uniquely satisfies all structural constraints of the cipher, Z13 remains unresolved.

The debate over Z13 underscores the complexities of cryptographic problem solving in contexts where both the cipher and its author’s intent are unknown. The Zodiac Killer’s previous ciphers were only solved after years of collaborative expert effort, and even then provided more ambiguity than clarity about the killer’s identity. In the case of Z13, the short length, lack of known key material, and absence of confirmatory plaintext means that proposed solutions must be treated with caution, and that cryptologists emphasize the necessity of structural validity and reproducibility over coincidental matching.

In conclusion, the recent claim that the Zodiac’s Z13 cipher decodes to Marvin Merrill represents a bold synthesis of modern AI techniques, classical cryptanalysis methods, and historical investigation. The technical approaches involved — particularly the foundational structural analysis visible in independent code frameworks — show how computational tools and structural reasoning can dramatically reduce the space of plausible plaintexts. At the same time, evaluations by seasoned cryptanalysts and the inherent limitations of such a short cipher indicate that the Marvin Merrill solution does not yet satisfy the essential criteria required for a definitive decryption. The Z13 cipher continues to hold its mysteries, and while new tools and perspectives can illuminate possible patterns, the broader cryptographic and forensic communities generally regard it as still unresolved pending publicly verifiable evidence that aligns with the cipher’s internal structure rather than external narrative fitting.