<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.36 (Ruby 4.0.1) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-condrey-cfrg-posme-00" category="info" submissionType="IRTF" tocDepth="4" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="PoSME">Proof of Sequential Memory Execution (PoSME)</title>
    <seriesInfo name="Internet-Draft" value="draft-condrey-cfrg-posme-00"/>
    <author initials="D." surname="Condrey" fullname="David Condrey">
      <organization abbrev="WritersLogic">WritersLogic Inc</organization>
      <address>
        <postal>
          <city>San Diego</city>
          <region>California</region>
          <country>United States</country>
        </postal>
        <email>david@writerslogic.com</email>
      </address>
    </author>
    <date year="2026" month="April" day="30"/>
    <area>Security</area>
    <workgroup>Crypto Forum Research Group</workgroup>
    <keyword>memory-hard</keyword>
    <keyword>sequential execution</keyword>
    <keyword>causal hash</keyword>
    <keyword>latency-bound</keyword>
    <keyword>ASIC resistance</keyword>
    <abstract>
      <?line 176?>

<t>This document defines Proof of Sequential Memory Execution (PoSME),
a cryptographic primitive combining mutable arena state, data-
dependent pointer-chase addressing, per-block causal hash binding,
and execution entropy entanglement in a single step function. A
Prover executes K sequential steps over a mutable N-block arena.
Each step reads d blocks at addresses determined by the previous
read's result (pointer chasing), writes one block with symbiotic
binding (new data depends on old causal hash; new causal hash
depends on cursor), and advances a transcript chain. At regular
intervals, CPU jitter entropy is folded into the transcript,
binding the proof to physical execution on a general-purpose
system. The construction provides four properties: (1)
unconditional sequential time enforcement (Omega(K) computation
regardless of storage), (2) forgery prevention via causal hashes
(reduces to collision resistance of H), (3) TMTO resistance
scaling linearly with write density rho = K/N (34x penalty at
rho=16 for a zero-storage adversary), and (4) execution-
environment ASIC resistance (the adversary must execute on a
general-purpose CPU with an operating system to produce valid
entropy, limiting the advantage to commodity hardware variation).
A compact parameter profile achieves these properties with
approximately 32 MiB peak RAM. Verification requires O(Q * d^R *
log N) hash evaluations with no arena allocation. No trusted setup
is required.</t>
    </abstract>
  </front>
  <middle>
    <?line 203?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Existing primitives for proving sequential computation have
complementary weaknesses. Verifiable Delay Functions (VDFs)
<xref target="Boneh2018"/> <xref target="Wesolowski2019"/> prove sequential time but offer no memory-hardness.
Proofs of Sequential Work (PoSW) <xref target="CohenPietrzak2018"/> prove
traversal of a depth-robust graph but operate over static memory.
Memory-hard functions (MHFs) such as Argon2id <xref target="RFC9106"/> resist
ASIC acceleration but are single-evaluation primitives with no
chain proof system. Composing these (e.g., chaining Argon2id with
Merkle sampling) produces a construction where sequentiality and
memory-hardness are independent properties; neither reinforces the
other.</t>
      <t>PoSME takes a different approach. A persistent mutable arena IS
the computation state. Each step reads via data-dependent pointer
chasing (sequential because each address depends on the previous
read's result) and modifies the arena in-place. A per-block
causal hash chain binds each block's value to the cursor of the
step that wrote it, preventing forgery (the adversary cannot
produce a valid causal hash without knowing the writer's cursor,
which depends on d other blocks' causal hashes, recursively).
The data and causal hash are symbiotically bound: new data
depends on the old causal hash, and the new causal hash depends
on the cursor.</t>
      <t>The primary contribution is latency-bound ASIC resistance. Each
pointer-chase iteration is bottlenecked by random DRAM access
(~45ns on DDR5 <xref target="JESD79-5"/>), with hash computation (~3ns via
BLAKE3) as a minor component. The ASIC advantage is bounded by
the memory latency ratio (approximately 2x for DDR5 vs HBM3),
tighter than the 8-16x bandwidth bounds of Argon2id
<xref target="Biryukov2016"/>. Memory latency improves more slowly than
bandwidth across technology generations (constrained by signal
propagation and DRAM cell sensing time), making this bound more
durable than bandwidth-based resistance.</t>
      <section anchor="related-work">
        <name>Related Work</name>
        <section anchor="proofs-of-sequential-work">
          <name>Proofs of Sequential Work</name>
          <t>PoSW <xref target="CohenPietrzak2018"/> proves traversal of a depth-robust
graph via Fiat-Shamir-sampled Merkle proofs. PoSME differs: the
graph is a mutable arena (not a static DAG), the access pattern
is data-dependent (not fixed), and each node carries a causal hash
binding its value to its full write history.</t>
        </section>
        <section anchor="memory-hard-functions">
          <name>Memory-Hard Functions</name>
          <t>Argon2id <xref target="RFC9106"/> resists TMTO via bandwidth-hardness
<xref target="Boneh2016"/>, with a single-pass TMTO penalty of approximately 2x. PoSME uses Argon2id
only for arena initialization. The ongoing computation uses
pointer-chasing with in-place writes, creating latency-hardness
(2x ASIC bound vs Argon2id's 8-16x). PoSME's TMTO penalty is
approximately 2+2*rho for zero-storage adversaries, where
rho = K/N is the write density (10x at rho=4 vs Argon2id's 2x).</t>
        </section>
        <section anchor="proofs-of-space-time">
          <name>Proofs of Space-Time</name>
          <t>Proofs of Space-Time (PoST) <xref target="Chia2024"/> <xref target="Spacemesh2023"/> enforce both
sequential time and persistent storage by requiring a Prover to
repeatedly prove possession of stored data over a sequence of
time intervals. PoST operates over a static graph: the stored
data does not change between proofs, and the graph structure is
fixed before execution. PoSME differs in that the arena is
mutable (each step modifies it), the access pattern is data-
dependent (addresses are determined by arena contents, not
pre-computed), and each block carries a causal hash binding its
current value to its write history. These differences make PoSME
a different construction with different TMTO characteristics,
not a strict improvement over PoST.</t>
        </section>
        <section anchor="cumulative-memory-complexity">
          <name>Cumulative Memory Complexity</name>
          <t>Alwen, Blocki, and Pietrzak <xref target="AlwenBlockPietrzak2017"/> formalized
cumulative memory complexity for static graph pebbling games.
PoSME's causal dependency DAG is dynamic (edges are created during
execution), requiring a new pebbling framework. The dynamic
pebbling analysis is provided in <xref target="tmto"/>.</t>
        </section>
      </section>
    </section>
    <section anchor="conventions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

<dl>
        <dt>H:</dt>
        <dd>
          <t>BLAKE3 in XOF mode, producing 32-byte output.</t>
        </dd>
        <dt>XOF(input, index):</dt>
        <dd>
          <t>BLAKE3 XOF evaluated at (input || I2OSP(index, 4)),
producing 4 bytes.</t>
        </dd>
        <dt>I2OSP(x, len):</dt>
        <dd>
          <t>Integer-to-Octet-String Primitive per <xref target="RFC8017"/>.</t>
        </dd>
        <dt>MerkleRoot(A):</dt>
        <dd>
          <t>Merkle tree root over arena blocks using domain-separated
hashing per <xref target="RFC6962"/>.</t>
        </dd>
        <dt>MerkleUpdate(root, index, new_value):</dt>
        <dd>
          <t>Incremental Merkle root update at the given index.</t>
        </dd>
        <dt>Prover:</dt>
        <dd>
          <t>The entity executing the PoSME computation and generating proofs.</t>
        </dd>
        <dt>Verifier:</dt>
        <dd>
          <t>The entity checking PoSME proofs.</t>
        </dd>
        <dt>Arena:</dt>
        <dd>
          <t>A mutable array of N blocks, each containing a 32-byte data
field and a 32-byte causal hash.</t>
        </dd>
        <dt>Causal hash:</dt>
        <dd>
          <t>A per-block running hash chain binding each block's value to
the cursor of the step that wrote it.</t>
        </dd>
      </dl>
    </section>
    <section anchor="construction">
      <name>Construction</name>
      <section anchor="block-format">
        <name>Arena Block Format</name>
        <t>Each arena block is a pair:</t>
        <sourcecode type="pseudocode"><![CDATA[
block = {
    data:   bytes[32],
    causal: bytes[32]
}
]]></sourcecode>
        <t>The <tt>data</tt> field stores the block's computational value. The
<tt>causal</tt> field stores the causal hash chain: a running digest
binding the block's current value to the cursor of the step
that last wrote it.</t>
      </section>
      <section anchor="init">
        <name>Arena Initialization</name>
        <t>The arena is initialized deterministically from a public seed s:</t>
        <sourcecode type="pseudocode"><![CDATA[
for i in 0..N-1:
    if i == 0:
        A[0].data = H("PoSME-init-v1" || s || I2OSP(0, 4))
    else:
        A[i].data = H("PoSME-init-v1" || s || I2OSP(i, 4)
                      || A[i-1].data
                      || A[floor(i/2)].data)
    A[i].causal = H("PoSME-causal-v1" || s || I2OSP(i, 4))

root_0 = MerkleRoot(A)
T_0 = H("PoSME-transcript-v1" || s || root_0)
]]></sourcecode>
        <t>The initialization references both the preceding block (A[i-1])
and a logarithmic skip-link (A[floor(i/2)]). This creates a
dependency DAG of depth log(N) and width N, requiring
Omega(sqrt(N)) space to evaluate (the DAG cannot be streamed
in constant space because each block depends on a block
approximately N/2 positions behind it). A custom initialization
is used rather than Argon2id because Argon2id's fixed internal
graph does not provide this skip-link structure; the logarithmic
back-references are necessary for the space-hardness property.</t>
        <t>The Verifier can independently compute root_0 and T_0 from the
seed, providing a trusted anchor for all subsequent verification.</t>
      </section>
      <section anchor="step-function">
        <name>Step Function</name>
        <t>At each step t in {1, ..., K}:</t>
        <sourcecode type="pseudocode"><![CDATA[
STEP(t):
    // 1. Pointer-chase reads (data-dependent)
    cursor = T_{t-1}
    addrs = []
    for j in 0..d-1:
        a = OS2IP(XOF(cursor, j)) mod N
        addrs.append(a)
        val = A[a]
        cursor = H(cursor || val.data || val.causal)

    // 2. Write with symbiotic binding
    w = OS2IP(XOF(cursor, d)) mod N
    old = A[w]
    new_data = H(old.data || cursor || old.causal)
    new_causal = H(old.causal || cursor || I2OSP(t, 4))
    A[w] = {data: new_data, causal: new_causal}

    // 3. Update commitments
    root_t = MerkleUpdate(root_{t-1}, w, A[w])
    T_t = H(T_{t-1} || I2OSP(t, 4) || cursor || root_t)

    // 4. Log step
    log[t] = {addrs, reads, w, old, A[w], cursor, root_t}
]]></sourcecode>
        <section anchor="address-gen">
          <name>Pointer-Chase Addressing</name>
          <t>Read addresses are data-dependent: address j+1 depends on the
value and causal hash of the block read at address j. This creates
a pointer-chasing chain within each step that is inherently
sequential.</t>
        </section>
        <section anchor="symbiotic-binding">
          <name>Symbiotic Binding</name>
          <t>The data update incorporates the old causal hash:</t>
          <sourcecode type="pseudocode"><![CDATA[
new_data = H(old_data || cursor || old_causal)
]]></sourcecode>
          <t>This creates bidirectional dependency: data depends on causal
history, and causal hash depends on cursor (which depends on
data). Neither can be independently fabricated. An adversary
forging data must know old_causal; forging causal must know the
cursor; computing the cursor requires reading d blocks with
their causal hashes.</t>
        </section>
        <section anchor="transcript-chain">
          <name>Transcript Chain</name>
          <t>The transcript chain T_t binds all steps causally:</t>
          <sourcecode type="pseudocode"><![CDATA[
T_t = H(T_{t-1} || I2OSP(t, 4) || cursor || root_t)
]]></sourcecode>
          <t>T_t incorporates root_t (the Merkle root after the write) and
cursor (which depends on the arena state at step t). Computing
T_t requires computing all prior steps.</t>
        </section>
        <section anchor="jitter-entanglement">
          <name>Jitter Entanglement</name>
          <t>At regular intervals during execution, the Prover samples CPU
jitter entropy and folds it into the transcript chain. This binds
the proof to physical execution on a general-purpose system with
an operating system.</t>
          <sourcecode type="pseudocode"><![CDATA[
ENTANGLE(T_t, m, K):
    interval = K / m
    jitter_samples = []

    // At steps t where t mod interval == 0:
    j = sample_cpu_jitter()
    jitter_samples.append((t, j))
    T_t = H("PoSME-entangle-v1" || T_t || j)
]]></sourcecode>
          <t>The jitter source <bcp14>MUST</bcp14> be CPU execution timing variance (e.g.,
rdtsc delta across a calibration loop), not a pseudorandom
generator. CPU jitter arises from instruction pipeline stalls,
cache miss variability, branch misprediction recovery, OS
scheduler preemption, and memory controller contention. These are
emergent properties of general-purpose CPU execution under an
operating system that cannot be replicated by fixed-function
hardware.</t>
          <t>The Prover <bcp14>MUST</bcp14> include at least m = 16 jitter samples in the
proof. The number of samples and the injection interval are
included in the proof and verified.</t>
          <t>The Verifier checks:</t>
          <ol spacing="normal" type="1"><li>
              <t>Each jitter sample is incorporated into the transcript at the
claimed step via the entanglement hash.</t>
            </li>
            <li>
              <t>The jitter samples exhibit sufficient min-entropy (at least 1
bit per sample, measured via the NIST SP 800-90B most common
value estimator).</t>
            </li>
            <li>
              <t>The final transcript T_K depends on all jitter samples.</t>
            </li>
          </ol>
          <t>An adversary using fixed-function hardware (ASIC/FPGA) cannot
produce genuine CPU jitter. Injecting pseudorandom values fails
the min-entropy test when the Verifier cross-checks against the
expected statistical properties of OS scheduling jitter
(quantized intervals, interrupt clustering, sub-microsecond
variance). The adversary's only option is to execute on a
general-purpose CPU with an OS, limiting the hardware advantage
to commodity CPU-to-CPU performance variation (approximately 2x).</t>
        </section>
      </section>
      <section anchor="root-chain">
        <name>Root Chain Commitment</name>
        <t>The Prover commits to the sequence of ALL K arena roots:</t>
        <sourcecode type="pseudocode"><![CDATA[
R = [root_0, root_1, ..., root_K]
C_roots = MerkleRoot(R)
]]></sourcecode>
        <t>This root chain commitment binds the Prover to a specific
sequence of arena states BEFORE Fiat-Shamir challenges are
derived. The challenges depend on (T_K, C_roots), and both
must be fixed before the Prover knows which steps will be
challenged.</t>
      </section>
      <section anchor="proof-gen">
        <name>Proof Generation</name>
        <sourcecode type="pseudocode"><![CDATA[
PROVE(K, Q, R_depth):
    C_roots = MerkleRoot([root_0, ..., root_K])
    challenges = FS(T_K, C_roots, Q)
    proof = {params, T_K, C_roots, step_proofs: []}

    for c in challenges:
        sp = make_step_proof(c, R_depth)
        proof.step_proofs.append(sp)
    return proof

make_step_proof(step, depth):
    sp = {
        step_id: step,
        cursor_in: T_{step-1},
        cursor_out: log[step].cursor,
        root_before: root_{step-1},
        root_after: log[step].root_t,
        root_chain_paths: [
            MerklePath(C_roots, step-1),
            MerklePath(C_roots, step)
        ],
        reads: [],
        write: {addr, old, new,
                merkle_path: MerklePath(root_{step-1}, w)},
        writers: []
    }
    for j in 0..d-1:
        sp.reads.append({
            addr, block, merkle_path:
                MerklePath(root_{step-1}, addr)})
        if depth > 0:
            ws = last_writer(addr, step)
            if ws == 0:
                sp.writers.append({type: "init",
                    init_path: MerklePath(root_0, addr)})
            else:
                sp.writers.append({type: "step",
                    proof: make_step_proof(ws, depth-1)})
        else:
            sp.writers.append({type: "leaf",
                writer_step: last_writer(addr, step),
                merkle_path: MerklePath(
                    root_{ws}, addr)})
    return sp
]]></sourcecode>
      </section>
    </section>
    <section anchor="verification">
      <name>Verification</name>
      <section anchor="verify-procedure">
        <name>Verification Procedure</name>
        <t>The Verifier receives (seed, params, T_K, C_roots, proof):</t>
        <sourcecode type="pseudocode"><![CDATA[
VERIFY(seed, params, T_K, C_roots, proof):
    // 1. Trusted anchor
    root_0 = compute_init_root(seed, params.N)
    T_0 = H("PoSME-transcript-v1" || seed || root_0)

    // 2. Verify root_0 in root chain
    assert MerkleVerify(C_roots, 0, root_0,
                        proof.root_0_path)

    // 3. Recompute challenges
    challenges = FS(T_K, C_roots, params.Q)

    // 4. Verify each challenged step
    for sp in proof.step_proofs:
        verify_step(sp, C_roots, root_0, params)

verify_step(sp, C_roots, root_0, params):
    // A. Verify roots are in the root chain
    assert MerkleVerify(C_roots, sp.step_id - 1,
                        sp.root_before,
                        sp.root_chain_paths[0])
    assert MerkleVerify(C_roots, sp.step_id,
                        sp.root_after,
                        sp.root_chain_paths[1])

    // B. Verify read Merkle proofs
    for j in 0..d-1:
        assert MerkleVerify(sp.root_before,
            sp.reads[j].addr, sp.reads[j].block,
            sp.reads[j].merkle_path)

    // C. Replay pointer-chase
    cursor = sp.cursor_in
    for j in 0..d-1:
        a = OS2IP(XOF(cursor, j)) mod N
        assert a == sp.reads[j].addr
        cursor = H(cursor || sp.reads[j].block.data
                           || sp.reads[j].block.causal)

    // D. Verify symbiotic write
    w = OS2IP(XOF(cursor, d)) mod N
    assert w == sp.write.addr
    assert MerkleVerify(sp.root_before, w,
                        sp.write.old, sp.write.merkle_path)
    assert sp.write.new.data == H(sp.write.old.data
                                   || cursor
                                   || sp.write.old.causal)
    assert sp.write.new.causal == H(sp.write.old.causal
                                     || cursor
                                     || I2OSP(sp.step_id, 4))

    // E. Verify Merkle root update
    assert sp.root_after == MerkleUpdate(
        sp.root_before, w, sp.write.new)

    // F. Compute and store transcript value for cross-check
    T_c = H(sp.cursor_in || I2OSP(sp.step_id, 4)
            || cursor || sp.root_after)
    // If another challenged step c' has cursor_in == T_c,
    // verify they match. If sp.step_id == K, verify
    // T_c == T_K (the public final transcript).
    stored_transcripts[sp.step_id] = T_c

    // G. Recursive causal provenance
    for j in 0..d-1:
        verify_writer(sp.writers[j], sp.reads[j],
                      C_roots, root_0, params)
]]></sourcecode>
      </section>
      <section anchor="verify-cost">
        <name>Verification Cost</name>
        <t>For Q challenges with recursion depth R:</t>
        <ul spacing="normal">
          <li>
            <t>Root chain proofs: O(Q * log K) per challenged step</t>
          </li>
          <li>
            <t>Arena Merkle proofs: O(Q * d^R * log N)</t>
          </li>
          <li>
            <t>Cursor replays: O(Q * d^R * d)</t>
          </li>
          <li>
            <t>No arena memory allocation</t>
          </li>
        </ul>
        <t>For Q=128, d=8, R=3, N=2^24, K=4*N=2^26:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Operation</th>
              <th align="left">Count</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Root chain verifications</td>
              <td align="left">128 * 2 * 26 = ~6.7K hashes</td>
            </tr>
            <tr>
              <td align="left">Arena Merkle verifications</td>
              <td align="left">128 * 512 * 24 = ~1.6M hashes</td>
            </tr>
            <tr>
              <td align="left">Cursor replays</td>
              <td align="left">128 * 512 * 8 = ~524K hashes</td>
            </tr>
            <tr>
              <td align="left">Total</td>
              <td align="left">~2.1M hashes, ~6ms</td>
            </tr>
          </tbody>
        </table>
        <t>The ~6ms estimate assumes a modern desktop CPU (~350M BLAKE3
hashes/second). On constrained platforms (mobile: 60-300ms;
WASM: 120ms-600ms), verification is slower but still practical.
No memory allocation beyond the proof data is required.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Analysis</name>
      <section anchor="threat-model">
        <name>Threat Model</name>
        <t>The adversary is a probabilistic polynomial-time algorithm with
random oracle access to H. The adversary receives the public
seed s and parameters (N, K, d, Q, R). Its goal is to produce
(T_K, C_roots, proof) that passes VERIFY (<xref target="verify-procedure"/>)
while either:</t>
        <ol spacing="normal" type="1"><li>
            <t><strong>Forgery:</strong> producing T_K' != T_K (the honestly computed
transcript), or</t>
          </li>
          <li>
            <t><strong>Space reduction:</strong> using less than N * B bits of arena
storage at some point during computation.</t>
          </li>
        </ol>
        <t>The adversary may use custom hardware with faster memory (lower
latency) than the honest Prover. The ASIC resistance analysis
(<xref target="asic-resistance"/>) bounds the resulting speedup.</t>
      </section>
      <section anchor="soundness">
        <name>Forgery Prevention</name>
        <t>The causal hash mechanism prevents block value fabrication.
To forge a block's causal hash, the adversary needs the cursor
of the step that wrote it. That cursor depends on d blocks read
at the writer step, each with their own causal hashes requiring
their own writers' cursors, recursively. Symbiotic binding
strengthens this: forging data requires old_causal, and forging
old_causal requires the prior writer's cursor. Neither field
can be independently fabricated.</t>
        <t>The root chain commitment (<xref target="root-chain"/>) binds the Prover to
ALL K arena roots before challenges are derived. C_roots is an
input to the Fiat-Shamir challenge derivation, so the Prover
cannot fabricate roots after seeing challenges.</t>
        <t><strong>Theorem 1 (Soundness).</strong> Any adversary producing
(T_K', C_roots', proof') with T_K' != T_K that passes VERIFY
has advantage at most K * epsilon_cr, where epsilon_cr is the
collision-finding advantage against H.</t>
        <t><strong>Proof sketch.</strong> If verification passes with T_K' != T_K, there
exists a step c where T_{c-1}' = T_{c-1} but T_c' != T_c (the
first divergence). At step c, the Verifier checks that T_c =
H(T_{c-1} || c || cursor || root_c). If the adversary's
inputs differ from the honest inputs but produce the same T_c,
this is a collision in H. If the adversary's inputs differ and
produce a different T_c, then T_c' != T_c, contradicting
acceptance. The adversary has K steps at which to attempt this,
giving the union bound K * epsilon_cr.</t>
        <t>A full derivation is provided in the companion
analysis (to appear as IACR ePrint).</t>
      </section>
      <section anchor="recomp-cost">
        <name>Recomputation Cost</name>
        <t>Separately from forgery prevention, causal hashes impose a
constant-factor increase on the cost of recomputing missing
blocks. Without causal hashes, an adversary recomputing a
missing block traverses its write chain at cost O(rho) hashes
(one per write in the chain). With causal hashes, the adversary
must traverse both the data chain and the causal chain, doubling
the cost to O(2*rho) per miss.</t>
        <t>This is a MODERATE improvement: a 2x constant factor on write
chain traversal, not an exponential blowup. The TMTO penalty
table in <xref target="tmto"/> incorporates this factor. The causal hash
mechanism's primary contribution is soundness (<xref target="soundness"/>),
not TMTO amplification.</t>
      </section>
      <section anchor="tmto">
        <name>TMTO Lower Bound</name>
        <t>An adversary storing alpha * N blocks faces a two-layer penalty:</t>
        <section anchor="sequential-floor">
          <name>Sequential Floor</name>
          <t>The transcript chain T_0 through T_K must be computed
sequentially to produce T_K before Fiat-Shamir challenges are
derived. This is an Omega(K) lower bound regardless of storage.</t>
        </section>
        <section anchor="write-density">
          <name>Write Density and Arena Coverage</name>
          <t>Each step writes 1 block at a uniformly random address (in the
ROM). After K steps, the fraction of blocks written at least once
is phi = 1 - e^{-rho}, where rho = K/N is the write density.</t>
          <t>A block that was never written retains its initialization value,
recomputable in O(1) from the seed. Only written blocks require
write chain traversal for recomputation. The expected write chain
length for a modified block is rho, costing O(rho) hashes.</t>
          <table>
            <thead>
              <tr>
                <th align="left">rho = K/N</th>
                <th align="left">Blocks modified</th>
                <th align="left">Recomp cost/miss</th>
                <th align="left">alpha=0 TMTO ratio</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">0.25</td>
                <td align="left">22%</td>
                <td align="left">O(1)</td>
                <td align="left">2.5x</td>
              </tr>
              <tr>
                <td align="left">1</td>
                <td align="left">63%</td>
                <td align="left">O(1)</td>
                <td align="left">4x</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">98%</td>
                <td align="left">O(4)</td>
                <td align="left">10x</td>
              </tr>
              <tr>
                <td align="left">16</td>
                <td align="left">~100%</td>
                <td align="left">O(16)</td>
                <td align="left">34x</td>
              </tr>
            </tbody>
          </table>
          <t>K <bcp14>MUST</bcp14> be at least N (rho &gt;= 1) for meaningful TMTO resistance.
Values of rho &gt;= 4 are <bcp14>RECOMMENDED</bcp14>.</t>
        </section>
        <section anchor="per-step-recomputation-cost">
          <name>Per-Step Recomputation Cost</name>
          <t><strong>Theorem 2 (TMTO).</strong> In the random oracle model, any adversary
storing alpha * N arena blocks and all K cursors (K * 32 bytes)
performs expected computation at least:</t>
          <sourcecode type="artwork"><![CDATA[
T_adv >= K * d * (1 + (1-alpha) * (2*rho + 1))
]]></sourcecode>
          <t>giving a TMTO ratio of T_adv / T_honest &gt;= 1 + (1-alpha) * (2*rho + 1).</t>
          <t><strong>Proof sketch.</strong> The adversary computes the K-step transcript
chain (Theorem 1 of the companion analysis: Omega(K) sequential
floor). At each step, d blocks are read at addresses uniform in
[N] (random oracle property). Each read misses the stored set
with probability 1-alpha. Each miss requires traversing the
block's write chain (expected length rho) for both data and
causal hash, costing 2*rho + 1 hashes. The per-step cost is
d * (1 + (1-alpha) * (2*rho + 1)). Summing over K steps gives
the bound.</t>
          <t>This bound assumes optimal cursor storage (adversary stores all
K cursors). A full derivation and optimality analysis for
alternative cursor strategies is provided in the companion
analysis (to appear as IACR ePrint).</t>
          <table>
            <thead>
              <tr>
                <th align="left">rho = K/N</th>
                <th align="left">alpha=0 penalty</th>
                <th align="left">alpha=0.5 penalty</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">1</td>
                <td align="left">4x</td>
                <td align="left">2.5x</td>
              </tr>
              <tr>
                <td align="left">4</td>
                <td align="left">10x</td>
                <td align="left">5.5x</td>
              </tr>
              <tr>
                <td align="left">16</td>
                <td align="left">34x</td>
                <td align="left">17.5x</td>
              </tr>
            </tbody>
          </table>
          <t>The penalty scales linearly with rho.</t>
          <t>This bound assumes the adversary stores all K cursors
(K * 32 bytes; 512 MiB for K = 2^26). Storing all cursors is
optimal for the adversary: it eliminates the need for sequential
replay from checkpoints. An adversary who stores cursors at
intervals of L steps instead pays an additional L * d *
(1 + (1-alpha) * (2*rho + 1)) hashes per cursor miss. Sparse
cursor storage strictly increases the adversary's cost; the
bound above is a LOWER bound on the TMTO penalty.</t>
        </section>
        <section anchor="pebbling-game">
          <name>Dynamic Pebbling Game</name>
          <t>PoSME's causal DAG is dynamic: edges are created during
execution based on data-dependent addressing. In the random
oracle model, each step creates d edges to uniformly random
targets. The pebbling game:</t>
          <ol spacing="normal" type="1"><li>
              <t>N block nodes (arena) and K step nodes.</t>
            </li>
            <li>
              <t>At step t, the game reveals d random read addresses.</t>
            </li>
            <li>
              <t>To execute step t, the adversary must have pebbles on all
d read addresses (stored or recomputed at cost O(rho)).</t>
            </li>
            <li>
              <t>The adversary maintains auxiliary state (cursors, write
index) of at most K * 32 bytes.</t>
            </li>
          </ol>
          <t>Any adversary storing alpha * N blocks and all K cursors
performs expected computation:</t>
          <sourcecode type="artwork"><![CDATA[
T_adv >= K * d * (1 + (1-alpha) * (2*rho + 1))
]]></sourcecode>
          <t>The honest cost is K * d. The TMTO ratio is
1 + (1-alpha) * (2*rho + 1). For alpha=0, rho=4:
the adversary pays 10x honest cost. The penalty is LINEAR
in rho, not exponential.</t>
        </section>
      </section>
      <section anchor="asic-resistance">
        <name>ASIC Resistance</name>
        <t>PoSME is designed to be latency-dominated: hash computation
constitutes less than 10% of per-step cost, making the
bottleneck memory random-access latency rather than computation
throughput. This is a structural property of the construction
(it holds for any instantiation where H is significantly faster
than a DRAM random read).</t>
        <t>The specific advantage ratio depends on the memory technology
available to the adversary. Current measurements:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Component</th>
              <th align="left">Consumer DDR5</th>
              <th align="left">ASIC (HBM3)</th>
              <th align="left">Ratio</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Memory read</td>
              <td align="left">~45ns</td>
              <td align="left">~20ns</td>
              <td align="left">2.25x</td>
            </tr>
            <tr>
              <td align="left">BLAKE3 hash</td>
              <td align="left">~3ns</td>
              <td align="left">~0.3ns</td>
              <td align="left">10x</td>
            </tr>
            <tr>
              <td align="left">
                <strong>Total</strong></td>
              <td align="left">
                <strong>~48ns</strong></td>
              <td align="left">
                <strong>~20.3ns</strong></td>
              <td align="left">
                <strong>~2.4x</strong></td>
            </tr>
          </tbody>
        </table>
        <t>These are empirical values for 2024-era memory technology, not
formal bounds. The approximately 2x ratio reflects the current
DDR5-to-HBM3 latency gap <xref target="JESD79-5"/> <xref target="JESD238"/>. With aggressive
controller optimization: up to 3x.</t>
        <t>An adversary with on-die SRAM (~1-5ns access) could cache a
fraction of hot blocks. However, with 1 GiB arena and typical
ASIC SRAM budgets (8-32 MiB), the SRAM hit rate for uniform
random addresses is 0.8-3.1%, providing negligible benefit.
Larger SRAM allocations are economically prohibitive (1 GiB of
on-die SRAM costs orders of magnitude more than 1 GiB of DRAM).</t>
        <t>For comparison, bandwidth-hard constructions (Argon2id) have
empirical ASIC advantage of 8-16x <xref target="Biryukov2016"/>
          <xref target="RenDevadas2017"/>. The structural argument for PoSME's
durability: memory latency is constrained by DRAM cell sensing
time and signal propagation, which improve more slowly than
bandwidth (wider buses, more channels) across technology
generations.</t>
      </section>
      <section anchor="sequentiality">
        <name>Sequentiality</name>
        <t>Intra-step: The d reads form a pointer-chasing chain; read j+1's
address depends on read j's result.</t>
        <t>Inter-step: T_t feeds into address generation for step t+1.</t>
        <t>Together: K * d sequential memory accesses, each bottlenecked
by DRAM latency.</t>
      </section>
    </section>
    <section anchor="wire-format">
      <name>Wire Format</name>
      <t>The PoSME proof is encoded in CBOR <xref target="RFC8949"/> per <xref target="RFC8610"/>:</t>
      <sourcecode type="cddl"><![CDATA[
posme-proof = {
    1 => posme-params,
    2 => bstr .size 32,           ; final-transcript (T_K)
    3 => bstr .size 32,           ; root-chain-commitment
    4 => [+ step-proof],          ; challenged-steps
    ? 5 => [+ jitter-sample],    ; jitter entanglement (REQUIRED if N < 2^20)
}

jitter-sample = {
    1 => uint,                    ; step-id (injection point)
    2 => bstr .size 32,           ; jitter-value
}

posme-params = {
    1 => uint,                    ; arena-blocks (N)
    2 => uint,                    ; total-steps (K)
    3 => uint,                    ; reads-per-step (d)
    4 => uint,                    ; challenges (Q)
    5 => uint,                    ; recursion-depth (R)
}

step-proof = {
    1 => uint,                    ; step-id
    2 => bstr .size 32,           ; cursor-in
    3 => bstr .size 32,           ; cursor-out
    4 => bstr .size 32,           ; root-before
    5 => bstr .size 32,           ; root-after
    6 => [+ bstr .size 32],       ; root-chain-paths
    7 => [+ read-witness],        ; reads
    8 => write-witness,           ; write
    9 => [* writer-proof],        ; recursive provenance
}

read-witness = {
    1 => uint,                    ; address
    2 => bstr .size 32,           ; data
    3 => bstr .size 32,           ; causal-hash
    4 => [+ bstr .size 32],       ; merkle-path
}

write-witness = {
    1 => uint,                    ; address
    2 => bstr .size 32,           ; old-data
    3 => bstr .size 32,           ; old-causal
    4 => bstr .size 32,           ; new-data
    5 => bstr .size 32,           ; new-causal
    6 => [+ bstr .size 32],       ; merkle-path
}

writer-proof = {
    1 => uint,                    ; type (0=init, 1=step, 2=leaf)
    ? 2 => uint,                  ; writer-step-id
    ? 3 => step-proof,            ; recursive step proof
    ? 4 => [+ bstr .size 32],     ; merkle-path
}
]]></sourcecode>
    </section>
    <section anchor="parameters">
      <name>Parameters</name>
      <section anchor="proof-size-opt">
        <name>Proof Size Optimization</name>
        <t>The recursion depth R and challenge count Q present a direct tradeoff
between security margin and proof size. Table 6 provides concrete MiB-
per-proof costs for implementers.</t>
        <table>
          <thead>
            <tr>
              <th align="left">Recursion (R)</th>
              <th align="left">Challenges (Q)</th>
              <th align="left">Blocks (B)</th>
              <th align="left">Size (MiB)</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">2</td>
              <td align="left">64</td>
              <td align="left">81</td>
              <td align="left">3.9</td>
            </tr>
            <tr>
              <td align="left">2</td>
              <td align="left">128</td>
              <td align="left">81</td>
              <td align="left">7.9</td>
            </tr>
            <tr>
              <td align="left">
                <strong>3</strong></td>
              <td align="left">
                <strong>64</strong></td>
              <td align="left">
                <strong>657</strong></td>
              <td align="left">
                <strong>32.1</strong></td>
            </tr>
            <tr>
              <td align="left">3</td>
              <td align="left">128</td>
              <td align="left">657</td>
              <td align="left">64.2</td>
            </tr>
          </tbody>
        </table>
        <t>While R=3 yields significantly larger proofs, it provides
exponentially higher fabrication resistance by checking the witnesses
of the writers' writers. For bandwidth-constrained environments (e.g.,
light clients), R=2 with Q=128 offers a compact ~8 MiB proof while
maintaining high confidence.</t>
      </section>
      <section anchor="recommended-params">
        <name>Recommended Parameters</name>
        <t>PoSME's security properties have different parameter dependencies.
TMTO resistance (<xref target="tmto"/>) depends on the write density rho = K/N
and is independent of arena size. ASIC resistance can be achieved
through two complementary mechanisms: (a) arena size exceeding the
adversary's fastest memory (<xref target="asic-resistance"/>), or (b) mandatory
jitter entanglement requiring a general-purpose CPU with an OS
(<xref target="jitter-entanglement"/>). Applications <bcp14>SHOULD</bcp14> select parameters
based on their threat model.</t>
        <section anchor="n-vs-rho">
          <name>Design Trade-off: N vs rho</name>
          <t>Arena size N and write density rho = K/N are independent knobs
controlling different security properties:</t>
          <ul spacing="normal">
            <li>
              <t>N controls latency-bound ASIC resistance: the arena must exceed
the adversary's fastest accessible memory (L3 cache, SRAM).
Larger N requires more Prover RAM.</t>
            </li>
            <li>
              <t>rho controls TMTO resistance: penalty = 1 + (1-alpha)(2*rho+1)
for an adversary storing alpha*N blocks. Higher rho requires
more steps (longer wall time) but no additional RAM.</t>
            </li>
          </ul>
          <t>For applications where ASIC resistance is provided by jitter
entanglement (<xref target="jitter-entanglement"/>) rather than arena size,
N can be reduced while rho is increased. This yields strictly
superior TMTO resistance with dramatically lower RAM. The
Compact profile exploits this trade-off.</t>
        </section>
        <section anchor="param-profiles">
          <name>Parameter Profiles</name>
          <t>Four profiles are defined. All profiles share fixed parameters:
block size B = 64 bytes, reads per step d = 8, hash function H =
BLAKE3. Jitter entanglement (<xref target="jitter-entanglement"/>) is <bcp14>REQUIRED</bcp14>
for the Compact profile and <bcp14>RECOMMENDED</bcp14> for all profiles.</t>
          <table>
            <thead>
              <tr>
                <th align="left">Profile</th>
                <th align="left">N</th>
                <th align="left">Arena</th>
                <th align="left">rho</th>
                <th align="left">K</th>
                <th align="left">Q</th>
                <th align="left">R</th>
                <th align="left">Peak RAM</th>
                <th align="left">TMTO</th>
                <th align="left">Use Case</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Compact</td>
                <td align="left">2^18</td>
                <td align="left">16 MiB</td>
                <td align="left">16</td>
                <td align="left">16*N</td>
                <td align="left">64</td>
                <td align="left">2</td>
                <td align="left">~32 MiB</td>
                <td align="left">34x</td>
                <td align="left">Attestation, mobile, resource-constrained</td>
              </tr>
              <tr>
                <td align="left">Standard</td>
                <td align="left">2^20</td>
                <td align="left">64 MiB</td>
                <td align="left">4</td>
                <td align="left">4*N</td>
                <td align="left">64</td>
                <td align="left">2</td>
                <td align="left">~128 MiB</td>
                <td align="left">10x</td>
                <td align="left">General attestation, Sybil resistance</td>
              </tr>
              <tr>
                <td align="left">Enhanced</td>
                <td align="left">2^22</td>
                <td align="left">256 MiB</td>
                <td align="left">4</td>
                <td align="left">4*N</td>
                <td align="left">128</td>
                <td align="left">3</td>
                <td align="left">~512 MiB</td>
                <td align="left">10x</td>
                <td align="left">High-assurance with latency-bound ASIC resistance</td>
              </tr>
              <tr>
                <td align="left">Maximum</td>
                <td align="left">2^24</td>
                <td align="left">1 GiB</td>
                <td align="left">4</td>
                <td align="left">4*N</td>
                <td align="left">128</td>
                <td align="left">3</td>
                <td align="left">~2 GiB</td>
                <td align="left">10x</td>
                <td align="left">Consensus, mining, custom hardware adversaries</td>
              </tr>
            </tbody>
          </table>
          <t>The Compact profile uses a small, cache-resident arena with high
write density. Because the arena fits in L3 cache, per-step
latency is lower (~300 ns vs ~2750 ns), but TMTO resistance is
3.4x stronger than the Maximum profile (34x vs 10x). ASIC
resistance is provided by mandatory jitter entanglement rather
than arena size: any adversary must execute on a general-purpose
CPU with an OS to produce valid entropy samples, limiting the
hardware advantage to commodity CPU-to-CPU variation (~2x).</t>
          <t>The Compact profile's rho <bcp14>MAY</bcp14> be increased beyond 16 for stronger
TMTO at the cost of additional wall time:</t>
          <table>
            <thead>
              <tr>
                <th align="left">rho</th>
                <th align="left">TMTO (alpha=0)</th>
                <th align="left">K (N=2^18)</th>
                <th align="left">Wall time (~300 ns/step)</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">16</td>
                <td align="left">34x</td>
                <td align="left">4.2M</td>
                <td align="left">~1.3 seconds</td>
              </tr>
              <tr>
                <td align="left">64</td>
                <td align="left">130x</td>
                <td align="left">16.8M</td>
                <td align="left">~5 seconds</td>
              </tr>
              <tr>
                <td align="left">256</td>
                <td align="left">514x</td>
                <td align="left">67M</td>
                <td align="left">~20 seconds</td>
              </tr>
            </tbody>
          </table>
          <t>The Standard and Enhanced profiles exceed consumer L3 caches
(16-36 MiB as of 2024) and provide latency-bound ASIC resistance
via arena size. The Maximum profile (1 GiB) exceeds all current
L3 caches and limits GPU throughput via the capacity-bandwidth
bound.</t>
        </section>
        <section anchor="memory-budget">
          <name>Memory Budget</name>
          <t>The Prover's peak memory comprises three components:</t>
          <table>
            <thead>
              <tr>
                <th align="left">Component</th>
                <th align="left">Size</th>
                <th align="left">Notes</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Arena</td>
                <td align="left">N * 64 bytes</td>
                <td align="left">Required for computation</td>
              </tr>
              <tr>
                <td align="left">Merkle tree</td>
                <td align="left">2 * N * 32 bytes</td>
                <td align="left">Required for root updates</td>
              </tr>
              <tr>
                <td align="left">Root chain</td>
                <td align="left">(K + 1) * 32 bytes</td>
                <td align="left">Sequential; <bcp14>MAY</bcp14> be streamed to disk</td>
              </tr>
            </tbody>
          </table>
          <t>The root chain is written sequentially during pass 1 and read
sequentially during pass 2. Implementations <bcp14>MAY</bcp14> stream the root
chain to persistent storage to reduce peak RAM by K * 32 bytes,
at the cost of additional I/O.</t>
          <t>Peak RAM by profile (with root chain streaming):</t>
          <table>
            <thead>
              <tr>
                <th align="left">Profile</th>
                <th align="left">Arena + Merkle</th>
                <th align="left">Root chain (disk)</th>
                <th align="left">Peak RAM</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Compact</td>
                <td align="left">32 MiB</td>
                <td align="left">128 MiB</td>
                <td align="left">~32 MiB</td>
              </tr>
              <tr>
                <td align="left">Standard</td>
                <td align="left">128 MiB</td>
                <td align="left">128 MiB</td>
                <td align="left">~128 MiB</td>
              </tr>
              <tr>
                <td align="left">Enhanced</td>
                <td align="left">512 MiB</td>
                <td align="left">512 MiB</td>
                <td align="left">~512 MiB</td>
              </tr>
              <tr>
                <td align="left">Maximum</td>
                <td align="left">2 GiB</td>
                <td align="left">2 GiB</td>
                <td align="left">~2 GiB</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="param-validation">
        <name>Parameter Validation</name>
        <t>Verifiers <bcp14>MUST</bcp14> reject proofs with parameters below these minimums:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">Minimum</th>
              <th align="left">Rationale</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">N</td>
              <td align="left">2^18</td>
              <td align="left">Below this, arena is too small for meaningful pointer-chase depth</td>
            </tr>
            <tr>
              <td align="left">K</td>
              <td align="left">N</td>
              <td align="left">Below N, most blocks are never written; TMTO is trivial</td>
            </tr>
            <tr>
              <td align="left">K/N (rho)</td>
              <td align="left">4</td>
              <td align="left">Below this, TMTO penalty &lt; 10x</td>
            </tr>
            <tr>
              <td align="left">d</td>
              <td align="left">4</td>
              <td align="left">Below this, causal fan-out is insufficient</td>
            </tr>
            <tr>
              <td align="left">Q</td>
              <td align="left">64</td>
              <td align="left">Below this, detection probability &lt; 2^{-64}</td>
            </tr>
            <tr>
              <td align="left">R</td>
              <td align="left">2</td>
              <td align="left">Below this, causal verification is shallow</td>
            </tr>
          </tbody>
        </table>
        <t>When N &lt; 2^20 (arena fits in consumer L3 cache), jitter
entanglement (<xref target="jitter-entanglement"/>) is <bcp14>REQUIRED</bcp14>. The Verifier
<bcp14>MUST</bcp14> reject proofs with N &lt; 2^20 that do not include valid jitter
samples.</t>
      </section>
      <section anchor="performance">
        <name>Performance Estimates</name>
        <t>The following properties are machine-independent:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Property</th>
              <th align="left">Compact</th>
              <th align="left">Standard</th>
              <th align="left">Maximum</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">TMTO penalty (alpha=0)</td>
              <td align="left">34x</td>
              <td align="left">10x</td>
              <td align="left">10x</td>
            </tr>
            <tr>
              <td align="left">ASIC resistance mechanism</td>
              <td align="left">Jitter</td>
              <td align="left">Arena + Jitter</td>
              <td align="left">Arena</td>
            </tr>
            <tr>
              <td align="left">Proof size</td>
              <td align="left">~3.9 MiB</td>
              <td align="left">~3.9 MiB</td>
              <td align="left">~64 MiB</td>
            </tr>
          </tbody>
        </table>
        <t>Reference timings (Apple M-series, DDR5; will vary by hardware):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Profile</th>
              <th align="left">Per-step</th>
              <th align="left">Wall time</th>
              <th align="left">Prover peak RAM</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Compact (16 MiB, rho=16)</td>
              <td align="left">~300 ns</td>
              <td align="left">~1.3 seconds</td>
              <td align="left">~32 MiB</td>
            </tr>
            <tr>
              <td align="left">Compact (16 MiB, rho=256)</td>
              <td align="left">~300 ns</td>
              <td align="left">~20 seconds</td>
              <td align="left">~32 MiB</td>
            </tr>
            <tr>
              <td align="left">Standard (64 MiB)</td>
              <td align="left">~1500 ns</td>
              <td align="left">~6 seconds</td>
              <td align="left">~128 MiB</td>
            </tr>
            <tr>
              <td align="left">Enhanced (256 MiB)</td>
              <td align="left">~2200 ns</td>
              <td align="left">~37 seconds</td>
              <td align="left">~512 MiB</td>
            </tr>
            <tr>
              <td align="left">Maximum (1 GiB)</td>
              <td align="left">~2750 ns</td>
              <td align="left">~185 seconds</td>
              <td align="left">~2 GiB (disk)</td>
            </tr>
          </tbody>
        </table>
        <t>Verifier time is independent of profile (depends on Q, d, R, N):</t>
        <table>
          <thead>
            <tr>
              <th align="left">Metric</th>
              <th align="left">Compact/Standard</th>
              <th align="left">Enhanced/Maximum</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Desktop</td>
              <td align="left">~2 ms</td>
              <td align="left">~6 ms</td>
            </tr>
            <tr>
              <td align="left">Mobile</td>
              <td align="left">20-100 ms</td>
              <td align="left">60-300 ms</td>
            </tr>
          </tbody>
        </table>
        <t>A reference benchmark with pre-compiled binaries is provided
as ancillary material (anc/README.md).</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="work-vs-time">
        <name>Work vs. Time</name>
        <t>PoSME proves sequential memory execution, not elapsed time. An
adversary with faster memory (lower latency) completes the same
computation in less wall-clock time. The ASIC advantage is bounded
(approximately 2x) but nonzero. Applications requiring temporal
guarantees <bcp14>MUST</bcp14> combine PoSME with an external time-binding
mechanism such as hardware-attested timestamps.</t>
        <t>Hardware-independent time-binding is fundamentally impossible:
deterministic computation produces identical output regardless of
hardware speed, and self-reported timing is forgeable.</t>
      </section>
      <section anchor="seed-requirements">
        <name>Seed Requirements</name>
        <t>The seed <bcp14>MUST</bcp14> be externally fixed or derived from an unpredictable
source. A Prover-controlled seed enables grinding for favorable
arena initializations with reduced effective working sets.</t>
      </section>
      <section anchor="verify-complexity">
        <name>Verification Complexity</name>
        <t>We conjecture that O(1) verification under hash-only assumptions
is not achievable for sequential pointer-chasing computations
of the type PoSME specifies. The verification complexity in this
document is O(Q * d^R * log N). O(log^2 K) verification is
believed achievable via FRI/STARK-based commitment (requiring
field arithmetic but no trusted setup) and is left as a future
optimization. A formal impossibility proof for constant-size
hash-only verification of PoSME remains open.</t>
      </section>
      <section anchor="verifier-limits">
        <name>Verifier Resource Limits</name>
        <t>Verifiers <bcp14>SHOULD</bcp14> implement rate limiting and <bcp14>MUST</bcp14> reject proofs
with parameters exceeding configured thresholds before allocating
resources for verification.</t>
      </section>
      <section anchor="open-problems">
        <name>Open Problems</name>
        <t>The dynamic pebbling game (<xref target="pebbling-game"/>) provides a framework
for TMTO analysis, but a machine-checked proof of the space-time
lower bound remains open. The adversary's optimal caching strategy
(which blocks to store, when to checkpoint) has not been formally
optimized. Block access distribution uniformity under hash-derived
addressing requires formal characterization; skewed distributions
may enable hot-block caching. The tight relationship between
committed step frequency C, write density rho, and the optimal
adversary strategy requires further analysis.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8949">
          <front>
            <title>Concise Binary Object Representation (CBOR)</title>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <date month="December" year="2020"/>
            <abstract>
              <t>The Concise Binary Object Representation (CBOR) is a data format whose design goals include the possibility of extremely small code size, fairly small message size, and extensibility without the need for version negotiation. These design goals make it different from earlier binary serializations such as ASN.1 and MessagePack.</t>
              <t>This document obsoletes RFC 7049, providing editorial improvements, new details, and errata fixes while keeping full compatibility with the interchange format of RFC 7049. It does not create a new version of the format.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="94"/>
          <seriesInfo name="RFC" value="8949"/>
          <seriesInfo name="DOI" value="10.17487/RFC8949"/>
        </reference>
        <reference anchor="RFC9106">
          <front>
            <title>Argon2 Memory-Hard Function for Password Hashing and Proof-of-Work Applications</title>
            <author fullname="A. Biryukov" initials="A." surname="Biryukov"/>
            <author fullname="D. Dinu" initials="D." surname="Dinu"/>
            <author fullname="D. Khovratovich" initials="D." surname="Khovratovich"/>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <date month="September" year="2021"/>
            <abstract>
              <t>This document describes the Argon2 memory-hard function for password hashing and proof-of-work applications. We provide an implementer-oriented description with test vectors. The purpose is to simplify adoption of Argon2 for Internet protocols. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9106"/>
          <seriesInfo name="DOI" value="10.17487/RFC9106"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC6962">
          <front>
            <title>Certificate Transparency</title>
            <author fullname="B. Laurie" initials="B." surname="Laurie"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="E. Kasper" initials="E." surname="Kasper"/>
            <date month="June" year="2013"/>
            <abstract>
              <t>This document describes an experimental protocol for publicly logging the existence of Transport Layer Security (TLS) certificates as they are issued or observed, in a manner that allows anyone to audit certificate authority (CA) activity and notice the issuance of suspect certificates as well as to audit the certificate logs themselves. The intent is that eventually clients would refuse to honor certificates that do not appear in a log, effectively forcing CAs to add all issued certificates to the logs.</t>
              <t>Logs are network services that implement the protocol operations for submissions and queries that are defined in this document.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6962"/>
          <seriesInfo name="DOI" value="10.17487/RFC6962"/>
        </reference>
        <reference anchor="Boneh2018" target="https://doi.org/10.1007/978-3-319-96884-1_25">
          <front>
            <title>Verifiable Delay Functions</title>
            <author initials="D." surname="Boneh" fullname="Dan Boneh">
              <organization/>
            </author>
            <author initials="J." surname="Bonneau" fullname="Joseph Bonneau">
              <organization/>
            </author>
            <author initials="B." surname="Bunz" fullname="Benedikt Bunz">
              <organization/>
            </author>
            <author initials="B." surname="Fisch" fullname="Ben Fisch">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="CRYPTO" value="2018"/>
        </reference>
        <reference anchor="Biryukov2016" target="https://doi.org/10.1109/EuroSP.2016.31">
          <front>
            <title>Argon2: New Generation of Memory-Hard Functions for Password Hashing and Other Applications</title>
            <author initials="A." surname="Biryukov" fullname="Alex Biryukov">
              <organization/>
            </author>
            <author initials="D." surname="Dinu" fullname="Daniel Dinu">
              <organization/>
            </author>
            <author initials="D." surname="Khovratovich" fullname="Dmitry Khovratovich">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="IEEE EuroS&amp;P" value="pp. 292-302"/>
        </reference>
        <reference anchor="CohenPietrzak2018" target="https://doi.org/10.1007/978-3-319-78375-8_15">
          <front>
            <title>Simple Proofs of Sequential Work</title>
            <author initials="B." surname="Cohen" fullname="Bram Cohen">
              <organization/>
            </author>
            <author initials="K." surname="Pietrzak" fullname="Krzysztof Pietrzak">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="EUROCRYPT 2018, LNCS" value="10821, pp. 451-467"/>
        </reference>
        <reference anchor="AlwenBlockPietrzak2017" target="https://doi.org/10.1007/978-3-319-56617-7_1">
          <front>
            <title>Depth-Robust Graphs and Their Cumulative Memory Complexity</title>
            <author initials="J." surname="Alwen" fullname="Joel Alwen">
              <organization/>
            </author>
            <author initials="J." surname="Blocki" fullname="Jeremiah Blocki">
              <organization/>
            </author>
            <author initials="K." surname="Pietrzak" fullname="Krzysztof Pietrzak">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
          <seriesInfo name="EUROCRYPT 2017, LNCS" value="10212, pp. 3-32"/>
        </reference>
        <reference anchor="RenDevadas2017" target="https://doi.org/10.1007/978-3-319-70500-2_16">
          <front>
            <title>Bandwidth Hard Functions for ASIC Resistance</title>
            <author initials="L." surname="Ren" fullname="Ling Ren">
              <organization/>
            </author>
            <author initials="S." surname="Devadas" fullname="Srinivas Devadas">
              <organization/>
            </author>
            <date year="2017"/>
          </front>
          <seriesInfo name="TCC 2017, LNCS" value="10677, pp. 466-492"/>
        </reference>
        <reference anchor="JESD79-5" target="https://www.jedec.org/standards-documents/docs/jesd79-5d">
          <front>
            <title>DDR5 SDRAM Standard</title>
            <author>
              <organization>JEDEC Solid State Technology Association</organization>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="JEDEC" value="JESD79-5D"/>
        </reference>
        <reference anchor="JESD238" target="https://www.jedec.org/standards-documents/docs/jesd238b01">
          <front>
            <title>High Bandwidth Memory (HBM3) DRAM</title>
            <author>
              <organization>JEDEC Solid State Technology Association</organization>
            </author>
            <date year="2022"/>
          </front>
          <seriesInfo name="JEDEC" value="JESD238B01"/>
        </reference>
        <reference anchor="Boneh2016" target="https://doi.org/10.1007/978-3-662-53887-6_8">
          <front>
            <title>Balloon Hashing: A Memory-Hard Function Providing Provable Protection Against Sequential Attacks</title>
            <author initials="D." surname="Boneh" fullname="Dan Boneh">
              <organization/>
            </author>
            <author initials="H." surname="Corrigan-Gibbs" fullname="Henry Corrigan-Gibbs">
              <organization/>
            </author>
            <author initials="S." surname="Schechter" fullname="Stuart Schechter">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="ASIACRYPT" value="2016"/>
        </reference>
        <reference anchor="Chia2024" target="https://docs.chia.net/green-paper-abstract">
          <front>
            <title>The Chia Network Green Paper</title>
            <author>
              <organization>Chia Network</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="Spacemesh2023" target="https://github.com/spacemeshos/protocol">
          <front>
            <title>The Spacemesh Protocol</title>
            <author>
              <organization>Spacemesh Team</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Wesolowski2019" target="https://doi.org/10.1007/978-3-030-17659-4_13">
          <front>
            <title>Efficient Verifiable Delay Functions</title>
            <author initials="B." surname="Wesolowski" fullname="Benjamin Wesolowski">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
          <seriesInfo name="EUROCRYPT" value="2019"/>
        </reference>
      </references>
    </references>
    <?line 1157?>

<section numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>The author thanks the CFRG for foundational work on memory-hard
functions, and the authors of Argon2 for the initialization
primitive used in PoSME.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
B0+Zk+GyogAA

-->

</rfc>
