<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-sullivan-cfrg-raae-03" category="info" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title abbrev="raAE">Random-Access Authenticated Encryption</title>
    <seriesInfo name="Internet-Draft" value="draft-sullivan-cfrg-raae-03"/>
    <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
      <organization>Cryptography Consulting LLC</organization>
      <address>
        <email>nicholas.sullivan+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2026" month="July" day="23"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <abstract>
      <?line 129?>

<t>This document defines random-access authenticated encryption (raAE), a
primitive that partitions a message into an indexed sequence of segments
that can be encrypted and decrypted independently and in any order.  It
also specifies SEAL (Segmented Encryption and Authentication Layer), a
parameterized construction that defines a family of concrete raAE
instantiations, one for each valid choice of an Authenticated Encryption
with Associated Data (AEAD) algorithm, a key derivation function (KDF),
and associated parameters.</t>
      <t>SEAL supports immutable (write-once), append-only, and mutable (in-place
ciphertext rewrite) operations, each with per-segment authentication.  A
separately configured snapshot authenticator can additionally
authenticate the complete, indexed segment set.</t>
      <t>The document also defines the security notions of raAE, specifies the
requirements for conforming constructions, and analyzes SEAL against
those requirements.  Concrete cipher suites, serialization layouts, and
test vectors for SEAL are specified in a companion document.</t>
    </abstract>
    <note removeInRFC="true">
      <name>Discussion Venues</name>
      <t>Discussion of this document takes place on the
    Crypto Forum Research Group mailing list (cfrg@ietf.org),
    which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg"/>.</t>
    </note>
  </front>
  <middle>
    <?line 150?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Large encrypted content is often stored as a sequence of fixed-size
segments, so that an application can read or modify any part of it
without processing the whole.  Encrypted backups, encrypted file
formats, object stores with partial updates, and full-disk encryption
over fixed-size blocks all work this way.  Such a system needs to
encrypt, decrypt, or re-encrypt any individual segment on its own and in
arbitrary order, and to verify that the stored object as a whole is
authentic and complete, without re-encrypting the segments that did not
change.</t>
      <t>This document specifies the raAE primitive (<xref target="raae"/>), whose base
interface and security notions come from Fábrega et al. (<xref target="FLRR25"/>),
and defines SEAL (Segmented Encryption and Authentication Layer), a
parameterized construction of raAE.  The base algorithms encrypt and
decrypt segments in arbitrary order, so a caller can read or replace any
segment on its own.  On top of that base, the extended raAE interface
adds in-place rewrite and a snapshot, a stored value that authenticates
the segment set as the writer last recorded it.  A rewrite re-encrypts
only the changed segment and updates the snapshot, leaving every other
segment untouched.  Appending to the end, or truncating from the end,
composes the same per-segment operations, so the snapshot stays
consistent without a separate algorithm.</t>
      <t>SEAL builds the primitive from a chosen AEAD algorithm, a key derivation
function (KDF), and configuration parameters.  Under a snapshot
authenticator, it binds every segment and the count into a public
snapshot value that an adversary cannot forge without the
content-derived key.</t>
      <figure anchor="fig-overview">
        <name>The raAE primitive and the SEAL construction</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="464" width="520" viewBox="0 0 520 464" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,128 L 8,304" fill="none" stroke="black"/>
              <path d="M 8,384 L 8,432" fill="none" stroke="black"/>
              <path d="M 40,208 L 40,288" fill="none" stroke="black"/>
              <path d="M 120,336 L 120,376" fill="none" stroke="black"/>
              <path d="M 136,32 L 136,80" fill="none" stroke="black"/>
              <path d="M 224,208 L 224,288" fill="none" stroke="black"/>
              <path d="M 240,384 L 240,432" fill="none" stroke="black"/>
              <path d="M 256,88 L 256,120" fill="none" stroke="black"/>
              <path d="M 256,312 L 256,336" fill="none" stroke="black"/>
              <path d="M 264,208 L 264,288" fill="none" stroke="black"/>
              <path d="M 296,384 L 296,432" fill="none" stroke="black"/>
              <path d="M 384,32 L 384,80" fill="none" stroke="black"/>
              <path d="M 392,336 L 392,376" fill="none" stroke="black"/>
              <path d="M 448,208 L 448,288" fill="none" stroke="black"/>
              <path d="M 496,384 L 496,432" fill="none" stroke="black"/>
              <path d="M 512,128 L 512,304" fill="none" stroke="black"/>
              <path d="M 136,32 L 384,32" fill="none" stroke="black"/>
              <path d="M 136,80 L 384,80" fill="none" stroke="black"/>
              <path d="M 8,128 L 512,128" fill="none" stroke="black"/>
              <path d="M 40,208 L 224,208" fill="none" stroke="black"/>
              <path d="M 264,208 L 448,208" fill="none" stroke="black"/>
              <path d="M 40,288 L 224,288" fill="none" stroke="black"/>
              <path d="M 264,288 L 448,288" fill="none" stroke="black"/>
              <path d="M 8,304 L 512,304" fill="none" stroke="black"/>
              <path d="M 120,336 L 392,336" fill="none" stroke="black"/>
              <path d="M 8,384 L 240,384" fill="none" stroke="black"/>
              <path d="M 296,384 L 496,384" fill="none" stroke="black"/>
              <path d="M 8,432 L 240,432" fill="none" stroke="black"/>
              <path d="M 296,432 L 496,432" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="400,376 388,370.4 388,381.6" fill="black" transform="rotate(90,392,376)"/>
              <polygon class="arrowhead" points="264,120 252,114.4 252,125.6" fill="black" transform="rotate(90,256,120)"/>
              <polygon class="arrowhead" points="128,376 116,370.4 116,381.6" fill="black" transform="rotate(90,120,376)"/>
              <g class="text">
                <text x="220" y="52">raAE</text>
                <text x="280" y="52">primitive</text>
                <text x="220" y="68">abstract</text>
                <text x="296" y="68">interface</text>
                <text x="204" y="148">SEAL</text>
                <text x="276" y="148">construction</text>
                <text x="88" y="164">parameterized</text>
                <text x="156" y="164">by</text>
                <text x="176" y="164">a</text>
                <text x="212" y="164">cipher</text>
                <text x="264" y="164">suite</text>
                <text x="312" y="164">(AEAD</text>
                <text x="344" y="164">+</text>
                <text x="376" y="164">KDF),</text>
                <text x="408" y="164">a</text>
                <text x="448" y="164">maximum</text>
                <text x="64" y="180">segment</text>
                <text x="120" y="180">size,</text>
                <text x="160" y="180">and</text>
                <text x="188" y="180">an</text>
                <text x="224" y="180">epoch</text>
                <text x="276" y="180">length</text>
                <text x="104" y="228">mutability:</text>
                <text x="320" y="228">snapshot:</text>
                <text x="96" y="244">immutable</text>
                <text x="300" y="244">none</text>
                <text x="328" y="244">|</text>
                <text x="368" y="244">present</text>
                <text x="104" y="260">append-only</text>
                <text x="88" y="276">mutable</text>
                <text x="308" y="324">provides</text>
                <text x="72" y="404">per-segment</text>
                <text x="172" y="404">authenticity</text>
                <text x="356" y="404">snapshot</text>
                <text x="432" y="404">integrity</text>
                <text x="88" y="420">(always</text>
                <text x="156" y="420">present)</text>
                <text x="360" y="420">(when</text>
                <text x="420" y="420">present)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                   .------------------------------.
                   |        raAE primitive        |
                   |      abstract interface      |
                   '------------------------------'
                                  |
                                  v
   .--------------------------------------------------------------.
   |                      SEAL construction                       |
   |   parameterized by a cipher suite (AEAD + KDF), a maximum    |
   |   segment size, and an epoch length                          |
   |                                                              |
   |   .----------------------.    .----------------------.       |
   |   |  mutability:         |    |  snapshot:           |       |
   |   |  immutable           |    |  none | present      |       |
   |   |  append-only         |    |                      |       |
   |   |  mutable             |    |                      |       |
   |   '----------------------'    '----------------------'       |
   '--------------------------------------------------------------'
                                  |  provides
                 +----------------+----------------+
                 |                                 |
                 v                                 v
   .----------------------------.      .------------------------.
   |  per-segment authenticity  |      |   snapshot integrity   |
   |      (always present)      |      |     (when present)     |
   '----------------------------'      '------------------------'
]]></artwork>
        </artset>
      </figure>
      <t>raAE separates the two authentication scopes that applications often
conflate:</t>
      <dl>
        <dt>Per-segment authenticity:</dt>
        <dd>
          <t>One AEAD tag verifies under the segment index, a finality bit
marking the last segment, and any caller-supplied associated data.
It does not establish that the segment belongs to the current
snapshot.</t>
        </dd>
        <dt>Snapshot integrity:</dt>
        <dd>
          <t>When a snapshot authenticator is configured, snapshot verification
checks that the present segment set and the count are exactly what the
writer last recorded, under a content-derived key.  Verification
targets the whole segment set, and, where the authenticator supports
it, can instead confirm that a designated subset of segments is
included at their recorded positions, without reading the others
(<xref target="snapshot-interface"/>).  It does not establish freshness against
whole-object rollback, which a consuming protocol must supply.</t>
        </dd>
      </dl>
      <t>raAE and SEAL are deliberately distinct layers.  A
consuming protocol supplies serialization, storage transactions, key
management, and rollback protection, which are out of scope here.  The
full boundary of what raAE does not provide is
<xref target="properties-not-provided"/>.</t>
      <t>The remainder of this document presents raAE first and SEAL second.
<xref target="related-work"/> situates raAE against prior segmented
authenticated-encryption (AE) constructions.  <xref target="conventions"/> fixes
terminology and notation.  <xref target="raae"/> specifies the extended raAE
primitive and its snapshot operations.  <xref target="framework"/> defines SEAL.
<xref target="security-properties"/> states the target security properties an raAE
construction must meet, the assumptions SEAL's components must satisfy,
and the operational limits on its use, and defines the security notions.
Cipher suites, serialization layouts, named instantiations, and test
vectors are specified in the companion document
<xref target="I-D.sullivan-seal-concrete"/>.</t>
      <section anchor="related-work">
        <name>Related Work</name>
        <t>CHAIN (<xref target="HRRV15"/>) is a segmented authenticated-encryption construction
that chains state from one segment to the next.  It is sequential by
construction and supports neither independent random-access reads nor
in-place segment rewrites.</t>
        <t>STREAM (<xref target="HRRV15"/>) turns a nonce-based AEAD into a segmented
construction using induced nonces that encode a message nonce, the
segment index, and a final-segment bit.  STREAM supports random-access
decryption and encryption of individual segments, but defines neither
authenticated snapshots nor authenticated rewrites.  SEAL's derived
nonce mode (<xref target="derived-nonces"/>) follows STREAM's counter-plus-final-bit
structure and adds those operations.</t>
        <t>Tink Streaming AEAD (<xref target="Tink"/>) and OpenPGP v2 Symmetrically Encrypted
and Integrity Protected Data (SEIPD) packets (<xref target="RFC9580"/>) are
deployed STREAM-family formats.  Both derive a message key and nonce
prefix from a key and a salt, encrypt each chunk under an AEAD nonce
carrying the chunk index, and detect truncation with a final tag over
the empty string.  Tink derives an AES-GCM key with the HMAC-based Key
Derivation Function (HKDF) (<xref target="RFC5869"/>), while v2 SEIPD selects its
cipher and AEAD from packet identifiers.  Each chunk is
independently authenticated and can be verified locally at its boundary.
Neither format defines an in-place rewrite operation or a snapshot
authenticator over an updatable set of segment tags.</t>
        <t>SEAL's snapshot authenticator addresses exactly that gap.  Its
per-segment input is the segment's metadata leaf, which binds the
segment's content when the segment commitment is set.  It verifies the
whole segment set against the snapshot, and optionally a single segment
(<xref target="snapshot-interface"/>).  A consuming protocol that authenticates the
one snapshot value obtains integrity over the whole segment set and its
count, and, where the segment commitment is set over a strict
ordering, per-segment origin authentication that holds against
holders of the content-encryption key (CEK).</t>
        <t>Fábrega et al. (<xref target="FLRR25"/>) formalized random-access AEAD security over
a raAE primitive syntax in which segment encryption and decryption may
be invoked in arbitrary order, and gave a construction, FLOE (Fast
Lightweight Online Encryption), proved to meet it.  FLOE realizes the
base interface:  segments are written once, and there is no snapshot.
SEAL realizes that primitive with the extension of this document, and
<xref target="raae-security"/> defines the security notions used in its analysis.</t>
        <t>Each precedent covers part of the random-access AE design space.  raAE
is the abstract interface that generalizes the family with three
capabilities none of the precedents combines:  arbitrary-order
encryption, in-place authenticated rewrite, and a snapshot over the
whole segment set.  SEAL realizes all three in one construction.</t>
      </section>
    </section>
    <section anchor="conventions">
      <name>Conventions and Terminology</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?>

<t>A message segment is a unit of plaintext that is individually encrypted
and authenticated.  Segments need not be uniform in length.  A
construction <bcp14>MAY</bcp14> set a maximum segment size, and any segment may be
shorter than that maximum.</t>
      <t>A message is the content that one CEK and salt pair protects, the unit
the primitive encrypts.  An object is that message in stored form: the
ciphertext segments, their metadata, and any snapshot that a storage
layer holds.  Each object carries one message, whose content may change
through rewrite and length-changing operations.</t>
      <t>A ciphertext core is the AEAD encryption output corresponding to one
message segment, excluding file-level headers and external segment
metadata.  An AEAD-specific split divides this output into ct_i, the
encrypted segment body, and tag_i, the authentication tag.</t>
      <t>A ciphertext segment is the stored representation of one encrypted
message segment.  Depending on nonce_mode, it contains the ciphertext
core and may also contain a stored nonce or other per-segment metadata.</t>
      <t>Segment metadata is per-segment information needed to decrypt or verify
a ciphertext segment, such as a stored nonce, tag, finality status, or
profile-defined values.</t>
      <t>This document writes AEAD.Encrypt and AEAD.Decrypt for the authenticated
encryption and decryption operations defined in <xref target="RFC5116"/>.</t>
      <t>Symbol form follows the layer a name belongs to.  The abstract
interface and the analysis use mathematical notation:  a capital
letter is an operand of that interface, either an octet string (K, N,
G, T_g, A_i, M_i, C_i) or the per-message state (S).  A lowercase
letter is an integer index or bound (i, e, p, r).</t>
      <t>N with a lowercase letter is a size that a chosen component fixes
rather than one a deployment picks:  the AEAD (Nk, Nn, Nt, Nb), the
KDF (Nh), the snapshot authenticator (Na), or the nonce mode (Np).
Everything the construction names concretely uses lowercase
snake_case, whatever its type:  octet strings (salt, commitment,
segment_key, ct_i), counts (n_seg, n_ep), lengths a deployment
configures (segment_max, commitment_length), and identifiers, which
take an _id suffix (aead_id, kdf_id, snap_id, protocol_id).</t>
      <t>Names that take arguments follow the same split.  Initialisms are
capitalized (LH, KDF, AEAD, XOF).  The raAE tuple is CamelCase
(KeyGen, StartEnc, EncSeg, StartDec, DecSeg, RewriteSeg, SnapVerify),
while the methods of a component it parameterizes over are lowercase
(snapshot, verify, add, remove, set_length), so a name shows which
interface it belongs to.  Derivations this document defines are
lowercase (encode, frame, leaf, nonce).</t>
      <t>A subscript selects one instance of a value:  X_i is X for the segment
at index i, as in A_i, P_i, ct_i, and tag_i, and d_e is the epoch head
for epoch e.  A value written f(i), as in segment_key(i) or nonce(i),
is the value that the named derivation defines for index i.</t>
      <t>Two suffixes and one prefix recur.  A <em>label suffix is an ASCII
constant that separates one derivation from another (aad_label,
epoch_key_label).  A _calc suffix marks a value recomputed for
comparison against a stored one (d_calc(e), leaf_calc(i)).  An Adv</em>
prefix names an adversary's advantage in the analysis (Adv_snap,
Adv_muPRF).</t>
      <t>The remaining terms (ikm, label, info, L, salt, CEK, protocol_id,
nonce_mode, epoch, epoch_key, payload_key, segment_key, snap_key, and
the commitment) are defined in <xref target="framework"/> where they first appear.</t>
      <section anchor="taxonomy">
        <name>Taxonomy</name>
        <t>This document uses the following terms to keep the raAE primitive, the
SEAL construction, profiles, and consuming protocols distinct.</t>
        <dl>
          <dt>raAE primitive:</dt>
          <dd>
            <t>The abstract random-access AE interface and security target.</t>
          </dd>
          <dt>Extended raAE interface:</dt>
          <dd>
            <t>The base interface plus snapshot maintenance and verification.</t>
          </dd>
          <dt>SEAL construction:</dt>
          <dd>
            <t>The construction specified in <xref target="framework"/>.</t>
          </dd>
          <dt>Cipher suite:</dt>
          <dd>
            <t>The AEAD and KDF algorithms and their sizes.</t>
          </dd>
          <dt>Profile:</dt>
          <dd>
            <t>A named set of fixed parameter choices, identified by a protocol_id,
needed for interoperability.</t>
          </dd>
          <dt>Parameter set:</dt>
          <dd>
            <t>The per-object values that affect derivation and verification.</t>
          </dd>
          <dt>Consuming protocol:</dt>
          <dd>
            <t>The protocol or format that stores objects and manages keys.</t>
          </dd>
          <dt>Serialization:</dt>
          <dd>
            <t>The consuming protocol's wire or storage encoding.</t>
          </dd>
          <dt>Segment:</dt>
          <dd>
            <t>A zero-based independently encrypted plaintext unit.</t>
          </dd>
          <dt>Epoch:</dt>
          <dd>
            <t>A group of 2^epoch_length segment indices sharing one epoch key.</t>
          </dd>
          <dt>Snapshot value:</dt>
          <dd>
            <t>The public value that, when a snapshot authenticator is configured,
authenticates one segment set.</t>
          </dd>
          <dt>Snapshot authenticator:</dt>
          <dd>
            <t>A pluggable SEAL component that produces and verifies the snapshot
value.  Its abstract interface is <xref target="snapshot-interface"/>, and its
concrete instantiations are in <xref target="I-D.sullivan-seal-concrete"/>.</t>
          </dd>
          <dt>Per-segment authenticity:</dt>
          <dd>
            <t>AEAD verification for one segment only.</t>
          </dd>
          <dt>Snapshot integrity:</dt>
          <dd>
            <t>Verification of the complete segment set and snapshot.</t>
          </dd>
          <dt>Segment commitment:</dt>
          <dd>
            <t>A hash of one segment's ciphertext, stored in that segment's
metadata.  It binds the segment's content, not its position
(<xref target="snapshot-interface"/>).</t>
          </dd>
          <dt>External freshness:</dt>
          <dd>
            <t>Rollback protection supplied outside raAE.</t>
          </dd>
        </dl>
      </section>
      <section anchor="notation">
        <name>Notation</name>
        <dl>
          <dt>I2OSP(n, w):</dt>
          <dd>
            <t>The w-octet big-endian encoding of the non-negative integer n, as
defined in <xref target="RFC8017"/>.</t>
          </dd>
          <dt>uint8(n), uint16(n), uint32(n), uint64(n):</dt>
          <dd>
            <t>Shorthand for I2OSP(n, 1), I2OSP(n, 2), I2OSP(n, 4), and I2OSP(n, 8)
respectively.</t>
          </dd>
          <dt>||:</dt>
          <dd>
            <t>Octet string concatenation.</t>
          </dd>
          <dt>XOR:</dt>
          <dd>
            <t>Bitwise exclusive-or of two octet strings of equal length.</t>
          </dd>
          <dt>X[a:b]:</dt>
          <dd>
            <t>Octets a through b-1 inclusive of X (zero-based, half-open
interval).</t>
          </dd>
          <dt>[x, y, ...]:</dt>
          <dd>
            <t>An ordered list of octet strings.  A single-element list is written
[x].  The brackets denote a list, not an optional parameter.</t>
          </dd>
          <dt>frame, encode:</dt>
          <dd>
            <t>The length-prefixed injective encoding used by SEAL, defined in
<xref target="kdf-combiner"/>.  frame is total over all field
lengths.  The construction requires an injective framing
(<xref target="framing"/>) but does not mandate this encoding.  Another profile
<bcp14>MAY</bcp14> use any injective encoding that meets <xref target="framing"/>.</t>
          </dd>
          <dt>Nk:</dt>
          <dd>
            <t>Key size in octets for the chosen AEAD algorithm.</t>
          </dd>
          <dt>Nn:</dt>
          <dd>
            <t>Nonce size in octets for the chosen AEAD algorithm.</t>
          </dd>
          <dt>Np:</dt>
          <dd>
            <t>Presented nonce size in octets: the per-segment nonce stored in
metadata.  Np = Nn in random nonce mode and Np = 0 in derived nonce
mode, where the nonce is recomputed from the key schedule.</t>
          </dd>
          <dt>Nh:</dt>
          <dd>
            <t>Hash or pseudorandom function (PRF) output size in octets for the
chosen KDF.</t>
          </dd>
          <dt>Nt:</dt>
          <dd>
            <t>Authentication tag size in octets for the chosen AEAD algorithm.</t>
          </dd>
          <dt>Nb:</dt>
          <dd>
            <t>Cipher block size in octets for the chosen AEAD algorithm, defined
only for an AEAD built on a block cipher.  The block-size birthday
limit of <xref target="aead-usage-limits"/> is expressed in Nb and does not apply
to an AEAD with no block-cipher structure.</t>
          </dd>
          <dt>Na:</dt>
          <dd>
            <t>The snapshot value length in octets, the output size of the
configured snapshot authenticator.  It <bcp14>MAY</bcp14> depend on the segment
count n_seg, and is 0 when none (<xref target="snapshot-authenticator"/>).</t>
          </dd>
          <dt>n_seg:</dt>
          <dd>
            <t>The number of ciphertext segments in a stored message.  Written
n_seg (lowercase) to distinguish it from the per-message nonce N in
the raAE interface (<xref target="raae-syntax"/>).</t>
          </dd>
        </dl>
      </section>
    </section>
    <section anchor="raae">
      <name>The raAE Primitive</name>
      <section anchor="raae-overview">
        <name>Overview</name>
        <t>Random-access authenticated encryption (raAE) partitions a message into
segments, each encrypted and decrypted on its own and in any order.  A
reader can open one segment without the rest of the message, and a
writer can encrypt one without holding the others.  In the base
interface <xref target="FLRR25"/>, each segment is written once and thereafter only
read.</t>
        <t>The extended raAE interface keeps that base and adds one capability:  a
segment already written may be replaced in place, without disturbing the
rest.  Rewriting changes the threat model.  Per-segment
authentication binds each segment in isolation, so it cannot tie the
segments a reader assembles to a single recorded version of the object:
a storage layer holding the ciphertext can roll a segment back to an
older valid copy, substitute one valid same-index segment for another,
or drop one, and each segment it presents still authenticates.  An
optional snapshot authenticates the segment set as the writer last
recorded it, so a reader can detect these changes.  The extension
(<xref target="raae-writable"/>) defines the snapshot and the operations that
maintain it.</t>
        <t>The security notions follow the interface.  raAE and its rewrites target
ra-ROR (random-access real-or-random) and ra-CMT (random-access context
commitment) (<xref target="raae-security"/>).  Rewriting leaves both untouched, since
replacing a segment is an encryption the read-only adversary could
already ask for.  Snapshot authentication adds the one notion of its
own, snapshot integrity (<xref target="snapshot-integrity"/>).</t>
      </section>
      <section anchor="raae-syntax">
        <name>Interface</name>
        <t>The base raAE interface, from <xref target="FLRR25"/>, is a tuple of five algorithms:
KeyGen, StartEnc, EncSeg, StartDec, and DecSeg.</t>
        <dl>
          <dt>KeyGen:</dt>
          <dd>
            <t>Randomized key generation.  Takes no input.  Outputs a secret key K.</t>
          </dd>
          <dt>StartEnc(K, N, G):</dt>
          <dd>
            <t>Deterministic.  Takes a secret key K, nonce N, and global associated
data G.  Outputs a ciphertext header T_g and an initial per-message
encryption state S.</t>
          </dd>
          <dt>EncSeg(S, p, A_i, M_i):</dt>
          <dd>
            <t>Randomized.  Takes the encryption state S, a position identifier
p, per-segment associated data A_i, and message segment M_i.
Outputs a ciphertext segment C_i.  S is not modified.  EncSeg may
be called with the same S at any position, in any order, or
concurrently.</t>
          </dd>
          <dt>StartDec(K, N, G, T_g):</dt>
          <dd>
            <t>Deterministic.  Takes key K, nonce N, global associated data G, and
ciphertext header T_g.  Outputs a per-message decryption state S or
an error.</t>
          </dd>
          <dt>DecSeg(S, p, A_i, C_i):</dt>
          <dd>
            <t>Deterministic.  Takes the decryption state S, position identifier
p, per-segment associated data A_i, and ciphertext segment C_i.
Outputs message segment M_i or an error.</t>
          </dd>
        </dl>
        <t>The position identifier p = (i, b) consists of a segment number i and a
terminal bit b in {0, 1}.  They impose a total ordering on segments and
carry a truncation defense: a ciphertext lacking a segment with b = 1 is
incomplete.  The encryption state S is immutable.  That immutability is
what makes arbitrary-order and fully parallel operation possible.  The
ciphertext header T_g commits to K, the nonce N, and global associated
data G.  A headerless scheme emits T_g = empty.</t>
      </section>
      <section anchor="raae-writable">
        <name>Extended Interface</name>
        <t>Replacing a segment already written, without re-encrypting the others,
requires no new operation:  re-encrypting a position is an ordinary
EncSeg call over the immutable state, and it leaves ra-ROR and ra-CMT
untouched.</t>
        <t>A scheme that supports rewriting <bcp14>MAY</bcp14> carry a snapshot, a value over the
current set of segments that a reader checks to detect tampering that
per-segment authentication does not catch.  A write-once scheme <bcp14>MAY</bcp14>
carry one too:  a single value that a consuming protocol authenticates
once for the whole segment set (<xref target="snapshot-interface"/>).</t>
        <t>Two operations, added by this document, maintain and check the snapshot.
RewriteSeg replaces a segment and updates the snapshot in the same step.
SnapVerify decides whether a given set of segments is the one the writer
last recorded.</t>
        <dl>
          <dt>RewriteSeg(S, p, A_i, M'_i, C_i, snapshot):</dt>
          <dd>
            <t>Randomized.  Takes the encryption state S and position identifier p,
per-segment associated data A_i, the new message segment M'_i, the
existing ciphertext C_i at position p, and the current snapshot.
Outputs replacement ciphertext C'_i and an updated snapshot
value, snapshot'.</t>
          </dd>
          <dt>SnapVerify(S, segments, snapshot):</dt>
          <dd>
            <t>Deterministic.  Takes the encryption state S, the segments to verify
as (position, ciphertext segment) pairs, and the snapshot.  These are
either the whole current object state or, where the authenticator
supports it, a designated subset of it.  Outputs accept or reject.</t>
          </dd>
        </dl>
        <t>The extension also changes two base signatures.  In the extended
interface:</t>
        <dl>
          <dt>StartEnc(K, N, G):</dt>
          <dd>
            <t>Deterministic.  As in <xref target="raae-syntax"/>, and additionally outputs the
initial snapshot value, the snapshot over the empty segment set.</t>
          </dd>
          <dt>EncSeg(S, p, A_i, M_i):</dt>
          <dd>
            <t>Randomized.  As in <xref target="raae-syntax"/>, and additionally outputs the
snapshot value over the segment set that results from adding C_i at
position p.</t>
          </dd>
        </dl>
        <t>The snapshot is an authenticator over the set of segments belonging to
the current object state.  The base primitive has no snapshot value.</t>
        <t>These additions define the extended raAE interface of this document:
the tuple (KeyGen, StartEnc, EncSeg, StartDec, DecSeg, RewriteSeg,
SnapVerify) over the snapshot value.  The first five
algorithms are those of <xref target="raae-syntax"/>.  The snapshot value,
RewriteSeg, and SnapVerify are the extension.  A scheme can realize the
base interface alone, as FLOE (<xref target="FLRR25"/>) does.  SEAL (<xref target="framework"/>)
realizes the full extended interface.</t>
        <t>Changing a message's length is a composition of these operations,
not a separate algorithm in either direction.  Position-addressed
encryption over immutable state already permits re-encrypting a
position or encrypting at a higher index (see <xref target="ra-ror"/>).</t>
        <t>A holder appends by encrypting the new segments and re-marking the old
final segment with RewriteSeg to clear its terminal bit.  It truncates
by re-marking the new final segment with RewriteSeg, dropping the
trailing segments, and updating the snapshot over the surviving set.
Appending to an empty object skips the re-mark, since there is no old
final segment, and truncating away every segment yields the empty
object, with no new final segment to re-mark.</t>
        <t>A length change appends segments or drops a suffix.  Each step updates
the snapshot, and <xref target="extend"/> gives the construction for both directions.</t>
      </section>
    </section>
    <section anchor="framework">
      <name>The SEAL Construction</name>
      <t>SEAL is a construction for the raAE primitive of <xref target="raae"/>, realizing its
extended interface from a KDF, an AEAD, the labels, a nonce-generation
method, and an optional snapshot authenticator.  Its KDF combiner
(<xref target="kdf-combiner"/>) frames every derived key and input over any KDF with
a two-step or one-step form.  SEAL provides commitment around the AEAD,
which need not itself commit.</t>
      <t>A SEAL construction <bcp14>MAY</bcp14> select any AEAD, KDF, nonce mode, commitment
configuration, or snapshot authenticator that satisfies the requirements
of this section.  <xref target="security-properties"/> derives SEAL's bounds from the
abstract properties of these components.  Concrete parameter choices and
interoperable suites are in <xref target="I-D.sullivan-seal-concrete"/>.</t>
      <t>In the key hierarchy below, a CEK and per-content salt feed the payload
schedule, which derives four per-message values (<xref target="key-derivation"/>).</t>
      <figure anchor="fig-hierarchy">
        <name>SEAL Key Hierarchy</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="624" width="272" viewBox="0 0 272 624" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,240 L 8,288" fill="none" stroke="black"/>
              <path d="M 24,208 L 24,232" fill="none" stroke="black"/>
              <path d="M 40,240 L 40,288" fill="none" stroke="black"/>
              <path d="M 64,240 L 64,288" fill="none" stroke="black"/>
              <path d="M 72,80 L 72,128" fill="none" stroke="black"/>
              <path d="M 88,208 L 88,232" fill="none" stroke="black"/>
              <path d="M 88,352 L 88,400" fill="none" stroke="black"/>
              <path d="M 96,136 L 96,160" fill="none" stroke="black"/>
              <path d="M 120,240 L 120,288" fill="none" stroke="black"/>
              <path d="M 120,496 L 120,544" fill="none" stroke="black"/>
              <path d="M 128,32 L 128,72" fill="none" stroke="black"/>
              <path d="M 136,240 L 136,288" fill="none" stroke="black"/>
              <path d="M 152,136 L 152,160" fill="none" stroke="black"/>
              <path d="M 152,208 L 152,232" fill="none" stroke="black"/>
              <path d="M 168,80 L 168,128" fill="none" stroke="black"/>
              <path d="M 176,352 L 176,400" fill="none" stroke="black"/>
              <path d="M 184,240 L 184,288" fill="none" stroke="black"/>
              <path d="M 192,552 L 192,576" fill="none" stroke="black"/>
              <path d="M 216,208 L 216,488" fill="none" stroke="black"/>
              <path d="M 264,496 L 264,544" fill="none" stroke="black"/>
              <path d="M 72,80 L 168,80" fill="none" stroke="black"/>
              <path d="M 72,128 L 168,128" fill="none" stroke="black"/>
              <path d="M 8,240 L 40,240" fill="none" stroke="black"/>
              <path d="M 64,240 L 120,240" fill="none" stroke="black"/>
              <path d="M 136,240 L 184,240" fill="none" stroke="black"/>
              <path d="M 8,288 L 40,288" fill="none" stroke="black"/>
              <path d="M 64,288 L 120,288" fill="none" stroke="black"/>
              <path d="M 136,288 L 184,288" fill="none" stroke="black"/>
              <path d="M 88,352 L 176,352" fill="none" stroke="black"/>
              <path d="M 88,400 L 176,400" fill="none" stroke="black"/>
              <path d="M 120,496 L 264,496" fill="none" stroke="black"/>
              <path d="M 120,544 L 264,544" fill="none" stroke="black"/>
              <path d="M 92,296 L 116,344" fill="none" stroke="black"/>
              <path d="M 172,456 L 188,488" fill="none" stroke="black"/>
              <path d="M 156,408 L 168,432" fill="none" stroke="black"/>
              <path d="M 200,144 L 208,160" fill="none" stroke="black"/>
              <path d="M 40,160 L 48,144" fill="none" stroke="black"/>
              <path d="M 96,432 L 108,408" fill="none" stroke="black"/>
              <path d="M 140,344 L 164,296" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="224,488 212,482.4 212,493.6" fill="black" transform="rotate(90,216,488)"/>
              <polygon class="arrowhead" points="216,160 204,154.4 204,165.6" fill="black" transform="rotate(63.43494882292201,208,160)"/>
              <polygon class="arrowhead" points="200,576 188,570.4 188,581.6" fill="black" transform="rotate(90,192,576)"/>
              <polygon class="arrowhead" points="196,488 184,482.4 184,493.6" fill="black" transform="rotate(63.43494882292201,188,488)"/>
              <polygon class="arrowhead" points="176,432 164,426.4 164,437.6" fill="black" transform="rotate(63.43494882292201,168,432)"/>
              <polygon class="arrowhead" points="160,232 148,226.4 148,237.6" fill="black" transform="rotate(90,152,232)"/>
              <polygon class="arrowhead" points="160,160 148,154.4 148,165.6" fill="black" transform="rotate(90,152,160)"/>
              <polygon class="arrowhead" points="148,344 136,338.4 136,349.6" fill="black" transform="rotate(116.56505117707799,140,344)"/>
              <polygon class="arrowhead" points="136,72 124,66.4 124,77.6" fill="black" transform="rotate(90,128,72)"/>
              <polygon class="arrowhead" points="124,344 112,338.4 112,349.6" fill="black" transform="rotate(63.43494882292201,116,344)"/>
              <polygon class="arrowhead" points="104,432 92,426.4 92,437.6" fill="black" transform="rotate(116.56505117707799,96,432)"/>
              <polygon class="arrowhead" points="104,160 92,154.4 92,165.6" fill="black" transform="rotate(90,96,160)"/>
              <polygon class="arrowhead" points="96,232 84,226.4 84,237.6" fill="black" transform="rotate(90,88,232)"/>
              <polygon class="arrowhead" points="48,160 36,154.4 36,165.6" fill="black" transform="rotate(116.56505117707799,40,160)"/>
              <polygon class="arrowhead" points="32,232 20,226.4 20,237.6" fill="black" transform="rotate(90,24,232)"/>
              <g class="text">
                <text x="104" y="36">CEK</text>
                <text x="156" y="36">salt</text>
                <text x="120" y="100">Payload</text>
                <text x="124" y="116">Schedule</text>
                <text x="28" y="180">commit</text>
                <text x="96" y="180">payload</text>
                <text x="160" y="180">nonce</text>
                <text x="220" y="180">snap</text>
                <text x="88" y="196">key</text>
                <text x="156" y="196">base</text>
                <text x="216" y="196">key</text>
                <text x="24" y="260">cmt</text>
                <text x="80" y="260">seg</text>
                <text x="160" y="260">nonce</text>
                <text x="92" y="276">key(i)</text>
                <text x="160" y="276">(i)</text>
                <text x="132" y="372">AEAD</text>
                <text x="136" y="388">Seal(i)</text>
                <text x="92" y="452">ct_i</text>
                <text x="168" y="452">tag_i</text>
                <text x="188" y="516">Snapshot</text>
                <text x="192" y="532">Authenticator</text>
                <text x="188" y="596">snapshot</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
                  CEK + salt
                      |
                      v
               .-----------.
               |  Payload  |
               |  Schedule |
               '-----------'
            /     |      |     \
           v      v      v      v
       commit  payload  nonce   snap
                key     base    key
         |       |       |       |
         v       v       v       |
       .---.  .------. .-----.   |
       |cmt|  |seg   | |nonce|   |
       |   |  |key(i)| | (i) |   |
       '---'  '------' '-----'   |
                  \       /      |
                   \     /       |
                    v   v        |
                 .----------.    |
                 |   AEAD   |    |
                 |  Seal(i) |    |
                 '----------'    |
                   /      \      |
                  v        v     |
                ct_i     tag_i   |
                            \    |
                             v   v
                     .-----------------.
                     |    Snapshot     |
                     |  Authenticator  |
                     '-----------------'
                              |
                              v
                          snapshot
]]></artwork>
        </artset>
      </figure>
      <t>The figure shows each segment's tag feeding the authenticator.  Its
actual per-segment input is the segment's metadata leaf
(<xref target="snapshot-interface"/>).</t>
      <section anchor="raae-mapping">
        <name>Construction Overview</name>
        <t>The commitment lets a reader reject a wrong key or parameter set before
decrypting.  The snapshot, when present, authenticates the current
segment set.  SEAL realizes the raAE operations of <xref target="raae-syntax"/> as
follows:</t>
        <table anchor="op-mapping">
          <name>raAE operations and their SEAL realizations</name>
          <thead>
            <tr>
              <th align="left">raAE operation</th>
              <th align="left">SEAL realization</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">StartEnc</td>
              <td align="left">Derive the payload schedule from the CEK and salt, committing G (<xref target="key-derivation"/>)</td>
            </tr>
            <tr>
              <td align="left">StartDec</td>
              <td align="left">Re-derive the schedule and verify the stored commitment (<xref target="framework-commitment"/>)</td>
            </tr>
            <tr>
              <td align="left">EncSeg, DecSeg</td>
              <td align="left">EncryptSegment and DecryptSegment (<xref target="segment-subroutines"/>)</td>
            </tr>
            <tr>
              <td align="left">RewriteSeg</td>
              <td align="left">RewriteSegment, then update the snapshot authenticator for the changed segment (<xref target="full-rewrite"/>)</td>
            </tr>
            <tr>
              <td align="left">SnapVerify</td>
              <td align="left">Check the present indices and finality, then verify the snapshot via the authenticator (<xref target="snapshot-authenticator"/>)</td>
            </tr>
          </tbody>
        </table>
        <t>SEAL's salt, payload_info, and G carry the raAE per-message inputs, and
the commitment stands in for the header (<xref target="components"/>).</t>
      </section>
      <section anchor="components">
        <name>Component Suite and Parameters</name>
        <t anchor="parameters"><xref target="param-table"/> lists the parameters, inputs, and derived values, with
what sets each and where it is defined.</t>
        <table anchor="param-table">
          <name>Parameters, inputs, and derived values</name>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">Type or range</th>
              <th align="left">Set by</th>
              <th align="left">Defined in</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">AEAD</td>
              <td align="left">RFC 5116 algorithm</td>
              <td align="left">suite</td>
              <td align="left">
                <xref target="suite-choices"/></td>
            </tr>
            <tr>
              <td align="left">KDF</td>
              <td align="left">KDF algorithm</td>
              <td align="left">suite</td>
              <td align="left">
                <xref target="kdf-combiner"/></td>
            </tr>
            <tr>
              <td align="left">segment_max</td>
              <td align="left">power of two, at least 4096</td>
              <td align="left">suite</td>
              <td align="left">
                <xref target="suite-choices"/></td>
            </tr>
            <tr>
              <td align="left">epoch_length</td>
              <td align="left">integer r in 0 to 63</td>
              <td align="left">suite</td>
              <td align="left">
                <xref target="epoch-key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">protocol_id</td>
              <td align="left">octet string</td>
              <td align="left">application</td>
              <td align="left">
                <xref target="security-domain-separation"/></td>
            </tr>
            <tr>
              <td align="left">nonce_mode</td>
              <td align="left">"random" or "derived"</td>
              <td align="left">message, within the profile</td>
              <td align="left">
                <xref target="nonce-generation"/></td>
            </tr>
            <tr>
              <td align="left">aad_label</td>
              <td align="left">ASCII string</td>
              <td align="left">profile</td>
              <td align="left">
                <xref target="concrete-segment-aad"/></td>
            </tr>
            <tr>
              <td align="left">commitment_length</td>
              <td align="left">integer, at least 16, default Nh</td>
              <td align="left">profile</td>
              <td align="left">
                <xref target="appendix-commitment"/></td>
            </tr>
            <tr>
              <td align="left">Nk, Nn, Nt, Nb</td>
              <td align="left">sizes in octets</td>
              <td align="left">AEAD</td>
              <td align="left">
                <xref target="notation"/></td>
            </tr>
            <tr>
              <td align="left">Nh</td>
              <td align="left">size in octets</td>
              <td align="left">KDF</td>
              <td align="left">
                <xref target="notation"/></td>
            </tr>
            <tr>
              <td align="left">CEK</td>
              <td align="left">32 uniform random octets</td>
              <td align="left">message input</td>
              <td align="left">
                <xref target="key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">salt</td>
              <td align="left">32 uniform random octets</td>
              <td align="left">message input</td>
              <td align="left">
                <xref target="key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">payload_info</td>
              <td align="left">ordered element list</td>
              <td align="left">message input</td>
              <td align="left">
                <xref target="seal-encodings"/></td>
            </tr>
            <tr>
              <td align="left">G</td>
              <td align="left">octet string, empty by default</td>
              <td align="left">message input</td>
              <td align="left">
                <xref target="framework-commitment"/></td>
            </tr>
            <tr>
              <td align="left">commitment</td>
              <td align="left">commitment_length octets</td>
              <td align="left">derived per message</td>
              <td align="left">
                <xref target="key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">payload_key</td>
              <td align="left">Nk octets</td>
              <td align="left">derived per message</td>
              <td align="left">
                <xref target="key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">snap_key</td>
              <td align="left">Nh octets</td>
              <td align="left">derived per message</td>
              <td align="left">
                <xref target="key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">nonce_base</td>
              <td align="left">Nn octets, derived mode only</td>
              <td align="left">derived per message</td>
              <td align="left">
                <xref target="key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">epoch_key(i)</td>
              <td align="left">Nk octets</td>
              <td align="left">derived per segment</td>
              <td align="left">
                <xref target="epoch-key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">segment_key(i)</td>
              <td align="left">Nk octets</td>
              <td align="left">derived per segment</td>
              <td align="left">
                <xref target="epoch-key-derivation"/></td>
            </tr>
            <tr>
              <td align="left">nonce(i)</td>
              <td align="left">Nn octets</td>
              <td align="left">derived per segment</td>
              <td align="left">
                <xref target="nonce-generation"/></td>
            </tr>
            <tr>
              <td align="left">segment_aad(i, is_final, A_i)</td>
              <td align="left">octet string</td>
              <td align="left">derived per segment</td>
              <td align="left">
                <xref target="concrete-segment-aad"/></td>
            </tr>
            <tr>
              <td align="left">tag_i</td>
              <td align="left">Nt octets</td>
              <td align="left">derived per segment</td>
              <td align="left">
                <xref target="segment-subroutines"/></td>
            </tr>
          </tbody>
        </table>
        <t>SEAL fixes the segment additional authenticated data (AAD) encoding
(<xref target="concrete-segment-aad"/>), the commitment derivation
(<xref target="framework-commitment"/>), and the snapshot value
(<xref target="snapshot-authenticator"/>) identically across all suites.  Their octet
lengths still vary by suite, because Nh and Nt are suite-dependent.</t>
        <section anchor="suite-choices">
          <name>Suite Choices</name>
          <t>A suite is assembled from the following choices.</t>
          <dl>
            <dt>AEAD:</dt>
            <dd>
              <t>An authenticated encryption with associated data algorithm
satisfying the interface of <xref target="RFC5116"/>, with Nk-octet keys,
Nn-octet nonces, and Nt-octet authentication tags.</t>
            </dd>
            <dt>KDF:</dt>
            <dd>
              <t>A key derivation function supporting the abstract interface defined in
<xref target="kdf-combiner"/>.</t>
            </dd>
            <dt>segment_max:</dt>
            <dd>
              <t>A positive integer, a power of two and at least 4096 octets.  Each
segment carries at most this many plaintext octets.  The
length-dependent limits of <xref target="aead-usage-limits"/> are computed at
this size.</t>
            </dd>
            <dt>epoch_length:</dt>
            <dd>
              <t>A non-negative integer r in 0 to 63.  Each epoch covers 2^r
consecutive segments aligned to a multiple of 2^r, so r sets the
key-rotation granularity:  r = 0 gives a fresh epoch key per segment
and r = 63 one key for all segments (<xref target="epoch-key-derivation"/>).
Profiles <bcp14>MAY</bcp14> restrict r further per AEAD.</t>
            </dd>
            <dt>protocol_id:</dt>
            <dd>
              <t>An application-chosen octet string that binds all derived values to
a specific protocol version.  Selection guidance is in
<xref target="security-domain-separation"/>.</t>
            </dd>
            <dt>nonce_mode:</dt>
            <dd>
              <t>A payload_info element selecting one of two nonce constructions,
"random" or "derived".  The constructions are defined in
<xref target="nonce-generation"/>, and the valid (nonce_mode, snap_id) tuples
depend on the profile.</t>
            </dd>
          </dl>
        </section>
        <section anchor="profile-constants">
          <name>Profile-Level Constants</name>
          <t>One constant is fixed by the profile rather than carried per message.</t>
          <dl>
            <dt>aad_label:</dt>
            <dd>
              <t>A profile-level ASCII string bound as the first element of the
segment AAD encoding (<xref target="concrete-segment-aad"/>).  Consuming
protocols <bcp14>MAY</bcp14> define their own profiles with a distinct aad_label.</t>
            </dd>
          </dl>
        </section>
        <section anchor="algorithm-sizes">
          <name>Algorithm-Determined Sizes</name>
          <t>The sizes Nk, Nn, Nt, and Nh are fixed by the chosen AEAD and KDF rather
than by the parameter set directly, as is Nb where it is defined.  They
are defined in <xref target="notation"/>.  One configurable length defaults from Nh.</t>
          <dl>
            <dt>commitment_length:</dt>
            <dd>
              <t>A positive integer of at least 16, defaulting to Nh, the length in
octets of the key commitment prefix.  The collision bounds for each
length are given in <xref target="appendix-commitment"/>.</t>
            </dd>
          </dl>
        </section>
        <section anchor="message-inputs">
          <name>Per-Message Inputs</name>
          <t>An encrypted message is built from four input values.</t>
          <dl>
            <dt>CEK:</dt>
            <dd>
              <t>A 32-octet uniform random Content Encryption Key generated fresh for
each message.  The CEK is input keying material for the key
schedule, not an AEAD key.</t>
            </dd>
            <dt>salt:</dt>
            <dd>
              <t>A per-content value of 32 uniformly random octets.  The salt
separates payload schedule outputs across messages even when the
CEK is reused.  <xref target="full-encryption"/> and <xref target="extend"/> give the rules
for generating and reusing it, and <xref target="salt-reuse"/> analyzes the
consequences of reuse.</t>
            </dd>
            <dt>payload_info:</dt>
            <dd>
              <t>The committed record of the object's configuration: an ordered
list of parameter set context elements covering key derivation,
AEAD operations, AAD construction, and nonce construction, which
the commitment (<xref target="framework-commitment"/>) binds.  The profile fixes
the concrete element set and their encodings.  SEAL's payload_info
is specified in <xref target="seal-encodings"/>.</t>
            </dd>
            <dt>G:</dt>
            <dd>
              <t>An octet string of global associated data, the G input of StartEnc in
the raAE primitive (<xref target="raae-syntax"/>), binding whole-message
application context such as a name, version, or policy.  G defaults to
the empty octet string and is never stored:  a decryptor supplies it
from application context, and the commitment binds it
(<xref target="framework-commitment"/>).</t>
            </dd>
          </dl>
          <t>The remaining symbols in <xref target="param-table"/> are derived values.  The
payload schedule computes the per-message values once from the CEK and
payload_info, fixing them for the message's lifetime
(<xref target="key-derivation"/>).  The commitment additionally binds G
(<xref target="framework-commitment"/>).  Per-segment values are defined where they
are computed, in the sections <xref target="param-table"/> cites.</t>
        </section>
      </section>
      <section anchor="kdf-combiner">
        <name>The KDF Combiner</name>
        <t>The KDF combiner uses a length-prefixed encoding for all of its inputs.</t>
        <artwork><![CDATA[
frame(x):
    if len(x) <= 0xFFFE:  return uint16(len(x)) || x     ;; literal
    else:                 return uint16(0xFFFF) || LH(x) ;; digest

encode(x1, ..., xn) = frame(x1) || ... || frame(xn)
]]></artwork>
        <t>frame is total over every field length.  A field too large to emit
literally is instead prefixed by the reserved length 0xFFFF and an
Nh-octet digest LH(x).</t>
        <t>LH(x), the over-large-field digest, runs the cipher suite's native KDF
primitive directly on x, invoking neither encode nor frame, and returns
Nh octets.  The two-step and one-step classes are HPKE's: a two-step KDF
(<xref target="RFC9180"/>) uses its extract step, and a one-step KDF
(<xref target="I-D.ietf-hpke-pq"/>) its XOF, with x carried under the label
"raAE-LP-v1":</t>
        <artwork><![CDATA[
two-step:  LH(x) = Extract("raAE-LP-v1", x)
one-step:  LH(x) = XOF("raAE-LP-v1" || x, Nh)
]]></artwork>
        <t>Running LH through the full KDF would re-enter frame on the over-large x
and recurse.  The direct native call avoids that.</t>
        <t><xref target="framing"/> requires the construction to justify the collision
resistance of the over-large-field digest.  LH's is that of the cipher
suite's KDF primitive at the suite's Nh.  In the two-step class LH(x) is
HMAC under the fixed public key "raAE-LP-v1", so a collision in LH
yields a collision in the underlying hash, by the reduction
<xref target="adversary-model"/> gives for the commit derivation.  In the one-step
class LH(x) is the XOF itself over a domain-separated input, so a
collision in LH is a collision in the XOF at that output length.</t>
        <t>The injectivity of encode, and LH's domain separation from the literal
encoding, are established in <xref target="framing"/>.</t>
        <t>Key material is derived through a KDF with the interface</t>
        <artwork><![CDATA[
KDF(protocol_id, label, ikm, info, L)
]]></artwork>
        <ul spacing="normal">
          <li>
            <t>protocol_id: binds the output to a specific protocol
version and application context.</t>
          </li>
          <li>
            <t>label: a unique ASCII string identifying the
derivation role.</t>
          </li>
          <li>
            <t>ikm: input keying material, provided as a single
octet string or an ordered list of octet strings.</t>
          </li>
          <li>
            <t>info: context information, provided as a single
octet string or an ordered list of octet strings.</t>
          </li>
          <li>
            <t>L: the requested output length in octets.</t>
          </li>
        </ul>
        <t>This KDF binds protocol_id, a label, and inputs of any size into a
derived value.  frame reduces any over-large input to a fixed-size
digest before the KDF sees it.  Any protocol instantiates the combiner
by supplying its own protocol_id, which domain-separates its derivations
from those of every other protocol.</t>
        <t>The KDF is built from the cipher suite's hash in one of two forms.  The
cipher suite's kdf_id selects which one.</t>
        <section anchor="two-step-kdf">
          <name>Two-Step KDF</name>
          <artwork><![CDATA[
KDF(protocol_id, label, ikm, info, L):
  extract_input = encode(protocol_id, label,
                         ...ikm)
  prk = Extract(salt=protocol_id,
                ikm=extract_input)
  expand_info = encode(protocol_id, label,
                       ...info, uint16(L))
  return Expand(prk, expand_info, L)
]]></artwork>
          <t>The notation <tt>...x</tt> means each element of the sequence x, whether ikm or
info, is a separate argument to encode.  A single octet string is the
one-element sequence containing it.  An absent value is the empty
sequence and contributes no arguments.  The empty sequence and the
one-element sequence whose element is the empty octet string are
distinct:  the first adds nothing to the encode, the second adds one
zero-length field.  A derivation with no info <bcp14>MUST</bcp14> use the empty
sequence, not the empty octet string, so that every implementation
encodes a given (protocol_id, label, ikm, info, L) tuple to the same
octets.  The protocol_id appears in both the Extract salt and the
extract_input as a defensive measure, and binding in either position
suffices for domain separation.</t>
          <t>The label appears in both Extract and Expand so that label binding is
preserved even if one phase is weak in isolation.  Implementations <bcp14>MAY</bcp14>
amortize the Extract computation internally when deriving multiple
outputs from the same protocol_id, label, and ikm.</t>
        </section>
        <section anchor="one-step-kdf">
          <name>One-Step KDF</name>
          <artwork><![CDATA[
KDF(protocol_id, label, ikm, info, L):
  M = encode(protocol_id, label,
             encode(...ikm), encode(...info),
             uint16(L))
  return XOF(M, L)
]]></artwork>
          <t>The XOF-based form frames ikm and info each as a single element of one
length-prefixed encode and squeezes L octets of output.  protocol_id
binding is via the message-side encode prefix only.  In both forms the
encoded input ends with uint16(L):  the two-step form places it last in
expand_info and the one-step form places it last in M.  Within a fixed
kdf_id, distinct (protocol_id, label, ikm, info, L) tuples yield
distinct outputs, by the injectivity of encode (established in
<xref target="framing"/>).  The two forms are not mutually injective:  a cipher
suite's kdf_id selects one form for that suite, and payload_info commits
to the kdf_id (<xref target="seal-encodings"/>), so no derivation ever compares
outputs across forms.  The two-step form binds ikm in Extract and info
in Expand.  A multi-value ikm or info is the encode of its elements, so
any number of elements is admitted.</t>
        </section>
      </section>
      <section anchor="seal-encodings">
        <name>SEAL Encodings and Labels</name>
        <section anchor="payload-info-construction">
          <name>Payload Info Construction</name>
          <artwork><![CDATA[
payload_info = [aead_id, segment_max_be, kdf_id, snap_id,
                segment_commitment, nonce_mode, epoch_length_u8, salt]
]]></artwork>
          <t>Element encodings for SEAL:</t>
          <ul spacing="normal">
            <li>
              <t>aead_id: 2 octets, uint16(id), the unsigned 16-bit AEAD identifier.</t>
            </li>
            <li>
              <t>segment_max_be: 4 octets, uint32(segment_max).</t>
            </li>
            <li>
              <t>kdf_id: 2 octets, uint16(id), the unsigned 16-bit KDF identifier.</t>
            </li>
            <li>
              <t>snap_id: 2 octets, uint16(id), the snapshot authenticator identifier.</t>
            </li>
            <li>
              <t>segment_commitment: 1 octet, 0x00 when the leaf does not bind the
segment's content and 0x01 when it does (<xref target="snapshot-interface"/>).  It
is a choice independent of snap_id, but not every (snap_id,
segment_commitment) pair is sound, so a profile selects a valid one.</t>
            </li>
            <li>
              <t>nonce_mode: 1 octet, the nonce construction:  0x00 for random, 0x01
for derived.  A profile <bcp14>MAY</bcp14> select any valid (nonce_mode, snap_id,
segment_commitment) tuple.</t>
            </li>
            <li>
              <t>epoch_length_u8: 1 octet, uint8(epoch_length).  Implementations <bcp14>MUST</bcp14>
reject epoch_length &gt;= 64 on both encode and decode.</t>
            </li>
            <li>
              <t>salt: 32 raw octets, the per-message salt.</t>
            </li>
          </ul>
          <t>The aad_label is a profile-level constant for SEAL (see
<xref target="concrete-segment-aad"/>) and is not carried in payload_info.  The KDF
(<xref target="kdf-combiner"/>) applies frame to each element of the list.</t>
        </section>
        <section anchor="concrete-segment-aad">
          <name>Segment AAD</name>
          <t>The segment AAD binds each segment to its context.  What it must carry
depends on the nonce mode: a random nonce binds neither the segment
index nor the finality bit, so the AAD must, whereas a derived nonce
binds both (<xref target="derived-nonces"/>).</t>
          <artwork><![CDATA[
segment_aad(i, is_final, A_i):
  if nonce_mode is "random":
    if A_i is empty:
      return encode(aad_label, uint64(i), uint8(is_final))
    return encode(aad_label, uint64(i), uint8(is_final), A_i)
  ;; derived nonce mode
  if A_i is empty:
    return ""
  return encode(aad_label, A_i)
]]></artwork>
          <table anchor="segment-aad-modes">
            <name>Segment AAD by nonce mode</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">Random nonce mode</th>
                <th align="left">Derived nonce mode</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Index i and is_final</td>
                <td align="left">bound in the AAD</td>
                <td align="left">bound in the nonce</td>
              </tr>
              <tr>
                <td align="left">A_i, when present</td>
                <td align="left">appended as a fourth encode element</td>
                <td align="left">the sole variable element</td>
              </tr>
              <tr>
                <td align="left">A_i, when empty</td>
                <td align="left">omitted, not a zero-length element</td>
                <td align="left">segment_aad is empty, with no associated-data pass</td>
              </tr>
            </tbody>
          </table>
          <t>aad_label is the profile-chosen label from the parameter set, the index
i is a big-endian 8-octet integer, and is_final is 1 for the last
segment and 0 for all others.  Because encode length-prefixes every
element, omitting an empty A_i stays injective, so the index and
finality bit remain authenticated.  Any profile that defines a
random-mode segment_aad <bcp14>MUST</bcp14> preserve injectivity and <bcp14>MUST</bcp14> authenticate
the segment index and finality bit.  aad_label is bound transitively
through protocol_id (<xref target="parameter-mismatch"/>), so segment_aad need not
repeat it for cross-profile separation.</t>
          <t>More generally, the binding of the triple (i, is_final, A_i) <bcp14>MUST</bcp14> be
unambiguous under one segment key, so that no two distinct triples
present the same inputs to the AEAD.  In random nonce mode segment_aad
alone <bcp14>MUST</bcp14> injectively bind the triple, because the nonce is an
independent random draw.  In derived nonce mode i and is_final are bound
in the nonce and A_i, when present, in segment_aad, and the (nonce,
segment_aad) pair <bcp14>MUST</bcp14> jointly determine the triple
(<xref target="derived-nonces"/>).</t>
          <t>A_i is the caller-supplied per-segment associated data of EncSeg and
DecSeg (<xref target="raae-syntax"/>), passed to the segment algorithms
(<xref target="segment-subroutines"/>).  It <bcp14>MAY</bcp14> be empty and <bcp14>MAY</bcp14> differ per segment.
Unlike a global associated data value G, which the commitment fixes at
creation (<xref target="framework-commitment"/>), A_i rides the per-segment AEAD
associated data and is rewritable: a rewrite can change a segment's A_i.</t>
          <t>The salt is not included in the AAD because it is already bound into
segment_key via the payload schedule.  Different messages produce
different segment keys even at the same index.  Transposing two segments
within a message fails because the AAD at each position encodes the
expected index.</t>
          <t>Because each segment binds its index and finality bit (through the AAD
or the nonce, per <xref target="segment-aad-modes"/>), these truncation and extension
attacks are caught by per-segment authentication alone, not by the
snapshot, and a reader checks them locally before decrypting any one
segment.  Unauthorized truncation is detectable and <xref target="full-decryption"/>
requires a decryptor to reject it:  a highest-indexed present segment
carrying is_final = 0 signals missing data.  Authorized truncation by
the CEK holder instead re-marks the new final segment and updates the
snapshot (<xref target="extend"/>).  Appending after a segment marked is_final = 1
either invalidates that segment on re-read or produces a ciphertext that
cannot verify.</t>
          <t>The per-segment AEAD binds a segment's index and finality, not its
length, by the same means.  A segment's ciphertext length is
authenticated implicitly by the AEAD tag over the ciphertext:
altering, truncating, or splicing a segment ciphertext is an AEAD
forgery, not a parsing ambiguity.  Because segments may be shorter
than segment_max, the consuming format <bcp14>MUST</bcp14> convey each segment's
ciphertext length to the decoder.  A wrong length yields an AEAD
rejection, never a silent accept.</t>
        </section>
        <section anchor="labels">
          <name>Labels</name>
          <table anchor="label-table">
            <name>SEAL core KDF labels by role</name>
            <thead>
              <tr>
                <th align="left">Derivation role</th>
                <th align="left">Label variable</th>
                <th align="left">Value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Commitment</td>
                <td align="left">commit_label</td>
                <td align="left">"commit"</td>
              </tr>
              <tr>
                <td align="left">Payload key</td>
                <td align="left">payload_key_label</td>
                <td align="left">"payload_key"</td>
              </tr>
              <tr>
                <td align="left">Snapshot authenticator key</td>
                <td align="left">snap_key_label</td>
                <td align="left">"snap_key"</td>
              </tr>
              <tr>
                <td align="left">Nonce base</td>
                <td align="left">nonce_base_label</td>
                <td align="left">"nonce_base"</td>
              </tr>
              <tr>
                <td align="left">Epoch key</td>
                <td align="left">epoch_key_label</td>
                <td align="left">"epoch_key"</td>
              </tr>
            </tbody>
          </table>
          <t>SEAL fixes each label to the value above.  The construction formulas
reference labels by variable name, so the labels are SEAL parameters
rather than constants of the raAE construction.  Each value is an ASCII
string and is distinct from all others.  These are the always-present
key-schedule labels.  The configured snapshot authenticator
(<xref target="snapshot-interface"/>), the plaintext-bound nonce construction
(<xref target="appendix-pt-bound"/>), and hedged randomness
(<xref target="hedged-randomness"/>) each define their own labels.</t>
        </section>
      </section>
      <section anchor="key-derivation">
        <name>Key Schedule and Nonce Generation</name>
        <t>A message's entire key hierarchy grows from two random values.  All
other keys are derived deterministically through the KDF of
<xref target="kdf-combiner"/>.</t>
        <section anchor="payload-schedule">
          <name>Payload Schedule</name>
          <t>Four values are derived from the CEK and per-content salt.</t>
          <artwork><![CDATA[
payload_info = [aead_id,
                uint32(segment_max),
                kdf_id,
                snap_id,
                segment_commitment,
                nonce_mode,
                uint8(epoch_length),
                salt]

commitment  = KDF(protocol_id, commit_label,
                  [CEK], [...payload_info, G], commitment_length)
payload_key = KDF(protocol_id, payload_key_label,
                  [CEK], payload_info, Nk)
snap_key     = KDF(protocol_id, snap_key_label,
                  [CEK], payload_info, Nh)

;; For derived nonce mode only:
nonce_base  = KDF(protocol_id, nonce_base_label,
                  [CEK], payload_info, Nn)
]]></artwork>
          <t>G is the global associated data of <xref target="message-inputs"/>, always the last
element of the commitment info.  It defaults to the empty octet string,
one zero-length element, so every commitment derivation includes it.
The other three derivations never take G.</t>
        </section>
        <section anchor="epoch-key-derivation">
          <name>Epoch Key Derivation</name>
          <t>An AEAD with a 96-bit nonce (Nn = 12) has, at a 2^(-32)
collision-probability target, a random-nonce budget of about 2^32
encryptions per key.  For rewritable content, this limit can be reached
through repeated modifications to the same segments.  Epoch keys
partition the nonce space:  each epoch key covers at most 2^r segment
positions (initial writes plus rewrites), so the per-key invocation
count is bounded regardless of the content's total size.</t>
          <t>When epoch_length = r is specified, the segment key for segment i is an
epoch key derived from the payload key:</t>
          <artwork><![CDATA[
segment_key(i):
  epoch_index = i >> epoch_length
  return KDF(protocol_id, epoch_key_label,
             [payload_key],
             [uint64(epoch_index)], Nk)
]]></artwork>
          <t>At epoch_length = 0 the shift is the identity, so each segment has its
own epoch key.  At a large epoch_length every segment shares one epoch
key.  Implementations <bcp14>MUST</bcp14> apply this derivation at every epoch_length,
including 0, and <bcp14>MUST NOT</bcp14> use payload_key directly as a segment key.
Epoch keys implement the parallel external rekeying pattern of
<xref target="RFC8645"/>, adapted for random-access patterns.</t>
        </section>
        <section anchor="nonce-generation">
          <name>Nonce Generation</name>
          <t>Two nonce modes, random and derived, trade off AEAD flexibility,
storage cost, and trust in a cryptographically secure pseudorandom
number generator (CSPRNG).  Derived mode needs misuse-resistant
authenticated encryption (MRAE) unless the profile's writer discipline
keeps every derived nonce unique.  The chosen mode is part of the
parameter set and <bcp14>MUST</bcp14> be consistent across all segments of a message.</t>
          <figure anchor="fig-nonce-modes">
            <name>The Two Nonce Modes</name>
            <artset>
              <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="128" width="328" viewBox="0 0 328 128" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                  <path d="M 40,80 L 40,96" fill="none" stroke="black"/>
                  <polygon class="arrowhead" points="48,96 36,90.4 36,101.6" fill="black" transform="rotate(90,40,96)"/>
                  <g class="text">
                    <text x="32" y="36">Random:</text>
                    <text x="188" y="36">Derived:</text>
                    <text x="196" y="52">nonce_base</text>
                    <text x="44" y="68">Random(Nn)</text>
                    <text x="176" y="68">|</text>
                    <text x="168" y="84">XOR</text>
                    <text x="256" y="84">((i&lt;&lt;1)|is_final)</text>
                    <text x="176" y="100">|</text>
                    <text x="44" y="116">nonce(i)</text>
                    <text x="196" y="116">nonce(i)</text>
                  </g>
                </svg>
              </artwork>
              <artwork type="ascii-art"><![CDATA[
Random:            Derived:
                   nonce_base
Random(Nn)           |
    |              XOR ((i<<1)|is_final)
    v                |
 nonce(i)           nonce(i)
]]></artwork>
            </artset>
          </figure>
          <t>The two modes differ as follows:</t>
          <table anchor="nonce-mode-comparison">
            <name>Random and derived nonce modes</name>
            <thead>
              <tr>
                <th align="left">Property</th>
                <th align="left">Random nonce mode</th>
                <th align="left">Derived nonce mode</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Per-segment nonce stored</td>
                <td align="left">yes, in segment metadata</td>
                <td align="left">no</td>
              </tr>
              <tr>
                <td align="left">CSPRNG required</td>
                <td align="left">yes</td>
                <td align="left">no</td>
              </tr>
              <tr>
                <td align="left">AEAD requirement</td>
                <td align="left">any AEAD</td>
                <td align="left">MRAE, or any under a nonce-uniqueness discipline</td>
              </tr>
              <tr>
                <td align="left">Rewrite</td>
                <td align="left">fresh nonce each write</td>
                <td align="left">nonce fixed by index, reused on rewrite</td>
              </tr>
              <tr>
                <td align="left">Per-segment AAD</td>
                <td align="left">binds index and finality</td>
                <td align="left">empty when no A_i (index/finality in nonce)</td>
              </tr>
              <tr>
                <td align="left">Minimum nonce size Nn</td>
                <td align="left">no added constraint</td>
                <td align="left">at least 8 octets</td>
              </tr>
            </tbody>
          </table>
          <section anchor="random-nonce-mode">
            <name>Random Nonce Mode</name>
            <t>In random nonce mode (nonce_mode = "random"), each segment gets an
independent random nonce:</t>
            <artwork><![CDATA[
nonce(i) = Random(Nn)
]]></artwork>
            <t>Each segment's nonce is stored in per-segment metadata and <bcp14>MUST</bcp14>
be accessible to any reader that decrypts individual segments.
This mode requires a functioning CSPRNG.  The nonce collision
probability across independently generated per-segment nonces
follows the standard birthday bound.  See <xref target="aead-usage-limits"/>.</t>
            <t>Two optional encryptor-side hedges harden this mode against
different threats.  Hedged randomness (<xref target="hedged-randomness"/>)
mixes in a long-term key and defends against a weak or
predictable CSPRNG.  It does not defend against CSPRNG state
duplication, since identical CSPRNG output still yields identical
hedged output.  Only the plaintext-bound construction
(<xref target="appendix-pt-bound"/>), which mixes in plaintext content,
defends against state duplication.  Both are implementation-local,
leave the wire format unchanged, and are not separate nonce modes.</t>
          </section>
          <section anchor="derived-nonces">
            <name>Derived Nonce Mode</name>
            <t>Derived nonce mode is intended for profiles that do not store a
per-segment nonce.  Nonces are derived deterministically from the
payload schedule.  Derived nonce mode is defined only for AEADs whose
nonce size Nn is at least 8 octets.  The segment index occupies the high
bits of an 8-octet counter and the finality bit occupies the low bit, so
the per-segment AAD need not carry either one.  The XOR is applied to
the last 8 octets of nonce_base, with the remaining octets unchanged:</t>
            <artwork><![CDATA[
nonce(i) = nonce_base[0:Nn-8]
           || (nonce_base[Nn-8:Nn]
               XOR uint64((i << 1) | is_final))
]]></artwork>
            <t>The encoded value (i &lt;&lt; 1) | is_final <bcp14>MUST</bcp14> fit in the low 8 octets of
nonce_base, so the segment index i <bcp14>MUST</bcp14> be less than 2^63.  This caps an
object at 2^63 segments, far beyond any reachable object.  See
<xref target="max-object-size"/> for the resulting size limit.</t>
            <t>A derived nonce is fixed by the segment's index and finality bit, so
re-encrypting a segment at the same index and finality repeats its
nonce.  The repetition is harmless when the plaintext and the associated
data are unchanged, because AEAD.Encrypt is a function of its inputs:
the second invocation reproduces the first one's ciphertext and tells an
adversary nothing it did not already hold.  With changed inputs it is
not harmless.  An MRAE AEAD tolerates it, degrading to equality leakage
rather than plaintext recovery, within the per-segment rewrite limit
given in <xref target="aead-usage-limits"/>.  A non-MRAE AEAD does not:  it leaks
plaintext.  So with a non-MRAE AEAD, derived nonce mode <bcp14>MUST</bcp14> be confined
to a profile whose discipline never re-encrypts a segment with a
different plaintext or associated data.</t>
            <t>Two such disciplines matter here.  A write-once profile rewrites nothing
and performs no length change, so no segment is re-encrypted at all.  An
append-only profile re-encrypts one segment per append, the re-mark that
supersedes the old terminal segment, and that re-mark carries the
segment's existing plaintext and changes only the finality bit, which
changes the nonce (<xref target="append-only"/>).</t>
            <t>Under either discipline the encryptor <bcp14>MUST</bcp14> draw a fresh salt for every
object, so the nonce base differs, and <bcp14>MUST NOT</bcp14> reuse any (i, is_final)
pair under that salt, including after a crash (<xref target="nonce-misuse"/>).</t>
            <t>Because the nonce binds index and finality, an immutable, write-once
profile in derived nonce mode coincides with STREAM (<xref target="related-work"/>)
at the nonce-and-AEAD layer:  a key-derived counter-plus-final-bit nonce
over a per-segment AEAD with no associated data.</t>
          </section>
        </section>
      </section>
      <section anchor="framework-commitment">
        <name>Commitment</name>
        <t>The commitment is a commitment_length-octet value the payload schedule
derives from the CEK, payload_info, and the global associated data G
(<xref target="key-derivation"/>).</t>
        <t>A reader <bcp14>MUST</bcp14> verify the commitment before decrypting any segment,
deriving the expected value from the CEK, payload_info, and G and
comparing it octet-for-octet with the stored value, and <bcp14>MUST</bcp14> treat a
mismatch as an authentication failure for the object.  A mismatch
indicates a wrong key, parameter set, or G, or a corrupted header.  This
is the ra-CMT context commitment (<xref target="ra-cmt"/>).  The reduction outline
and bound are in <xref target="key-commitment"/>.</t>
        <t>Because the commitment is fixed at creation, G is immutable:  changing
it invalidates the stored commitment, while segment contents stay
rewritable through the snapshot authenticator
(<xref target="snapshot-authenticator"/>).</t>
        <t>G defaults to the empty octet string, so an application that supplies no
context commits over an empty final element.  A wrong G fails the
commitment check (<xref target="full-decryption"/>) the same way a wrong CEK does
(<xref target="parameter-mismatch"/>).</t>
      </section>
      <section anchor="snapshot-authenticator">
        <name>Snapshot Authenticator</name>
        <t>The snapshot authenticator binds the current segment set into the public
snapshot value.  A SEAL profile selects one with snap_id.</t>
        <section anchor="snapshot-interface">
          <name>Interface and Requirements</name>
          <t>A snapshot authenticator defines a per-segment input, one value per
segment.  It produces and checks a snapshot value over the (index,
input) set and the count with two operations:</t>
          <dl>
            <dt>snapshot():</dt>
            <dd>
              <t>Produce the snapshot value over the current (index, input) set and
the count n_seg.</t>
            </dd>
            <dt>verify(snapshot):</dt>
            <dd>
              <t>Recompute the snapshot value over the current (index, input) set and
the count, and accept only if it equals the stored snapshot under a
constant-time comparison.</t>
            </dd>
          </dl>
          <t>The per-segment input is the segment's metadata leaf, binding the
segment's index and presented nonce.  A CEK holder can reproduce that
binding for altered content.  Setting the segment commitment binds the
segment's ciphertext into the leaf, so changing the ciphertext changes
the snapshot value.  The commitment is therefore needed where the object
is shared among CEK holders, and <bcp14>MAY</bcp14> be omitted where the CEK has a
single holder.</t>
          <t>The segment commitment is necessary for that binding but not sufficient.
An ordering is linear when a holder of the snapshot key can solve for
a different segment set giving the same snapshot value, and strict when
finding one is a collision problem.  Under a linear ordering a snap_key
holder can find such a set even when every leaf commits to its content,
so content binding against a CEK holder requires the segment commitment,
a strict ordering, and a snapshot authenticated outside the construction
(<xref target="adversary-model"/>).</t>
          <t>Every authenticator supports the whole-object target:  verify the full
(index, input) set and the count.  An authenticator <bcp14>MAY</bcp14> additionally
support a subset target:  verify that a designated subset of (index,
input) pairs is included at their positions in the recorded set, without
the rest.  The snapshot value stays a single target-independent value of
length Na, with no per-segment proof stored.</t>
          <t>To change a stored object, an authenticator updates its snapshot value.
It <bcp14>MAY</bcp14> provide add(i, input), remove(i, input), and set_length(n) to
update the value in place from the changed segment alone, or it <bcp14>MAY</bcp14>
recompute the value over the changed (index, input) set.</t>
          <t>A snapshot update is not atomic against a second concurrent update, so a
consuming protocol <bcp14>MUST</bcp14> serialize concurrent updates to one object.
This document requires that a serialization exist and does not say how
to obtain it, which remains a storage-transaction concern of the
consuming protocol.  Serialization is needed whether the authenticator
recomputes the value or updates it in place, and only the failure
differs.  An authenticator that recomputes over the full set binds
whatever set it read, which is neither the state before the interleaved
update nor the state after.  One that updates in place loses an update,
when two read-modify-write cycles on the stored value interleave and the
later write never observed the earlier delta.  This is the concurrent
case, distinct from the crash case of <xref target="rewrite-hazards"/>, where one
update is interrupted rather than two interleaved.</t>
          <t>The scheme's RewriteSeg and SnapVerify (<xref target="raae-writable"/>) are realized
from these operations.  SnapVerify(S, segments, snapshot) checks a
stored snapshot:</t>
          <ol spacing="normal" type="1"><li>
              <t>Let n_seg be the number of present segments.</t>
            </li>
            <li>
              <t>Verify that the present segments occupy exactly the indices
  0..n_seg-1, each once.</t>
            </li>
            <li>
              <t>Call verify(snapshot) over the present (index, input) set and the
  count n_seg.</t>
            </li>
          </ol>
          <t>Finality is not checked in SnapVerify: is_final is authenticated by the
segment AEAD at decryption, and <xref target="full-decryption"/> rejects a present
set whose highest-indexed segment does not carry is_final = 1.</t>
          <t>A duplicate or missing index is caught only by step 2, because an
authenticator's verify <bcp14>MAY</bcp14> accept a malformed index multiset.  An
implementation <bcp14>MUST NOT</bcp14> skip the index-set check.</t>
          <t>A conforming authenticator's snapshot() <bcp14>MUST</bcp14> bind both the (index,
input) set and the count n_seg, so a verifier detects any added,
dropped, reordered, re-marked, or otherwise altered segment, and the
snapshot value <bcp14>MUST</bcp14> be unforgeable by a party without the
authenticator's key, under that authenticator's security assumption.</t>
          <t>The snapshot value is a fixed-length value of Na octets, with Na = 0
meaning no value.</t>
          <t>A segment's finality is a function of its index and the count:</t>
          <artwork><![CDATA[
is_final(i) = 1 if i = n_seg - 1, else 0
]]></artwork>
          <t>It is carried by that segment's input.  Because finality follows the
count, changing n_seg re-marks the boundary segment on its own, so
rewrite, extend, and truncate are one update over the segments whose
input changes:</t>
          <ol spacing="normal" type="1"><li>
              <t>Under the current count, remove each changed segment's current
  input (remove(i, input)).  The current n_seg fixes which segment
  is terminal, so each removal carries that segment's current finality.</t>
            </li>
            <li>
              <t>Set the length to the new count (set_length(n)).</t>
            </li>
            <li>
              <t>Under the new count, re-encrypt each surviving changed segment under
  its new finality and add its new input (add(i, input)).  New
  segments are added here.  Discarded segments are not added back.</t>
            </li>
            <li>
              <t>Call snapshot(), which recomputes the snapshot value over the new
  count and segment set.</t>
            </li>
          </ol>
          <t>Each operation is an instance of that shape over different segments:</t>
          <table anchor="length-change-table">
            <name>Rewrite, extend, and truncate</name>
            <thead>
              <tr>
                <th align="left">Operation</th>
                <th align="left">Count</th>
                <th align="left">Inputs removed</th>
                <th align="left">Inputs added</th>
                <th align="left">Terminal re-mark</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Rewrite</td>
                <td align="left">unchanged</td>
                <td align="left">the changed segment</td>
                <td align="left">the changed segment</td>
                <td align="left">none</td>
              </tr>
              <tr>
                <td align="left">Extend by k</td>
                <td align="left">n_seg to n_seg+k</td>
                <td align="left">old terminal</td>
                <td align="left">old terminal and k new</td>
                <td align="left">old final, 1 to 0 (none if empty)</td>
              </tr>
              <tr>
                <td align="left">Truncate to m</td>
                <td align="left">n_seg to m</td>
                <td align="left">the tail and old terminal</td>
                <td align="left">new terminal</td>
                <td align="left">new final, 0 to 1 (none if m=0)</td>
              </tr>
            </tbody>
          </table>
          <t>This sequence uses remove, the mutable-authenticator path.  One that
omits remove instead resets and re-adds the surviving segments to
rebuild the value.</t>
        </section>
        <section anchor="snapshot-none">
          <name>None</name>
          <t>This selection configures no snapshot authenticator:  no snapshot value
is produced (Na = 0), snapshot() and verify() are no-ops, and a mutable
object rests on per-segment authentication alone.  Such a profile <bcp14>MUST
NOT</bcp14> produce the empty object (n_seg = 0).  With no snapshot value to
bind the zero count, a truncation that removed every segment would be
indistinguishable from a legitimate empty object, so a valid object
always has at least one segment (<xref target="snapshot-limitations"/>).</t>
        </section>
      </section>
      <section anchor="segment-subroutines">
        <name>Segment Algorithms</name>
        <t>The construction defines the per-segment subroutines EncryptSegment,
DecryptSegment, and RewriteSegment.  In this random-access construction,
is_final is an explicit input to each subroutine.  Full-message
encryption derives it from the total segment count n_seg, while
random-access decryption and rewrite callers supply it directly.  The
full-message procedures (<xref target="full-encryption"/>, <xref target="full-decryption"/>,
<xref target="extend"/>) and the rewrite procedure (<xref target="full-rewrite"/>) compose them.</t>
        <t>Each subroutine is the cryptographic core of one operation of the base
or extended raAE interface (<xref target="raae-syntax"/>, <xref target="raae-writable"/>),
refining <xref target="op-mapping"/> to the signature level.  The primitive's
position becomes the explicit arguments i and is_final, and its state is
the payload schedule, which the segment_key(i), nonce(i), and
segment_aad calls below read from context rather than take as an
argument.  A segment's plaintext is P_i, and its stored record is
stored_i = (nonce_metadata_i, ct_i, tag_i).  leaf(i) is the segment's
leaf (<xref target="snapshot-interface"/>), and new_leaf(i) the leaf of a rewritten
segment.</t>
        <table anchor="subroutine-mapping">
          <name>Segment subroutines and the primitive operations they realize</name>
          <thead>
            <tr>
              <th align="left">Subroutine</th>
              <th align="left">Realizes</th>
              <th align="left">Composed by</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">EncryptSegment</td>
              <td align="left">the encryption core of EncSeg</td>
              <td align="left">
                <xref target="full-encryption"/> and <xref target="extend"/>, which add the snapshot bookkeeping</td>
            </tr>
            <tr>
              <td align="left">DecryptSegment</td>
              <td align="left">DecSeg</td>
              <td align="left">
                <xref target="full-decryption"/></td>
            </tr>
            <tr>
              <td align="left">RewriteSegment</td>
              <td align="left">the encryption core of RewriteSeg</td>
              <td align="left">
                <xref target="full-rewrite"/> and <xref target="extend"/>, which add the snapshot bookkeeping</td>
            </tr>
          </tbody>
        </table>
        <t>These subroutines emit ct_i and tag_i as separate fields, with ct_i of
length len(P_i), at most segment_max.  DecryptSegment splits stored_i
using the ciphertext length the consuming format conveys
(<xref target="concrete-segment-aad"/>).</t>
        <t>In every subroutine, i is the segment index (a non-negative integer),
is_final is 1 for the last segment and 0 for all others, A_i is the
caller-supplied associated data for segment i, and P_i is the segment
plaintext.  The subroutines call segment_key(i) and nonce(i) as defined
in <xref target="key-derivation"/>, with nonce(i) following the chosen nonce_mode,
and segment_aad(i, is_final, A_i) as defined in
<xref target="concrete-segment-aad"/>.</t>
        <t>nonce_metadata_i denotes the stored nonce metadata for segment i:
nonce(i) when nonce_mode is "random", and empty when it is "derived".
In random mode DecryptSegment reads its nonce from nonce_metadata_i,
and in derived mode it recomputes nonce(i).</t>
        <section anchor="encryptsegment">
          <name>EncryptSegment</name>
          <artwork><![CDATA[
EncryptSegment(i, is_final, A_i, P_i):
  key   = segment_key(i)
  nonce = nonce(i)
  aad   = segment_aad(i, is_final, A_i)
  C_i   = AEAD.Encrypt(key, nonce, aad, P_i)
  split C_i into ct_i and tag_i
  return (nonce_metadata_i, ct_i, tag_i)
]]></artwork>
          <t>AEAD.Encrypt and AEAD.Decrypt are the interfaces of <xref target="RFC5116"/> Sections
2.1 and 2.2.  For an AEAD whose ciphertext places the tag in its final
Nt octets, ct_i is the first len(P_i) octets and C_i = ct_i || tag_i.</t>
          <t>The caller supplies the segment's leaf to the snapshot authenticator
(<xref target="snapshot-interface"/>).  EncryptSegment itself does no snapshot work.</t>
        </section>
        <section anchor="decryptsegment">
          <name>DecryptSegment</name>
          <t>DecryptSegment returns the segment plaintext, or a decryption error:</t>
          <artwork><![CDATA[
DecryptSegment(i, is_final, A_i, stored_i):
  nonce_metadata_i, ct_i, tag_i = stored_i
  key   = segment_key(i)
  nonce = nonce_metadata_i or nonce(i)
  aad   = segment_aad(i, is_final, A_i)
  C_i   = ct_i || tag_i
  P_i   = AEAD.Decrypt(key, nonce, aad, C_i)
          (on verification failure, return a decryption error)
  return P_i
]]></artwork>
        </section>
        <section anchor="rewritesegment">
          <name>RewriteSegment</name>
          <t>RewriteSegment assumes the caller has already verified the commitment or
otherwise confirmed it holds the correct CEK.  A rewrite under the wrong
key produces unreadable ciphertext and corrupts the snapshot
authenticator's state.  The error is detectable only on a subsequent
read.</t>
          <t>RewriteSegment(i, is_final, A_i, new_P_i) is defined as
EncryptSegment(i, is_final, A_i, new_P_i): a rewrite is a fresh
encryption of the new plaintext new_P_i.  The output record
new_stored_i replaces the stored record for segment i.</t>
          <t>RewriteSegment produces the replacement record new_stored_i only.  The
caller updates the snapshot authenticator with the old and new leaves,
calling remove(i, leaf(i)) then add(i, new_leaf(i)) (<xref target="full-rewrite"/>).</t>
        </section>
      </section>
      <section anchor="toplevel-algorithms">
        <name>Top-level Algorithms</name>
        <t>The top-level algorithms compose the segment subroutines
(<xref target="segment-subroutines"/>) over complete messages.  They call the
snapshot-authenticator operations of <xref target="snapshot-authenticator"/>
(snapshot() and verify() in every profile, and add(i, input), remove(i,
input), and set_length(n) in a mutable or append-only profile) without
referring to how any is computed.  The profile's selected authenticator
realizes those operations (<xref target="snapshot-interface"/>).</t>
        <t>These procedures do not expose per-segment associated data, so they pass
an empty A_i to each subroutine.  An application that needs per-segment
A_i calls the subroutines directly.</t>
        <section anchor="read-only-ops">
          <name>Read-Only Operations</name>
          <t>Encryption and decryption are available in every SEAL profile.  They
write a message once and read individual segments.  Neither rewrites a
stored segment.  When the profile configures no snapshot authenticator,
the snapshot steps below are omitted, and a reader relies on per-segment
authentication alone.</t>
          <section anchor="full-encryption">
            <name>Encryption</name>
            <t>Encryption runs in two phases.  The first derives the per-message
schedule and writes the commitment.  The second encrypts each segment
independently, feeds its input to the snapshot authenticator, and then
calls snapshot() to bind the whole (index, input) set and the count.
Because the segments are independent, the second phase may encrypt them
in any order or in parallel.  The snapshot calls mutate one value under
a single writer, so encryption is never the concurrent case that
<xref target="snapshot-interface"/> requires a protocol to order.</t>
            <figure anchor="fig-encrypt-build">
              <name>Key Schedule and Segment Encryption</name>
              <artset>
                <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="256" width="528" viewBox="0 0 528 256" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
                    <path d="M 24,112 L 24,128" fill="none" stroke="black"/>
                    <path d="M 64,48 L 64,64" fill="none" stroke="black"/>
                    <path d="M 64,96 L 64,112" fill="none" stroke="black"/>
                    <path d="M 152,112 L 152,128" fill="none" stroke="black"/>
                    <path d="M 152,160 L 152,176" fill="none" stroke="black"/>
                    <path d="M 152,208 L 152,224" fill="none" stroke="black"/>
                    <path d="M 240,112 L 240,128" fill="none" stroke="black"/>
                    <path d="M 24,112 L 240,112" fill="none" stroke="black"/>
                    <polygon class="arrowhead" points="248,128 236,122.4 236,133.6" fill="black" transform="rotate(90,240,128)"/>
                    <polygon class="arrowhead" points="160,224 148,218.4 148,229.6" fill="black" transform="rotate(90,152,224)"/>
                    <polygon class="arrowhead" points="160,176 148,170.4 148,181.6" fill="black" transform="rotate(90,152,176)"/>
                    <polygon class="arrowhead" points="160,128 148,122.4 148,133.6" fill="black" transform="rotate(90,152,128)"/>
                    <polygon class="arrowhead" points="72,64 60,58.4 60,69.6" fill="black" transform="rotate(90,64,64)"/>
                    <polygon class="arrowhead" points="32,128 20,122.4 20,133.6" fill="black" transform="rotate(90,24,128)"/>
                    <g class="text">
                      <text x="44" y="36">CEK,</text>
                      <text x="84" y="36">salt</text>
                      <text x="48" y="84">payload</text>
                      <text x="116" y="84">schedule</text>
                      <text x="44" y="148">commitment</text>
                      <text x="152" y="148">payload_key</text>
                      <text x="252" y="148">snap_key</text>
                      <text x="96" y="196">EncryptSegment(i,</text>
                      <text x="188" y="196">P_i)</text>
                      <text x="248" y="196">using</text>
                      <text x="320" y="196">payload_key</text>
                      <text x="404" y="196">(one</text>
                      <text x="440" y="196">per</text>
                      <text x="492" y="196">segment)</text>
                      <text x="128" y="244">ct_i,</text>
                      <text x="176" y="244">tag_i</text>
                    </g>
                  </svg>
                </artwork>
                <artwork type="ascii-art"><![CDATA[
   CEK, salt
       |
       v
  payload schedule
       |
  +----+----------+----------+
  v               v          v
commitment   payload_key   snap_key
                  |
                  v
   EncryptSegment(i, P_i)   using payload_key   (one per segment)
                  |
                  v
             ct_i, tag_i
]]></artwork>
              </artset>
            </figure>
            <t>An application that writes a new message <bcp14>MUST</bcp14> generate a fresh,
uniformly random salt.  Given a CEK, that salt, a parameter set, G, and
a plaintext P split into segments P_0 through P_{n_seg-1}:</t>
            <artwork><![CDATA[
derive  commitment, payload_key, snap_key from the payload schedule
        (and nonce_base, in derived mode)
store   commitment

for i in 0 .. n_seg-1:
    is_final = 1 if i = n_seg-1, else 0
    stored_i = EncryptSegment(i, is_final, empty, P_i)
    store stored_i

if snapshot authentication is enabled:
    snapshot = snapshot()
    store snapshot
]]></artwork>
            <t>A zero-length plaintext produces a single segment of length 0 with
is_final = 1.</t>
          </section>
          <section anchor="full-decryption">
            <name>Decryption of Segment i</name>
            <t>Opening a segment is a local operation:  check the commitment to reject
a wrong key early, then AEAD-decrypt the one segment.  This yields
per-segment authenticity over the ciphertext core, the segment index,
and the finality bit.  Under a snapshot authenticator, whole-set
authenticity is a separate and stronger check that requires the full
present segment set.  It detects any altered segment set, including
same-index rollback to an older sibling (<xref target="snapshot-interface"/>).  A
reader holding only one segment gets per-segment authenticity but <bcp14>MUST
NOT</bcp14> claim snapshot integrity until it runs SnapVerify
(<xref target="snapshot-authenticator"/>).  A profile with no snapshot authenticator
defines no snapshot, so per-segment authenticity is the whole integrity
guarantee.</t>
            <t>Given the CEK, salt, parameter set, G, segment index i, finality status,
and the stored ciphertext segment for index i:</t>
            <artwork><![CDATA[
derive  commitment from CEK, salt, and G
derive  payload_key, snap_key from CEK and salt
if stored commitment != derived commitment:  return error
P_i = DecryptSegment(i, is_final, empty, stored_i)
       (return its error on failure)
if snapshot authentication is enabled and the full set is available:
    if SnapVerify(snapshot) fails:  return error  (do not deliver P_i)
return P_i
]]></artwork>
            <t>Here SnapVerify is the three-argument SnapVerify(S, segments, snapshot)
of <xref target="raae-writable"/>, with S the derived schedule and segments the
present set, each carrying the authenticator's per-segment input
(<xref target="snapshot-interface"/>).</t>
            <t>Whole-object SnapVerify needs the leaf of every segment
(<xref target="snapshot-interface"/>), so a reader that streams segments in order
cannot gate their release on whole-object snapshot integrity without
first buffering those leaves or using a layout that carries them in a
header.  Where the authenticator supports a subset target, a reader can
instead verify a subset it holds against the snapshot without the leaves
of the other segments.  Delivering on per-segment authenticity alone
forgoes snapshot freshness for that segment (<xref target="snapshot-limitations"/>).
A streaming reader likewise cannot rule out truncation before the end of
the stream:  plaintext delivered before the highest-indexed segment
verifies under is_final = 1, and before SnapVerify passes where a
snapshot authenticator is configured, <bcp14>MUST</bcp14> be treated as unverified with
respect to completeness.</t>
            <t>A decryptor <bcp14>MUST</bcp14> reject a truncated object:  one whose highest-indexed
present segment carries is_final = 0 is incomplete, and the decryptor
<bcp14>MUST</bcp14> fail rather than return the partial plaintext.</t>
            <t>The check works because the application supplies the segment count
n_seg, from which the decryptor derives the finality each segment must
carry (<xref target="segment-subroutines"/>).  It then verifies the final segment
under is_final = 1.  A truncated object, whose last surviving segment
was written as non-final, fails that verification.  The finality bit is
bound per segment and unforgeable without the CEK, through the nonce or
the segment AAD per the nonce mode (<xref target="concrete-segment-aad"/>).</t>
            <t>Under a write-once profile no segment ever carried an earlier terminal
form, so an adversary cannot present a valid is_final = 1 segment at a
truncated boundary:  it cannot re-mark a non-final segment, and this
check detects every dropped trailing segment.  A profile that changes
length re-marks a terminal segment (<xref target="extend"/>), so one segment may
have carried is_final = 1 under an earlier nonce.  An adversary can
replay that retained terminal ciphertext at the shorter count, which
this check alone accepts.  SnapVerify over the complete segment set
then rejects the replay.  The mutable profile requires a snapshot
authenticator, so SnapVerify always runs there
(<xref target="snapshot-limitations"/>).</t>
            <t>Authorized truncation by the CEK holder re-encrypts the new final
segment under is_final = 1 with a fresh nonce (<xref target="extend"/>), so a
legitimately truncated object still ends with is_final = 1 and verifies.
This check needs no snapshot authenticator.</t>
            <t>Truncation to an empty object is covered too.  Without a snapshot
authenticator a valid object has at least one segment, so a decryptor
<bcp14>MUST</bcp14> reject one with none.  With a snapshot authenticator the snapshot
binds the count, making the empty object (n_seg = 0) a distinct
authenticated state (<xref target="snapshot-limitations"/>).</t>
            <t>On a commitment mismatch the implementation <bcp14>MUST NOT</bcp14> proceed with
decryption, <bcp14>SHOULD</bcp14> zeroize derived key material, and <bcp14>MUST</bcp14> return an
error.  The SnapVerify gate in the procedure above runs whenever a
snapshot authenticator is configured and the full present set is
available, for example a full read or an integrity audit.</t>
            <t>Decryption can fail in up to three distinguishable ways:</t>
            <table anchor="decryption-failures">
              <name>Decryption failure conditions</name>
              <thead>
                <tr>
                  <th align="left">Failure</th>
                  <th align="left">Cause</th>
                </tr>
              </thead>
              <tbody>
                <tr>
                  <td align="left">Commitment mismatch</td>
                  <td align="left">wrong key or parameters</td>
                </tr>
                <tr>
                  <td align="left">AEAD verification failure</td>
                  <td align="left">corrupted or tampered segment</td>
                </tr>
                <tr>
                  <td align="left">Snapshot mismatch</td>
                  <td align="left">segment set or count modified (snapshot authenticator only)</td>
                </tr>
              </tbody>
            </table>
            <t>Implementations <bcp14>SHOULD</bcp14> report these as distinct error conditions for
local diagnosis, but <bcp14>SHOULD</bcp14> return a single opaque error to untrusted
callers to avoid leaking an oracle (for example, distinguishing "wrong
key" from "tampered segment" over a network).</t>
          </section>
        </section>
        <section anchor="rewritable-ops">
          <name>Rewritable Operations</name>
          <t>Rewriting is available only in a mutable profile, which requires a
snapshot authenticator.  Length change is a separate operation
(<xref target="extend"/>), available in both directions in a mutable profile and in
the append direction alone in an append-only profile (<xref target="append-only"/>).
The procedure below is written against the in-place update path (add,
remove, set_length; <xref target="snapshot-interface"/>).  Under an authenticator
that recomputes instead, the remove, add, and set_length calls in this
procedure collapse into a single snapshot() over the updated (index,
input) set, and the operations are otherwise identical.  A caller that
cannot recover a re-encrypted segment's plaintext cannot perform it.</t>
          <section anchor="full-rewrite">
            <name>Rewriting Segment i</name>
            <t>A rewrite touches exactly one segment's ciphertext, and no other segment
is read or decrypted (<xref target="snapshot-authenticator"/>).  In-place update
trusts, rather than re-verifies, the stored snapshot state, whereas an
authenticator that recomputes rebuilds the value from the stored
per-segment leaves and trusts none.</t>
            <t>The procedure is:</t>
            <artwork><![CDATA[
read leaf(i)
new_stored_i = RewriteSegment(i, is_final, empty, new_P_i)
remove(i, leaf(i))
add(i, new_leaf(i))
snapshot = snapshot()
store new_stored_i, snapshot
]]></artwork>
            <t>In derived nonce mode the nonce for segment i is deterministic, so a
rewrite reuses the same nonce under a key whose derivation context is
identical.  This is safe because a mutable profile that selects derived
nonce mode requires an MRAE AEAD, which tolerates the reuse
(<xref target="derived-nonces"/>) within the per-segment rewrite limit
(<xref target="rewrite-budget-security"/>).</t>
            <t>The stored snapshot cannot be validated during an in-place rewrite:
SnapVerify recomputes the authenticator from every segment's tag and so
requires reading all tags (<xref target="snapshot-authenticator"/>).  Because the
rewrite trusts the stored snapshot state, the writer <bcp14>MUST</bcp14> take it from
locally trusted storage or run SnapVerify first.  Otherwise a storage
adversary can roll the stored snapshot back and have the writer rebuild
on it, laundering the rollback into a snapshot that verifies going
forward (<xref target="snapshot-limitations"/>).  Full validation is a separate
operation performed with access to all tags, for example on a full read
or an integrity audit.</t>
          </section>
        </section>
        <section anchor="extend">
          <name>Changing Message Length</name>
          <t>An application that holds the CEK <bcp14>MAY</bcp14> change a stored message's length
in either direction: appending new segments, or truncating to a prefix.
The two directions share one shape.  Exactly one retained segment, the
old or the new terminal one, is re-encrypted to move the finality bit,
with none re-encrypted when appending from the empty object or
truncating to it.  Every other changed segment is removed or added by
tag without re-encryption, and the snapshot is updated over the new
count (<xref target="length-change-table"/>).  Both reuse the existing salt: an
application extending an existing message <bcp14>MUST</bcp14> reuse the salt from the
object it extends.  A fresh salt would change every payload schedule
output and force re-encryption of the retained segments.</t>
          <figure anchor="alg-append">
            <name>Append</name>
            <artwork><![CDATA[
def Append(P_new):
  k = len(P_new)
  t = n_seg - 1

  if n_seg > 0:
    P_t = DecryptSegment(t, 1, empty, stored_t)
    new_stored_t = RewriteSegment(t, 0, empty, P_t)
    remove(t, leaf(t))

  set_length(n_seg + k)

  if n_seg > 0:
    store new_stored_t
    add(t, new_leaf(t))

  for j in n_seg .. n_seg+k-1:
    is_final = 1 if j == n_seg+k-1 else 0
    stored_j = EncryptSegment(j, is_final, empty, P_new[j-n_seg])
    store stored_j
    add(j, leaf(j))

  store snapshot()
]]></artwork>
          </figure>
          <figure anchor="alg-truncate">
            <name>Truncate</name>
            <artwork><![CDATA[
def Truncate(m):
  t = m - 1

  if m > 0:
    P_t = DecryptSegment(t, 0, empty, stored_t)
    new_stored_t = RewriteSegment(t, 1, empty, P_t)
    remove(t, leaf(t))

  for j in m .. n_seg-1:
    remove(j, leaf(j))

  set_length(m)

  if m > 0:
    store new_stored_t
    add(t, new_leaf(t))

  discard segments m .. n_seg-1
  store snapshot()
]]></artwork>
          </figure>
          <t>With in-place update each add and remove takes the segment's stored tag,
which already encodes that segment's is_final bit, so an implementation
never tracks finality separately.</t>
          <t>A botched in-place update corrupts the snapshot authenticator's state
silently, surfacing only at a later SnapVerify.  An implementation <bcp14>MAY</bcp14>
run SnapVerify over the new segment set immediately after a length
change to catch this.  A botched update yields a value that the
from-scratch recomputation will not match, turning a silent corruption
into a caught error.  An authenticator that recomputes rebuilds the
snapshot from the stored per-segment leaves on every update, so it has
no analogous silent-corruption failure mode.</t>
          <t>Both operations count against the same per-CEK AEAD usage budget as
initial encryption (<xref target="aead-usage-limits"/>).  Each re-encrypts one
terminal segment, except a truncate to the empty object (m = 0), which
re-encrypts none.  In derived nonce mode the nonce for the re-marked
segment is fixed by its index and finality bit.  Re-marking flips the
finality bit, so this nonce differs from the segment's previous one, but
repeated length changes in both directions can make the same (index,
finality bit) pair recur, and only an MRAE AEAD tolerates the resulting
nonce reuse (<xref target="key-derivation"/>).  An append-only profile admits no
truncation, so no pair recurs and any AEAD is safe (<xref target="append-only"/>).</t>
          <t>Applications that do not need length changes <bcp14>MAY</bcp14> forbid them.
The salt-reuse requirement applies only when a length change is
performed.  An application that re-encrypts the entire content can
generate a fresh salt and is not bound by the constraints in this
section.</t>
          <section anchor="append-only">
            <name>Appending Under an Append-Only Profile</name>
            <t>An append-only profile admits the append direction of this section
(<xref target="alg-append"/>) and forbids truncation.</t>
            <t>An encryptor under an append-only profile <bcp14>MUST NOT</bcp14> rewrite a segment
with a different plaintext or associated data, and <bcp14>MUST NOT</bcp14> reduce
n_seg.</t>
            <t>The first rule is what lets the profile pair a derived nonce with any
AEAD, including a non-MRAE one.  At a fixed index and finality the key
and the nonce are already fixed by the payload schedule, so the
plaintext and the associated data are the only inputs that can differ,
and the rule forbids exactly those.  No nonce ever carries two
different plaintexts, which is the condition <xref target="derived-nonces"/> sets
for a non-MRAE AEAD.</t>
            <t>The re-mark satisfies the first rule without an exception:  it changes
only the finality bit, not the plaintext or associated data
(<xref target="derived-nonces"/>).</t>
            <t>The second rule makes the profile append-only rather than
non-rewriting.  It forbids the truncate direction, so a stored object
only grows, and an index the object has spent is never freed for a later
append to fill with different content.</t>
            <t>An append re-encrypts one retained segment, so each segment is encrypted
at most twice, and an epoch key covers at most 2^(epoch_length + 1)
segment encryptions (<xref target="max-object-size"/>).</t>
            <t>Because the re-mark preserves the segment's length, an append to an
object whose terminal segment is short leaves a short interior segment,
which a layout with uniformly sized interior segments cannot represent.
A consuming protocol using this profile supplies a serialization that
conveys each segment's ciphertext length (<xref target="concrete-segment-aad"/>).</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-properties">
      <name>Security Analysis</name>
      <t>The formal proofs are not reproduced here.  The ra-ROR and ra-CMT
notions are taken unchanged from <xref target="FLRR25"/>, which proved them for a
construction that instantiates the same component contracts other than
the snapshot authenticator (<xref target="framing"/>).  SEAL's analysis of those
notions follows the same structure.  Snapshot integrity is the one
notion this document defines.  The configured authenticator's definition
argues its snapshot-integrity bound (<xref target="snapshot-security"/>), and
integrating that argument into a combined proof is deferred to the
companion proof <xref target="SEALPROOFS"/> (in preparation).  The limits of
<xref target="aead-usage-limits"/> are operational deployment bounds, not proof
obligations.</t>
      <section anchor="raae-security">
        <name>Security Notions</name>
        <t>raAE has two security tiers.  The base tier comprises the notions
inherited from <xref target="FLRR25"/>:  ra-ROR, ra-CMT, and its position-choosing
variant ra-CMT-p, summarized here.  The extension tier adds one notion,
snapshot integrity, defined by this document.  A construction <bcp14>MAY</bcp14>
provide the base tier only.  Advantage definitions and proofs for
ra-ROR, ra-CMT, and ra-CMT-p are in <xref target="FLRR25"/>.</t>
        <section anchor="ra-ror">
          <name>ra-ROR</name>
          <t>ra-ROR (random-access real-or-random) is the joint confidentiality and
authenticity notion for raAE in a multi-user, nonce-respecting setting.
An adversary with adaptive encryption and decryption access across many
key instances, sessions, and arbitrary positions cannot distinguish real
ciphertexts and headers from random, and cannot make an out-of-context
ciphertext segment decrypt.  The game is defined in <xref target="FLRR25"/>.</t>
          <t>The encryption core of the extension operations is ordinary EncSeg.
A RewriteSeg produces its replacement ciphertext as a repeated
EncSeg at the same position, and appending is EncSeg at fresh
positions plus one RewriteSeg of the old final segment.</t>
          <t>In random nonce mode these draw fresh nonces and stay within the
nonce-respecting ra-ROR game.  In derived nonce mode the analysis turns
on whether the profile permits a rewrite in place.</t>
          <t>Where it does, a rewrite repeats the position's derived nonce with new
content.  That is a deliberate nonce-repeating query, and the underlying
MRAE AEAD handles it under the equality-leakage relaxation documented
for derived nonce mode (<xref target="appendix-nonce-modes"/>), not the unmodified
nonce-respecting game.</t>
          <t>Where it does not, no query repeats a position with new content.  The
write-once profile re-encrypts nothing beyond an identical replay of an
interrupted write.  The append-only profile re-encrypts only at the
append's RewriteSeg, which flips the finality bit and so writes a
position the initial write did not use, and at an identical replay.
Both profiles bind every position to one set of inputs
(<xref target="append-only"/>), so their repeated queries carry the inputs of the
query they repeat.  A reduction answers such a query from the first
one's output, and both profiles stay in the nonce-respecting game and
need no MRAE AEAD (<xref target="derived-nonces"/>).</t>
          <t>These operations also maintain a snapshot value.  That value is
outside the <xref target="FLRR25"/> syntax.  It is governed not by ra-ROR but by
the snapshot integrity notion of <xref target="snapshot-integrity"/>.</t>
        </section>
        <section anchor="ra-cmt">
          <name>ra-CMT</name>
          <t>ra-CMT (random-access context commitment) is the segment-level
commitment notion:  no single ciphertext segment decrypts successfully
under two different decryption contexts (key, nonce, global associated
data, and per-segment associated data).  In this position-respecting
notion the two contexts share a position.  Because the scheme is random
access, committing one segment's context commits the full ciphertext's
context.  ra-CMT is defined in <xref target="FLRR25"/>.</t>
          <t>ra-CMT is distinct from the per-AEAD notions CMT-1 and CMT-4 of
<xref target="RFC9771"/>: a scheme can achieve ra-CMT through an external commitment
mechanism even when its underlying AEAD commits to nothing.  The
Invisible Salamanders attacks (<xref target="DGRW18"/>) show what a non-committing
AEAD permits, and <xref target="ADG22"/> frames it as a key-commitment failure with
fixes.</t>
        </section>
        <section anchor="ra-cmt-p">
          <name>ra-CMT-p</name>
          <t>ra-CMT-p is the position-choosing variant of ra-CMT:  the two decryption
contexts need not share a position, so the adversary binds a segment's
content to a position of its choice.</t>
          <t>Under honest keys a construction inherits ra-CMT-p from the underlying
AEAD's commitment.  Against a holder of the CEK it does not follow from
per-segment AEAD alone:  a snapshot authenticator restores it by
committing each segment's content and ordering segments strictly, with
the snapshot value authenticated outside the construction
(<xref target="adversary-model"/>, <xref target="appendix-commitment"/>).</t>
        </section>
        <section anchor="snapshot-integrity">
          <name>Snapshot Authentication</name>
          <t>Per-segment AEAD authenticates a segment at its position, but it does
not authenticate the current object snapshot: which set of segments
belongs to the current stored object state.  An adversary with write
access to stored segments can silently substitute an old valid
same-index segment or delete a segment, and per-segment AEAD
verification at each presented segment still passes.  (A segment moved
to a different index fails its AEAD check through the index binding of
<xref target="concrete-segment-aad"/>.)</t>
          <t>Snapshot authentication covers that set.  The resulting notion is
snapshot integrity.  Its interface and requirements are in
<xref target="snapshot-interface"/>, and its general bound is in
<xref target="snapshot-security"/>.  A combined formal treatment with the ra-ROR
framework is in preparation (<xref target="SEALPROOFS"/>).</t>
          <t>A construction <bcp14>MAY</bcp14> omit snapshot integrity, providing only the
per-segment guarantees and ra-CMT.  SEAL provides it under a snapshot
authenticator and omits it otherwise.</t>
        </section>
      </section>
      <section anchor="raae-relations">
        <name>Relations to Other Notions</name>
        <dl>
          <dt>AEAD (<xref target="RFC5116"/>):</dt>
          <dd>
            <t>raAE generalizes AEAD to multi-segment content with arbitrary-order
encryption.  A single-segment raAE is an AEAD.</t>
          </dd>
          <dt>nOAE2 (<xref target="Tink"/>):</dt>
          <dd>
            <t>nOAE2 is the nonce-based online authenticated encryption notion for
schemes that encrypt in order and support random-access decryption.
Hoang and Shen introduced nOAE2 in their analysis of Tink Streaming
AEAD (<xref target="Tink"/>), where they also show STREAM satisfies it.  ra-ROR is
strictly stronger:  every ra-ROR-secure scheme is nOAE2-secure when
used in order, but nOAE2-secure schemes can fail when encryption order
is arbitrary (<xref target="FLRR25"/>).</t>
          </dd>
          <dt>Commitment (<xref target="RFC9771"/>):</dt>
          <dd>
            <t>CMT-1 and CMT-4 (<xref target="RFC9771"/>) are per-AEAD commitment notions.
ra-CMT is the corresponding notion for segmented random-access
schemes.  See <xref target="ra-cmt"/>.</t>
          </dd>
        </dl>
        <t>Rewrite safety and extension safety are corollaries of the notions
above, not additional notions.  Replacing a segment in place is an
EncSeg at an already-used position together with a snapshot update.  In
random nonce mode it adds no adversary capability beyond ra-ROR
(<xref target="ra-ror"/>) and snapshot integrity (<xref target="snapshot-integrity"/>).  In
derived nonce mode the rewrite repeats the segment nonce, so it <bcp14>MUST</bcp14> use
an MRAE AEAD (<xref target="derived-nonces"/>), and it adds the equality-leakage
relaxation that derived nonce mode already documents
(<xref target="appendix-nonce-modes"/>).  Each rewrite also counts against the
per-key AEAD usage budget (<xref target="aead-usage-limits"/>).</t>
        <t>Appending and truncating likewise add no algorithm (<xref target="extend"/>) and no
notion.  An adversary's ability to add, drop, reorder, or re-mark a
terminal segment is exactly the snapshot integrity adversary of
<xref target="snapshot-integrity"/>, and detection follows from the index and
finality binding of <xref target="concrete-segment-aad"/> together with snapshot
verification.  Rollback of the whole object to an earlier honest (state,
snapshot) after truncation is the freshness case that snapshot integrity
excludes (<xref target="snapshot-limitations"/>).  The application supplies it.</t>
      </section>
      <section anchor="adversary-model">
        <name>Adversary Model and Assumptions</name>
        <t>The adversary model is that of the ra-ROR game (<xref target="ra-ror"/>, <xref target="FLRR25"/>).
In the construction's terms: the adversary can observe all ciphertexts
and content metadata, tamper with individual segments or their ordering,
replace the snapshot value, and attempt decryption with chosen keys.
The adversary does not know the CEK, any derived key, or the per-content
salt.  The confidentiality and integrity bounds assume the CEK is secret
and uniform, the single-owner regime: an application <bcp14>MUST</bcp14> supply a CEK
that is either generated uniformly at random or derived so that it is
computationally indistinguishable from uniform, such as the output of a
KDF keyed by a secret.  When multiple messages share a CEK, the
per-content salt separates payload schedule outputs across messages
under the PRF assumption.  The multi-message advantage grows linearly in
the number of messages.</t>
        <t>The commitment notions ra-CMT and ra-CMT-p (<xref target="key-commitment"/>) also
cover a shared-CEK regime, where the adversary holds the CEK.  A CEK
holder defeats the per-segment AEAD:  it holds the key, so it can
decrypt and forge tags at will, and confidentiality and per-segment
integrity do not bind it.</t>
        <t>One binding can still hold against a CEK holder, under three conditions
that each close a distinct gap.  The snapshot value <bcp14>MUST</bcp14> be
authenticated outside the construction, because a CEK holder derives
snap_key and can otherwise forge any snapshot value directly.  The
segment commitment <bcp14>MUST</bcp14> be set:  without it a segment's leaf binds its
ciphertext only through the AEAD tag, which a CEK holder forges for
altered content.  Setting it adds a collision-resistant commitment to
the ciphertext that holding the CEK does not defeat.  The
authenticator's ordering <bcp14>MUST</bcp14> be strict:  under a linear ordering a
snap_key holder can present a different segment set with the same
snapshot value even when every leaf commits to its content, and only a
strict ordering makes finding one a collision problem.  A snapshot
meeting all three binds each segment's content to its position against a
CEK holder.</t>
        <t>The persistent state of an raAE object, and the party that owns each
item, is:</t>
        <dl>
          <dt>CEK:</dt>
          <dd>
            <t>Secret key-management state.  It is the root secret for the object.</t>
          </dd>
          <dt>salt:</dt>
          <dd>
            <t>Stored object metadata.  It separates objects under one CEK.</t>
          </dd>
          <dt>parameter set:</dt>
          <dd>
            <t>Profile or object metadata.  It fixes suite, maximum segment size,
and epoch policy.</t>
          </dd>
          <dt>commitment:</dt>
          <dd>
            <t>Stored object metadata.  It rejects wrong key or parameter context
before decryption.</t>
          </dd>
          <dt>segment metadata:</dt>
          <dd>
            <t>Storage-format state.  It holds AEAD tags, the per-segment nonces in
random nonce mode, and, when the segment commitment is set, each
segment's content commitment (<xref target="snapshot-interface"/>).</t>
          </dd>
          <dt>snapshot:</dt>
          <dd>
            <t>Stored object metadata.  It authenticates the segment set and
segment count.</t>
          </dd>
          <dt>external freshness state:</dt>
          <dd>
            <t>Consuming-protocol state.  It detects whole-object rollback.</t>
          </dd>
        </dl>
        <t>The security argument relies on three distinct assumptions about the
KDF.  For derivations whose input keying material is secret and
uniformly random, including payload_key, snap_key, nonce_base,
epoch_key, and the snapshot authenticator's keyed derivations, the KDF
is assumed to be a multi-user PRF with domain separation by protocol_id
and label.</t>
        <t>For commitment, the function</t>
        <artwork><![CDATA[
Commit(CEK, payload_info, G, L) =
    KDF(protocol_id, "commit", [CEK], [...payload_info, G], L)
]]></artwork>
        <t>is additionally assumed to be collision resistant over adversarially
chosen tuples (CEK, payload_info, G), with G empty by default.  PRF
security alone is not sufficient for this property, because the
commitment adversary may choose the CEK and context values.</t>
        <t>For the plaintext-bound nonce construction, the plaintext digest step
targets collision resistance, not PRF security.</t>
      </section>
      <section anchor="framing">
        <name>raAE Construction Requirements</name>
        <t>The bounds below rely on properties of the construction's components,
namely the KDF framing and the snapshot authenticator.  The requirements
those components must satisfy are obligations on the raAE construction,
not part of the raAE primitive of <xref target="raae"/>.</t>
        <t>A profile selects the concrete framing for every derivation surface: the
KDF input assembly (<xref target="key-derivation"/>), the payload_info construction
(<xref target="components"/>), the segment AAD (<xref target="concrete-segment-aad"/>), and the
snapshot authenticator's keyed inputs (<xref target="snapshot-authenticator"/>).  The
requirements below are the contract that any such framing <bcp14>MUST</bcp14> meet.
SEAL is one such framing (<xref target="kdf-combiner"/>, <xref target="seal-encodings"/>).</t>
        <dl>
          <dt>Pseudorandomness:</dt>
          <dd>
            <t>KDF outputs <bcp14>MUST</bcp14> be computationally indistinguishable from random to
an adversary that does not know the ikm, assuming the underlying
hash or PRF is a secure pseudorandom function.</t>
          </dd>
          <dt>Injectivity:</dt>
          <dd>
            <t>A construction encodes the tuple (protocol_id, label, ikm, info, L)
into the underlying primitive input, and that encoding <bcp14>MUST</bcp14> be
injective:  distinct tuples map to distinct primitive inputs.  This is
a requirement on the encoding, not on the KDF, which need not itself
be injective.  ikm and info <bcp14>MUST</bcp14> be unambiguously separable in the
encoded input, whatever the number of elements each contains.  The
two-step form binds ikm and info in its separate Extract and Expand
inputs.  The one-step form frames ikm and info each as a single encode
element.  Where the encoding admits inputs too large to encode
literally, it <bcp14>MAY</bcp14> substitute a fixed-length digest of the over-large
field.  The encoding is then injective only up to the collision
resistance of that digest, which the construction <bcp14>MUST</bcp14> justify and
domain-separate from the literal encoding (<xref target="kdf-combiner"/>).</t>
          </dd>
          <dt>Label uniqueness:</dt>
          <dd>
            <t>Each derivation role, including commitment, payload key, snapshot
authenticator key, nonce base, epoch key, segment nonce, hedged key,
and the authenticator's internal roles, <bcp14>MUST</bcp14> use a distinct label
string within each protocol version.</t>
          </dd>
          <dt>Protocol binding:</dt>
          <dd>
            <t>The protocol_id <bcp14>MUST</bcp14> appear as a distinct component of the KDF
primitive input.  Different application protocols using the same
AEAD and KDF <bcp14>MUST</bcp14> use different protocol_id values to ensure that
derived values from one protocol cannot be confused with those from
another.</t>
          </dd>
          <dt>Output length commitment:</dt>
          <dd>
            <t>The requested output length L <bcp14>MUST</bcp14> be part of the KDF primitive
input.  This prevents attacks in which an adversary attempts to use
a truncated version of a longer derived output as a valid shorter
one.</t>
          </dd>
          <dt>Cross-role isolation:</dt>
          <dd>
            <t>Cross-role isolation follows from label uniqueness and PRF security of
the underlying primitive:  a KDF output for one derivation role, such
as payload_key, is computationally independent of the output for any
other role, such as snap_key, even when derived from the same CEK and
payload_info.</t>
          </dd>
          <dt>Snapshot authenticator:</dt>
          <dd>
            <t>The construction <bcp14>MUST</bcp14> bind the current segment set and the segment
count into a public snapshot value that an adversary without the
authenticator's secret key cannot forge for a modified segment set
or count, even after observing snapshot values and their deltas
across rewrites.  How the value is computed, and whether a
single-segment change updates it in place or rebuilds it, is the
authenticator's choice.  SEAL's snapshot authenticators are in
<xref target="snapshot-authenticator"/>.</t>
          </dd>
        </dl>
        <t>SEAL's construction (<xref target="framework"/>) satisfies these requirements.  Its
KDF (<xref target="kdf-combiner"/>), keyed by the CEK, is modeled as a
pseudorandom function.  Its encode framing (<xref target="kdf-combiner"/>) is
injective and places protocol_id and the output length L in the
primitive input, so injectivity, protocol binding, and output-length
commitment hold.  SEAL's labels (<xref target="label-table"/>, each configured
snapshot authenticator's own labels, the plaintext-bound construction's
labels in <xref target="appendix-pt-bound"/>, and the hedged-randomness label in
<xref target="hedged-randomness"/>) are distinct, giving label uniqueness and, with
PRF security, cross-role isolation.  Each configured snapshot
authenticator satisfies the snapshot authenticator requirement, with its
forgery argument accounted in <xref target="snapshot-security"/>.</t>
        <t>SEAL's encode framing meets the injectivity requirement.  Its
frame/encode construction, the LH digest for over-large fields, and LH's
domain separation from the literal encoding are defined and justified in
<xref target="kdf-combiner"/>.  SEAL's own derived and fixed fields (the payload_info
elements, the commitment, the leaf, and the uint-encoded scalars) are
all at most 0xFFFE octets, so for them frame is byte-identical to a
plain 2-octet length prefix.  The two caller-supplied octet strings, G
(<xref target="message-inputs"/>) and A_i, are unbounded, and a field longer than
0xFFFE octets is bound as 0xFFFF || LH of it.  Cross-protocol separation
comes from protocol_id in the KDF inputs and from aad_label in the
segment AAD, not from LH (<xref target="kdf-combiner"/>).</t>
        <t>SEAL's additional components, the epoch keys and the snapshot
maintained across rewrite and length change, are analyzed in
<xref target="segment-security"/> and <xref target="snapshot-security"/>.</t>
      </section>
      <section anchor="segment-security">
        <name>Segment Confidentiality and Integrity</name>
        <t>The construction targets ra-ROR security (<xref target="ra-ror"/>).  The ra-ROR
advantage bound, its adversary parameters, and the per-term analysis are
in <xref target="appendix-reductions"/>, with the full proof in preparation
(<xref target="SEALPROOFS"/>).</t>
        <t>Ciphertext cores are indistinguishable from random under the ra-ROR
definition, up to the public length leakage, the equality leakage
allowed by derived nonce mode, and public metadata exposed by the
consuming format (file-level headers, stored nonces in random mode, the
salt, and the commitment).  Each segment AEAD ciphertext binds the
segment to its own index and finality bit (through segment_aad in random
nonce mode and through the nonce in derived nonce mode) so an adversary
cannot modify or substitute a segment under a given index, or flip its
finality bit, without causing an AEAD verification failure on that
segment.  Same-index rollback to an older valid segment within the same
message is not detected by per-segment AEAD alone.  This requires the
snapshot verification of <xref target="snapshot-authenticator"/>.</t>
        <t>Three quadratic floors bound the multi-message advantage:</t>
        <artwork><![CDATA[
salt collision       q_m^2 / 2^256          all suites
epoch-key collision  n_ep^2 / 2^128         128-bit-key suite
nonce collision      q^2 / 2^(8*Nn + 1)     random nonce mode
                     q^2 / 2^97  at Nn = 12
]]></artwork>
        <t>In derived nonce mode the salt-collision floor is the only one for the
256-bit-key suites.  The 128-bit-key suite also has the epoch-key
collision floor, which dominates (<xref target="appendix-adv-notation"/>).  In random
nonce mode, with or without the plaintext-bound hedge, the
nonce-collision floor applies.  Here q is the number of segment
encryptions under one key, and Nn is the nonce length in octets.  The
block-size birthday term is derived in <xref target="aead-usage-limits"/>.</t>
        <t>Segment size enters the analysis only through the forgery and block-size
terms, both bounded in <xref target="aead-usage-limits"/>.  It does not affect the
confidentiality or commitment terms.  A segment's length is
authenticated implicitly by its AEAD tag, not through segment_aad or the
nonce, so the analysis assumes the consuming format conveys each
segment's true ciphertext length.  Segments shorter than segment_max
consume no more than their share of the per-key budget and need no
separate accounting.</t>
      </section>
      <section anchor="key-commitment">
        <name>Commitment Security</name>
        <t>raAE's commitment target is ra-CMT (<xref target="ra-cmt"/>), not the per-AEAD CMT-1
(<xref target="RFC9771"/>):  the commitment binds the CEK and payload_info, which
together carry the full parameter context affecting key derivation, AEAD
operation, and AAD and nonce construction.</t>
        <t>ra-CMT relies on the collision resistance of the commitment derivation
map over the tuple (protocol_id, "commit", CEK, payload_info, G,
commitment_length), with G empty by default.  PRF security alone does
not suffice, because the commitment adversary may choose the CEK and the
context values (<xref target="key-derivation"/>).  SEAL sets commitment_length = Nh,
so the commitment offers about 2^128 collision-search work at Nh = 32
and about 2^256 at Nh = 64.  The reduction outline for this assumption
and the collision quantities for a general commitment_length are in
<xref target="appendix-commitment"/>.</t>
        <t>The commitment bounds the ra-CMT variant in which the positions match
(<xref target="ra-cmt"/>).  It does not bind the segment position.  Position binding
for the ra-CMT-p variant is inherited from the underlying AEAD's
commitment level.  Because the SEAL AEADs are not relied upon to
provide it, position confusion under an adversarially chosen key is
out of scope, consistent with <xref target="FLRR25"/>.  A malicious encryptor that
controls the CEK can craft a single ciphertext segment that opens at two
positions, and the per-segment AEAD tag does not prevent it.</t>
        <t>A snapshot authenticator that sets the segment commitment over a strict
ordering, with the snapshot authenticated outside the construction,
restores ra-CMT-p against adversarially chosen keys:  the
collision-resistant leaf commitment and the strict ordering together pin
each segment's ciphertext to its index even against a CEK holder
(<xref target="snapshot-interface"/>, <xref target="adversary-model"/>).  It applies only where a
profile selects that authenticator and a consuming protocol
authenticates the one snapshot value.  The base construction pins
position no more strongly than the AEAD commits under an adversarial
key.</t>
        <t>The per-segment associated data A_i is likewise outside the commitment:
SEAL binds A_i through segment_aad and the AEAD tag for that segment.
Contexts that differ only in A_i are therefore not commitment
collisions.  Their separation relies on AEAD commitment for the segment
AAD.  A_i is also rewritable across rewrites and is not bound at the
snapshot level.  An application that needs it bound there <bcp14>MUST</bcp14> bind it
externally.  The exact accounting of this term in the ra-CMT reduction
is deferred to <xref target="appendix-reductions"/>.</t>
        <t>A deployment that must defend against a malicious encryptor who controls
the CEK can close the adversarial-key position gap by one of two
changes.  These are non-normative.  SEAL adds none of them to the
base construction.</t>
        <ul spacing="normal">
          <li>
            <t>A context-committing AEAD, so that each segment ciphertext
commits to its full decryption context rather than relying on the
external commitment over (CEK, payload_info, G).</t>
          </li>
          <li>
            <t>A per-segment collision-resistant commitment over the segment's
position and ciphertext, on the order of 16 to 64 octets per segment,
bound alongside the segment so that no segment opens at two
positions.</t>
          </li>
        </ul>
        <t>Both changes act in the base construction.  A snapshot authenticator
with the segment commitment set over a strict ordering
(<xref target="snapshot-interface"/>) is a separate, conditional route:  it leaves
the base construction unchanged and closes the gap only where a profile
selects it and a consuming protocol authenticates the one snapshot
value.</t>
        <t>None of the SEAL AEADs is relied upon to provide CMT-1 or CMT-4
(<xref target="RFC9771"/>).  In particular AES-256-GCM-SIV is not key-committing,
with known attacks such as partitioning oracles.  raAE obtains ra-CMT
context commitment from the external commitment over (CEK, payload_info,
G) regardless of the AEAD, provided the commitment check is not bypassed
and payload_info carries the full parameter context (<xref target="ra-cmt"/>).</t>
        <t>With commitment_length = Nh and Nt = 16, ra-CMT is bounded by the
commitment collision resistance, and ra-CMT-p adds the per-segment AEAD
commitment term.  The ra-CMT collision bound is derived in
<xref target="appendix-commitment"/>, and the ra-CMT-p bound is stated there as a
sum.  The two key regimes differ.  Under honestly generated keys the
idealized per-pair tag-forgery floor is 2^(-128) because Nt = 16, and
concrete per-AEAD authenticity bounds degrade with segment length
(<xref target="aead-usage-limits"/>).  Under an adversarially chosen CEK the position
term is the AEAD's commitment level, which the SEAL AEADs are not
relied upon to provide.</t>
        <t>The global associated data G (<xref target="framework-commitment"/>) enters the
committed map as an additional input, empty by default, and the
collision-resistance argument above applies unchanged with G in the
committed context.  This matches the ra-CMT treatment of global
associated data in <xref target="FLRR25"/>.</t>
      </section>
      <section anchor="snapshot-security">
        <name>Snapshot Authenticator Security</name>
        <t>The snapshot authenticator adds two operations (RewriteSeg, SnapVerify)
over a snapshot value and one new security property, snapshot
integrity (<xref target="snapshot-integrity"/>).  Integrating its reduction into a
single combined proof with the ra-ROR framework is in preparation and
will be published separately (<xref target="SEALPROOFS"/>).</t>
        <t>The keyed snapshot is not read as sender attribution.</t>
        <table anchor="snapshot-guarantee-matrix">
          <name>What each layer guarantees</name>
          <thead>
            <tr>
              <th align="left">Guarantee</th>
              <th align="left">Established by</th>
              <th align="left">Scope</th>
              <th align="left">Provided by</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Segment confidentiality and integrity, index and finality bound</td>
              <td align="left">AEAD decrypt, per segment</td>
              <td align="left">segment</td>
              <td align="left">this construction</td>
            </tr>
            <tr>
              <td align="left">Segment-set integrity: content, position, count</td>
              <td align="left">SnapVerify over the snapshot value</td>
              <td align="left">whole object</td>
              <td align="left">this construction</td>
            </tr>
            <tr>
              <td align="left">Sender attribution, third-party verifiability</td>
              <td align="left">signature over the snapshot context</td>
              <td align="left">whole object</td>
              <td align="left">consuming protocol, not provided</td>
            </tr>
            <tr>
              <td align="left">Freshness, whole-object rollback protection</td>
              <td align="left">external version or freshness state</td>
              <td align="left">whole object</td>
              <td align="left">consuming protocol, not provided</td>
            </tr>
          </tbody>
        </table>
        <t>Snapshot integrity is keyed by snap_key and protects the writer's
current segment set against a storage or write adversary that does not
hold snap_key.  A verifier who holds snap_key, hence the CEK from which
it is derived, detects any alteration of the segment set
(<xref target="snapshot-interface"/>).  Forgery of a fresh snapshot value gives no
protection among parties that share the CEK, because any CEK-holder can
recompute snap_key, and the value is not a third-party-verifiable
commitment to a segment set.  Whether a fixed, externally authenticated
snapshot value binds segment content against key holders depends on the
authenticator (<xref target="snapshot-interface"/>).  An application that needs
sender attribution or third-party verifiability <bcp14>MUST</bcp14> add a signing layer
over the snapshot context, and the configured authenticator determines
whether its value can carry that layer.</t>
        <t>The snapshot authenticator adds authentication of the full segment set
(over the authenticator's per-segment input) and the count n_seg as a
single unit, which detects same-index rollback, segment-set
modification, and count changes.  Its mandatory index-set check catches
a duplicated or dropped index that an authenticator's verify might
otherwise accept (<xref target="snapshot-interface"/>).</t>
        <t>A profile <bcp14>MUST</bcp14> keep each of an authenticator's KDF labels inside the
injective encode frame (<xref target="kdf-combiner"/>) so distinct roles cannot
collide on the primitive input.</t>
        <t>Whole-object rollback to a previously valid snapshot is out of scope and
is treated in <xref target="snapshot-limitations"/>.  snap_key is not exposed through
any public API.  It is derived internally per message from the CEK and
salt, so snap_key exposure is not a threat surface in the construction
itself.</t>
      </section>
      <section anchor="aead-usage-limits">
        <name>Capacity and Usage Limits</name>
        <t>These usage limits are organized around independent limit classes, not
around named suites.  The accounting unit is one segment encryption
under one segment-encryption key (an epoch key).  For random-nonce AEADs
that budget is a single per-epoch-key pool.  For a derived-nonce MRAE
AEAD there are two separate budgets:  a per-epoch-key budget for
distinct derived nonces, and a per-derived-nonce budget for repeated
encryption of one segment.  Such an AEAD therefore does not follow a
simple "divide the per-key budget by 2^epoch_length" model.</t>
        <t>The budgets depend on the AEAD's nonce, key, tag, and cipher block sizes
(Nn, Nk, Nt, Nb), on the AEAD's own published confidentiality and
integrity analysis, on the KDF's output size Nh and its mu-PRF security
(<xref target="appendix-adv-notation"/>), and on the suite's segment_max.  A suite
that fixes those works out every figure below.  The mu-PRF security is
what makes each epoch key's budget independent of every other's, which
the per-epoch-key accounting assumes.</t>
        <t>The length-dependent limits in this section are computed at the suite's
segment_max, the largest plaintext one segment encryption carries.
Independent of these per-key budgets, a segment-encryption procedure
<bcp14>MUST</bcp14> respect each underlying AEAD's per-invocation input limits.</t>
        <section anchor="accounting-model">
          <name>Accounting Model</name>
          <t>One segment encryption consumes one write from a segment-encryption
key's budget.  Initial writes and rewrites are both segment encryptions.
The budget belongs to the epoch key, not the CEK.</t>
          <dl>
            <dt>epoch-key budget:</dt>
            <dd>
              <t>the segment encryptions allowed under one epoch key.</t>
            </dd>
            <dt>write (initial write):</dt>
            <dd>
              <t>the first encryption of a segment.</t>
            </dd>
            <dt>rewrite:</dt>
            <dd>
              <t>a later encryption of the same segment.</t>
            </dd>
            <dt>epoch_length (r):</dt>
            <dd>
              <t>the base-2 log of the number of segments that share one epoch key.</t>
            </dd>
            <dt>n_blk:</dt>
            <dd>
              <t>the blocks per segment, n_blk = segment_max / Nb, for a
block-cipher AEAD.</t>
            </dd>
            <dt>advantage target:</dt>
            <dd>
              <t>the bound a budget is solved against.  Every confidentiality budget in
this section is computed at 2^-32.  A budget quoted from an AEAD's own
analysis holds at the target that analysis states.</t>
            </dd>
          </dl>
        </section>
        <section anchor="limit-classes">
          <name>Limit Classes</name>
          <t>Six phenomena bound how much may be encrypted.  Each is set by one
property of the AEAD or the segment size, and each bounds
confidentiality or integrity.</t>
          <table anchor="limit-class-table">
            <name>Usage-limit classes</name>
            <thead>
              <tr>
                <th align="left">Limit class</th>
                <th align="left">Applies to</th>
                <th align="left">Depends on</th>
                <th align="left">Failure mode</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Random-nonce collision</td>
                <td align="left">random nonce modes</td>
                <td align="left">nonce size</td>
                <td align="left">confidentiality</td>
              </tr>
              <tr>
                <td align="left">Forgery bound</td>
                <td align="left">all AEADs</td>
                <td align="left">MAC strength, segment size</td>
                <td align="left">integrity</td>
              </tr>
              <tr>
                <td align="left">Block-size birthday</td>
                <td align="left">block-cipher AEADs</td>
                <td align="left">total blocks</td>
                <td align="left">confidentiality</td>
              </tr>
              <tr>
                <td align="left">MRAE distinct-nonce</td>
                <td align="left">derived-nonce MRAE across segments</td>
                <td align="left">derived-nonce count</td>
                <td align="left">confidentiality and integrity</td>
              </tr>
              <tr>
                <td align="left">Fixed-nonce data volume</td>
                <td align="left">derived-nonce hot rewrites</td>
                <td align="left">segment size, rewrites</td>
                <td align="left">confidentiality</td>
              </tr>
              <tr>
                <td align="left">Epoch-key collision</td>
                <td align="left">128-bit-key AEADs</td>
                <td align="left">key size</td>
                <td align="left">confidentiality</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="max-object-size">
          <name>Maximum Object Size</name>
          <t>Two limits bound a write-once object: each epoch key's AEAD write
budget, and the 2^63 segment index ceiling.  The same two bound an
append-only object, at the write counts given at the end of this
section.</t>
          <t>Under a flat key (one epoch key for the whole object), the AEAD budget
sets the size.  Which class binds follows from the AEAD:</t>
          <table anchor="write-once-table">
            <name>Flat-key write-once size limit by binding class</name>
            <thead>
              <tr>
                <th align="left">Binding class</th>
                <th align="left">Flat-key write-once limit</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Block-size birthday</td>
                <td align="left">2^((8*Nb + 1 - 32)/2) / n_blk segments</td>
              </tr>
              <tr>
                <td align="left">MRAE distinct-nonce</td>
                <td align="left">the AEAD's distinct-derived-nonce ceiling</td>
              </tr>
              <tr>
                <td align="left">No block-cipher structure</td>
                <td align="left">2^63 segments, the index ceiling</td>
              </tr>
              <tr>
                <td align="left">No published block-size analysis</td>
                <td align="left">2^63 segments, the index ceiling</td>
              </tr>
            </tbody>
          </table>
          <t>A block-cipher AEAD binds on the block-size birthday, a confidentiality
bound of about 2^36 segments at Nb = 16 and n_blk = 4096
(<xref target="confidentiality-block-size"/>).  A derived-nonce MRAE AEAD binds
instead on the distinct-derived-nonce ceiling its own analysis gives
(<xref target="mrae-bounds"/>).</t>
          <t>The last two classes carry the same limit for different reasons.  An
AEAD with no block-cipher structure, such as one built on a stream
cipher, has no block-size term at all:  that is a property of the AEAD.
An AEAD whose analysis publishes no such term may still have one:  that
is a statement about the literature, not about the algorithm, and a
suite that places an AEAD in this class says which of the two reasons
applies.</t>
          <t>These figures assume derived nonce mode, which a non-MRAE AEAD may use
only under a nonce-uniqueness discipline, the write-once or append-only
profiles (<xref target="derived-nonces"/>).  In random nonce mode such an AEAD binds
earlier, at the random-nonce-collision budget of 2^((8*Nn + 1 - 32)/2),
about 2^32 per epoch key at Nn = 12
(<xref target="confidentiality-nonce-collision"/>).</t>
          <t>An append-only object re-encrypts one retained segment per append
(<xref target="append-only"/>), so a segment appended one at a time is written twice
rather than once, and an identical replay after a crash adds a further
write without reusing the pair (<xref target="derived-nonces"/>).  Every figure above
that binds on a write count therefore halves, before any replays:  the
block-size birthday figure, which counts blocks, and the
distinct-derived-nonce figure, which counts distinct nonces.  The 2^63
entry is the index ceiling and is unchanged.  An epoch key
correspondingly spans at most 2^(epoch_length + 1) pairs, and the budget
it needs is that many writes plus any replays (<xref target="append-only"/>).</t>
          <t>With epoch rotation each epoch key carries a fresh budget, so any suite
can reach the 2^63-segment ceiling, about 2^79 octets at segment_max
65536.  An AEAD subject to the epoch-key collision class reaches it only
with a sufficiently large epoch_length.  At epoch_length 0 that floor
caps the object near 2^(4*Nk - 16) segments, about 2^48 at Nk = 16
(<xref target="epoch-length-guidance"/>).  Reaching 2^63 then needs epoch_length at
least 15, so the distinct epoch keys stay near 2^48.</t>
          <t>A rotating profile <bcp14>MUST</bcp14> keep each epoch key's 2^epoch_length initial
writes within its per-key budget.  For a derived-nonce MRAE AEAD that
means 2^epoch_length below the AEAD's distinct-derived-nonce budget.  An
append-only profile adds one re-mark per superseded segment, so each
epoch key spans up to 2^(epoch_length + 1) pairs, and an encryptor <bcp14>MUST</bcp14>
size the per-key budget to cover those plus the replays an interrupted
append costs (<xref target="append-only"/>).  Rewrite capacity is a separate
condition (<xref target="rewrite-budget-security"/>).</t>
        </section>
        <section anchor="rewrite-budget-security">
          <name>Rewrite Capacity</name>
          <t>A rewrite consumes the same budget as an initial write.  How that budget
is shared depends on the nonce mode.</t>
          <t>For a random-nonce AEAD, epoch_length divides one per-epoch-key pool
among the 2^epoch_length segments that share the key.  If rewrites are
spread evenly, the count each segment can take falls as epoch_length
rises:</t>
          <artwork><![CDATA[
rewrites per segment  =  2^((8*Nn + 1 - 32)/2) / 2^epoch_length
]]></artwork>
          <t>At Nn = 12 that is about 2^(32 - epoch_length):  about 2^32 rewrites per
segment at epoch_length 0, about 2^26 at 6, and about 2^22 at 10.</t>
          <t>For a derived-nonce MRAE AEAD the hot-segment rewrite cap is not divided
by 2^epoch_length, because a rewrite reuses the segment's one derived
nonce.  The cap is length-dependent instead.  Where the AEAD's
per-record encryption is a block cipher in counter mode, the cap is the
keystream block-size birthday over the rewritten blocks, quantified in
<xref target="mrae-bounds"/>, and applies at every epoch_length.  An MRAE AEAD built
another way has whatever cap its own analysis gives.  The
distinct-derived-nonce budget is separate and per epoch key.  A
derived-nonce MRAE AEAD thus has two separate constraints, the distinct
derived nonces per epoch key and the repeated encryptions at one derived
nonce.  An AEAD whose nonce size makes a flat key safe uses one, and a
forgery budget that exceeds any reachable rewrite workload leaves no
rewrite constraint at all.</t>
          <t>Applications <bcp14>MUST</bcp14> track segment encryptions per key and freeze the
object before a budget is exceeded.  The CEK is fixed per object and
cannot be rotated in place, so continued writing requires a new object
under a fresh CEK.</t>
        </section>
        <section anchor="epoch-length-guidance">
          <name>Choosing epoch_length</name>
          <t>epoch_length means different things by mode.  For the random-nonce
AEADs, a smaller epoch_length puts fewer segments under each key, so
each segment keeps a larger share of the random-nonce collision pool, at
the cost of more epoch keys to derive and hold.  For a derived-nonce
MRAE AEAD, a smaller epoch_length reduces the distinct derived nonces
under an epoch key but does not raise the hot-segment rewrite cap, which
is per derived nonce and length-dependent.  An AEAD with a 256-bit nonce
(Nn = 32) makes collision negligible and has a high forgery floor, so a
flat key (epoch_length 63) is the natural choice.</t>
          <t>The cipher suite's default epoch_length, used when no epoch_length is
chosen, is 0 for the suites with an epoch_length range and 63 for the
suites whose nonce size makes a flat key safe.  A referencing protocol
may choose directly, or by citing a profile or named instantiation that
fixes a value.  Either way a value is chosen, and the default does not
apply.</t>
          <t>A referencing protocol that chooses an epoch_length tuned to its
expected segment count, rather than taking the default, trades some
rotation for fewer epoch keys while staying within budget.  Because a
segment may be shorter than segment_max, size epoch_length by the number
of segments rather than the object's octet length.  At a fixed octet
size, smaller segments mean more segments and more epoch keys.</t>
          <t>The epoch keys are independent under the PRF security of the KDF
(<xref target="RFC8645"/>), so the epoch_length parameter controls budget
distribution, not key strength.</t>
          <t>An AEAD with a 128-bit key (Nk = 16) adds one further constraint.  The
epoch-key collision term (<xref target="appendix-adv-notation"/>) is about
n_ep^2/2^(8*Nk) over the n_ep distinct epoch keys, so a profile whose
AEAD has Nk = 16 <bcp14>SHOULD</bcp14> keep distinct epoch keys per payload_key below
about 2^(4*Nk - 16), which is about 2^48 at Nk = 16 and holds that term
within the 2^-32 target.  At epoch_length 0 this caps such an object at
about 2^48 segments, far below the 2^63 index ceiling, so it constrains
only extreme object sizes.</t>
        </section>
        <section anchor="derivations">
          <name>Derivations</name>
          <section anchor="confidentiality-nonce-collision">
            <name>Confidentiality (Nonce Collision)</name>
            <t>For random nonce mode with Nn-octet nonces and q segment encryptions
under one key, the collision probability follows the birthday bound:</t>
            <artwork><![CDATA[
P(collision) <= q^2 / 2^(8*Nn + 1)
]]></artwork>
            <t>When epoch_length = r is specified, q counts encryptions per epoch key
(initial writes plus rewrites within that epoch), not across the whole
content.  Each epoch key has an independent budget.</t>
            <t>For derived nonce mode, nonces are deterministic and distinct across
segment indices, so this collision term does not apply.  The limits on
reusing a derived nonce are in <xref target="mrae-bounds"/>.</t>
          </section>
          <section anchor="confidentiality-block-size">
            <name>Confidentiality (Block-Size Birthday Bound)</name>
            <t>Nonce collisions alone do not exhaust the confidentiality bound.
Following the AEAD usage-limits analysis (<xref target="I-D.irtf-cfrg-aead-limits"/>
Section 5), a block-cipher AEAD has a distinguishing bound that grows
with the total number of cipher blocks processed under a key.  If s is
the total number of AAD-plus-plaintext blocks, each Nb octets, and q is
the number of encryption queries under a key, the confidentiality
advantage is at most:</t>
            <artwork><![CDATA[
CA <= ((s + q + 1)^2) / 2^(8*Nb + 1)
]]></artwork>
            <t>A segment holds n_blk blocks and s = n_blk * q in the worst case, so
CA scales as q^2 * n_blk^2 / 2^(8*Nb + 1).  Solved against the 2^-32
target, the per-key budget is:</t>
            <artwork><![CDATA[
q  <=  2^((8*Nb + 1 - 32)/2) / n_blk
]]></artwork>
            <t>about 2^36 at Nb = 16 and n_blk = 4096. In random nonce mode the
nonce-collision bound q^2 / 2^(8*Nn + 1) dominates for typical
deployments because n_blk^2 / 2^(8*(Nb - Nn)) is small: the block-size
term overtakes it only once n_blk^2 exceeds 2^(8*(Nb - Nn)), which is
2^32 at Nb = 16 and Nn = 12. In derived nonce mode the nonce-collision
term vanishes and the block-size term is the binding confidentiality
constraint.</t>
            <t>An AEAD with no block-cipher structure, such as one built on a stream
cipher, has no comparable block-size bound, leaving nonce collision and
forgery as the only relevant terms.  Nonce collision is negligible at a
large Nn, and the per-query forgery bound governs integrity.
<xref target="mrae-bounds"/> gives the derived-nonce block-size limits.</t>
            <t>SEAL implementations <bcp14>MUST</bcp14> compute usage budgets from the AEAD-specific
confidentiality and integrity bounds, not from nonce-collision
probability alone.</t>
          </section>
          <section anchor="integrity-forgery">
            <name>Integrity (Forgery)</name>
            <t>Each AEAD decryption query gives the adversary a chance to forge a valid
ciphertext.  The forgery advantage per query depends on the AEAD's own
analysis and on segment_max:</t>
            <artwork><![CDATA[
IA <= v * F(segment_max)
]]></artwork>
            <t>where v is the number of forgery attempts and F(segment_max) is the
per-query forgery advantage the AEAD's analysis gives at a segment of
segment_max octets.  F grows with segment_max, so a larger segment
lowers the attempt budget for a fixed target.  The tag length bounds F
from below, at about 2^(-8*Nt), so no AEAD offers more than about 8*Nt
bits of forgery resistance per query.  An AEAD's authenticator may
achieve less than its tag length suggests, so F is not determined by Nt
and a suite takes F from the analysis of its own AEAD.
<xref target="I-D.irtf-cfrg-aead-limits"/> gives F for several AEADs.</t>
          </section>
          <section anchor="mrae-bounds">
            <name>Derived-Nonce Bounds</name>
            <t>A derived-nonce MRAE AEAD has two limits the random-nonce analysis above
does not capture.  Both come from the AEAD's own analysis rather than
from its interface.</t>
            <t>Across the distinct segment nonces under one epoch key, an MRAE AEAD
that derives a per-record key from the key and the nonce has a
derived-key collision ceiling on the number of distinct derived nonces.
Its value is the AEAD's analysis to state.</t>
            <t>For a single hot segment, every rewrite reuses that segment's one
derived nonce, so n_rw rewrites of an n_blk-block segment encrypt
n_rw * n_blk blocks under one derived per-record key.  Where that
per-record encryption is a block cipher in counter mode, the binding
term is the keystream block-size birthday over the total blocks, in the
form of <xref target="I-D.irtf-cfrg-aead-limits"/> Section 5 with s = n_rw * n_blk
blocks and q = n_rw queries:</t>
            <artwork><![CDATA[
((s + q + 1)^2) / 2^(8*Nb + 1)  <=  2^-32
]]></artwork>
            <t>The n_rw * n_blk term dominates, so this holds while n_rw * n_blk
stays below about 2^((8*Nb + 1 - 32)/2), giving:</t>
            <artwork><![CDATA[
n_rw  <=  2^((8*Nb + 1 - 32)/2) / n_blk
]]></artwork>
            <t>the same expression as the flat-key block-size budget, counting rewrites
of one segment at one nonce instead of writes under one key.  That is
about 2^36 rewrites at Nb = 16 and n_blk = 4096, and about 2^38 at n_blk
= 1024.</t>
            <t>An MRAE AEAD whose per-record encryption gives distinct plaintexts
distinct keystreams degrades under the fixed nonce only by this
block-birthday term and not by nonce reuse.  Two rewrites with identical
plaintext and associated data produce identical ciphertext
(deterministic-MRAE equality leakage), independent of this count.</t>
          </section>
        </section>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>raAE's ra-ROR security target (<xref target="ra-ror"/>) rests on three assumptions:
the AEAD is multi-user real-or-random (mu-ROR) secure, the KDF is a
secure multi-user pseudorandom function (mu-PRF), and nonces do not
collide.</t>
      <t>Integrity is bounded by the AEAD tag:  no AEAD offers more than
approximately 8*Nt bits of forgery resistance per query.  A larger AEAD
key raises confidentiality margins, not the tag-length forgery floor.</t>
      <section anchor="detection-summary">
        <name>Detection Summary</name>
        <t>The rows detected by SnapVerify assume a snapshot authenticator is
configured.  Without one, those modes go undetected.</t>
        <t>The one exception is a dropped trailing segment under a write-once
profile, which the per-segment finality requirement of
<xref target="full-decryption"/> detects with no snapshot authenticator (the
truncation row below).</t>
        <table anchor="detection-table">
          <name>Failure modes and the checks that detect them</name>
          <thead>
            <tr>
              <th align="left">Failure mode</th>
              <th align="left">Detected by</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Wrong CEK, salt, or parameter set</td>
              <td align="left">The commitment, before any segment decryption (<xref target="framework-commitment"/>), when reader and writer share the payload_info construction.</td>
            </tr>
            <tr>
              <td align="left">Modified ciphertext core or AEAD tag</td>
              <td align="left">AEAD.Decrypt for the affected segment.</td>
            </tr>
            <tr>
              <td align="left">Segment moved to a different index</td>
              <td align="left">AEAD.Decrypt: index and finality are bound by segment_aad (random nonce mode) or the nonce (derived nonce mode).</td>
            </tr>
            <tr>
              <td align="left">Segment copied from another object at the same index</td>
              <td align="left">AEAD.Decrypt, when the source used a different CEK or salt; a reused salt under the same CEK breaks this separation (<xref target="salt-reuse"/>).</td>
            </tr>
            <tr>
              <td align="left">Segment copied from another version at the same index</td>
              <td align="left">SnapVerify, not per-segment AEAD alone, unless the whole object including its snapshot is rolled back to that earlier valid version.</td>
            </tr>
            <tr>
              <td align="left">Dropped trailing segment(s) (truncation)</td>
              <td align="left">Write-once: the finality requirement of <xref target="full-decryption"/> (top present segment carries is_final = 0). Length-changing: SnapVerify, since a re-marked terminal (<xref target="extend"/>) can be replayed; the mutable profile always configures an authenticator. Truncation to zero: the zero-segment prohibition, or SnapVerify (<xref target="snapshot-limitations"/>).</td>
            </tr>
            <tr>
              <td align="left">Missing interior, duplicated, reordered, or inserted segment</td>
              <td align="left">SnapVerify (segment count, finality, recomputed snapshot value).</td>
            </tr>
            <tr>
              <td align="left">Stale snapshot value</td>
              <td align="left">SnapVerify, unless the stale value is part of a whole-object rollback.</td>
            </tr>
            <tr>
              <td align="left">Whole-object rollback</td>
              <td align="left">Not detected by raAE alone; the consuming protocol needs authenticated external freshness state.</td>
            </tr>
            <tr>
              <td align="left">Equality leakage in derived nonce mode</td>
              <td align="left">Not an authentication failure; rewriting equal plaintext at the same index can reveal equality (<xref target="nonce-generation"/>, <xref target="nonce-misuse"/>).</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="nonce-misuse">
        <name>Nonce Misuse</name>
        <t>Nonce reuse under a non-MRAE AEAD leaks plaintext:  an adversary who
observes two ciphertexts under the same key and nonce recovers the XOR
of the plaintexts (for CTR-based AEADs) and can forge new ciphertexts.
For an AEAD whose authenticator is a polynomial universal hash, nonce
reuse also recovers the authentication key, enabling forgery of
arbitrary messages.</t>
        <t>Random nonce mode depends entirely on the CSPRNG.  If the CSPRNG returns
duplicated state, segments collide.  Derived nonce mode removes that
dependence, since nonces are deterministic, but the determinism is
itself a hazard: re-encrypting a segment with different content under
its repeated derived nonce is a two-time pad, catastrophic for a
non-MRAE AEAD.</t>
        <t>A non-MRAE AEAD therefore uses derived nonces only under a discipline
that keeps every (index, finality bit) pair unique, the write-once or
append-only profiles, drawing a fresh salt per object and never reusing
a pair under that salt, including after a crash (<xref target="derived-nonces"/>).
Write-once meets this by never re-encrypting with changed inputs, and by
drawing a fresh salt rather than retrying an object it did not complete.
Append-only meets it by permitting at most one re-encryption per
segment, the finality re-mark, under the three rules of <xref target="append-only"/>.
An MRAE AEAD instead degrades only to equality leakage, not plaintext
recovery.</t>
        <t>The plaintext-bound construction (<xref target="appendix-pt-bound"/>) partially
defends against CSPRNG duplication: different plaintexts at the same
index produce different nonces because the plaintext digest differs,
but equal plaintexts still collide.  Implementations that need a full
defense against random number generator (RNG) state duplication <bcp14>MUST</bcp14>
use derived nonce mode with an MRAE AEAD.</t>
      </section>
      <section anchor="parameter-mismatch">
        <name>Parameter Set Mismatch</name>
        <t>The full parameter set that affects encryption, decryption, AAD
construction, nonce construction, and key derivation is bound into
payload_info (see <xref target="components"/>) and therefore into the commitment.  A
reader using a different parameter set than the writer triggers a
commitment mismatch before any AEAD operation is attempted.  A reader
supplying a different G than the encryptor likewise triggers a
commitment mismatch (<xref target="framework-commitment"/>).  Consuming protocols
<bcp14>MUST</bcp14> still reject unrecognized or unsupported parameter values before
decryption, since the commitment check detects mismatch but does not by
itself indicate which parameter value the recipient is unable to
support.</t>
        <t>One profile-level constant is bound transitively rather than via
payload_info:  aad_label is bound through protocol_id (each profile
fixes its own aad_label).  nonce_mode, by contrast, is carried in
payload_info, so the commitment binds it directly.  Profiles <bcp14>MUST NOT</bcp14>
share a protocol_id across distinct aad_label values.  Reusing a
protocol_id with a changed aad_label produces objects whose commitment
matches the wrong reader but whose per-segment AEAD verification fails
with no clear error attribution.</t>
      </section>
      <section anchor="framing-label-errors">
        <name>Framing and Label Errors</name>
        <t>Two classes of implementation error break cross-role isolation.  A
non-injective framing function maps distinct KDF input tuples to the
same primitive input, correlating outputs that should be independent.
Implementations <bcp14>MUST</bcp14> verify injectivity per <xref target="framing"/>.  Reusing a
label across roles (for example, "commit" for both commitment and
payload key) has the same effect.  Labels <bcp14>MUST</bcp14> be distinct within a
protocol version, and a new version that changes any derivation <bcp14>MUST</bcp14>
change the protocol_id.</t>
      </section>
      <section anchor="parameter-misuse">
        <name>Parameter Misuse</name>
        <t>The nonce mode and AEAD choice are coupled, and the table gives the rule
for each pairing:</t>
        <table anchor="nonce-aead-table">
          <name>Nonce mode by AEAD class and profile</name>
          <thead>
            <tr>
              <th align="left">AEAD class / profile</th>
              <th align="left">random nonce</th>
              <th align="left">derived nonce</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">non-MRAE, mutable</td>
              <td align="left">valid</td>
              <td align="left">unsafe</td>
            </tr>
            <tr>
              <td align="left">non-MRAE, write-once or append-only</td>
              <td align="left">valid</td>
              <td align="left">valid</td>
            </tr>
            <tr>
              <td align="left">MRAE, any profile</td>
              <td align="left">wasteful</td>
              <td align="left">valid</td>
            </tr>
          </tbody>
        </table>
        <t>Rewrite is where the coupling matters:  a derived nonce is reused
where a random nonce is redrawn, and the consequences of that reuse by
AEAD class are in <xref target="nonce-misuse"/> and <xref target="derived-nonces"/>.</t>
      </section>
      <section anchor="snapshot-limitations">
        <name>Snapshot Integrity Limitations</name>
        <t>First, a reader that does not run snapshot verification
(<xref target="snapshot-authenticator"/>) does not verify that a segment belongs to
the current authenticated snapshot.  Such a reader gets per-segment AEAD
authenticity only, without the snapshot integrity guarantee of
<xref target="snapshot-integrity"/>: the ciphertext core is authenticated under the
segment index and finality bit, but the reader cannot detect that the
segment was substituted from a previous valid version of the same
message at the same index, nor that other segments were dropped or
rolled back.  Such readers <bcp14>MUST</bcp14> still verify the commitment per
<xref target="framework-commitment"/>.  Applications that support random-access
single-segment reads <bcp14>MUST</bcp14> either run snapshot verification on every read
or explicitly document that they accept per-segment authenticity without
snapshot freshness.</t>
        <t>Conversely, snapshot verification authenticates the segment set, its
positions, and the count.  Without the segment commitment it does not
confirm that a tag is a valid AEAD tag for the ciphertext beside it.
With the segment commitment set it binds the ciphertext bytes and the
tag, but not that the tag opens the ciphertext under the AEAD
(<xref target="snapshot-interface"/>).  Decrypting the segment is what establishes
that, so snapshot verification layers set, position, and count binding
on top of per-segment AEAD without replacing it.</t>
        <t>Second, snapshot integrity does not provide freshness against
whole-object rollback.  A storage adversary that rolls back the entire
encrypted object, including the snapshot, to a previously valid version
is not detected by raAE alone, because the rolled-back snapshot is
itself a valid snapshot for that prior state.  This is replay of an
intact prior snapshot, not a forgery:  it stays out of scope unless the
consuming protocol authenticates external freshness into the snapshot
context.  Applications that require whole-object rollback resistance
<bcp14>MUST</bcp14> bind an authenticated version field, timestamp, monotonic counter,
or authenticated storage layer into that context.  Relatedly,
<xref target="full-rewrite"/> requires a writer to update only trusted snapshot
state, so a rewrite cannot launder a rolled-back snapshot into a valid
ongoing history.</t>
        <t>Third, same-index rollback within a snapshot is detected when snapshot
verification runs.  If an adversary replaces one segment with a
previously valid same-index segment but leaves the current snapshot
value in place, the recomputed snapshot value no longer matches the
stored one, so verification fails except with negligible forgery
probability (see <xref target="snapshot-security"/>).</t>
        <t>Truncation, including removal of the final segment marked is_final = 1,
is detected by snapshot verification.  The removed segment is absent
from the recomputed snapshot value and the count n_seg no longer matches
the segments present, so verification fails.  Truncation is a special
case of the first limitation above, for readers that skip snapshot
verification.</t>
      </section>
      <section anchor="salt-reuse">
        <name>Salt Reuse</name>
        <t>Reusing a salt with the same CEK across two files produces identical
payload schedule outputs: the same payload_key, the same snap_key, and,
in derived nonce mode, the same nonce_base.  The damage depends on the
nonce mode.</t>
        <t>In every nonce mode, an adversary can silently swap same-index segments
between the two files: both per-segment AEAD checks and the snapshot
authenticator accept the swap.  Salt reuse is therefore an integrity
break in every configuration.</t>
        <t>In derived nonce mode the nonces also repeat across the two files, so an
MRAE AEAD degrades to deterministic encryption and leaks plaintext
equality between same-index segments.  A non-MRAE AEAD then permits
plaintext recovery.  Such an AEAD is safe under a derived nonce only
within a single object, where the write-once or append-only discipline
keeps each derived nonce unique (<xref target="derived-nonces"/>).  Reusing the salt
repeats nonce_base across two objects, hence every derived nonce, and
breaks that scoping.</t>
        <t>In random nonce mode (and with the plaintext-bound hedge) fresh nonces
keep confidentiality intact, although the per-key nonce-collision budget
of <xref target="confidentiality-nonce-collision"/> then counts encryptions across
both files under the single CEK.  The integrity break above remains.
Applications <bcp14>MUST</bcp14> therefore ensure salt uniqueness per CEK when creating
a new message.  The freshness requirement in <xref target="full-encryption"/> exists
for this reason.</t>
      </section>
      <section anchor="rewrite-hazards">
        <name>Rewrite Hazards</name>
        <t>Applications <bcp14>MUST</bcp14> track total segment encryptions per key and freeze the
object before exceeding the per-epoch-key budget of
<xref target="rewrite-budget-security"/>.  For a 96-bit-nonce AEAD (Nn = 12) that
budget is roughly 2^32 encryptions per epoch key, and exceeding it risks
nonce collisions and plaintext recovery (<xref target="epoch-length-guidance"/>).</t>
        <t>A mutable profile with derived nonces and an MRAE AEAD reuses a
segment's deterministic nonce across non-terminal rewrites, and a crash
that replays a write reuses it again.  Confidentiality there rests on
the per-segment rewrite limit (<xref target="rewrite-budget-security"/>), not on
nonce uniqueness:  the AEAD degrades to equality leakage between
identical rewrites rather than to plaintext recovery, as long as that
budget is respected.</t>
        <t>The append-only profile has no such margin.  It admits a non-MRAE AEAD,
so its safety rests on never re-encrypting a segment with different
content (<xref target="append-only"/>), and a writer that breaks that rule gets a
two-time pad rather than a bounded leak.</t>
        <t>Per-segment associated data A_i is rewritable, so a reader cannot treat
it as context fixed at creation (<xref target="concrete-segment-aad"/>).  An
application that needs creation-fixed context places it in G, which the
commitment binds (<xref target="framework-commitment"/>), not in A_i.</t>
        <t>raAE also does not guarantee atomic rewrites.  A segment rewrite touches
the nonce metadata, ciphertext core, AEAD tag, and the snapshot value.
A crash between any two of these leaves the content inconsistent.
Applications <bcp14>MUST</bcp14> use write-ahead logging, copy-on-write, or an
equivalent mechanism to make rewrites recoverable.</t>
      </section>
      <section anchor="constant-time">
        <name>Constant-Time Implementation</name>
        <t>Several raAE operations handle secret data and <bcp14>MUST</bcp14> be implemented in
constant time to prevent timing side-channels.</t>
        <t>The KDF calls in the payload schedule and epoch key derivation take the
CEK or payload_key as input keying material.  Implementations <bcp14>MUST</bcp14>
ensure that the KDF's keyed operations execute in constant time with
respect to their key inputs.  For an HMAC-based KDF this is satisfied by
implementations that do not branch on key octets.</t>
        <t>Both the commitment comparison (<xref target="full-decryption"/>) and the snapshot
comparison in SnapVerify <bcp14>MUST</bcp14> use a constant-time octet comparison.  A
variable-time comparison reveals the position of the first differing
octet.  An adversary who can retry tampered inputs learns the expected
value one octet at a time and can then present a matching stored value.
This reduces the forgery cost of either check to a linear number of
trials (for the snapshot, the bound of <xref target="snapshot-security"/>).</t>
        <t>AEAD.Encrypt and AEAD.Decrypt operations inherit the constant-time
requirements of the underlying AEAD.  Implementations <bcp14>SHOULD</bcp14> use AEAD
libraries that document constant-time guarantees.</t>
      </section>
      <section anchor="properties-not-provided">
        <name>Properties Not Provided</name>
        <t>raAE protects segment content and binds segments together.  Everything
a complete storage or messaging system needs beyond that is the
consuming protocol's responsibility.  This section is the authoritative
boundary of what raAE does not provide.</t>
        <dl>
          <dt>Freshness and whole-object rollback:</dt>
          <dd>
            <t>Snapshot integrity binds the segment set of one recorded object
state, not its recency.  A party holding the ciphertext can present an
earlier honest state in full, and both per-segment and snapshot
verification still pass.  Telling the current state from a stale one
requires external freshness (<xref target="snapshot-limitations"/>).</t>
          </dd>
          <dt>Forward secrecy:</dt>
          <dd>
            <t>The CEK must remain available as long as any reader needs access, so
raAE provides none.</t>
          </dd>
          <dt>Sender identity:</dt>
          <dd>
            <t>Ciphertexts are not bound to any sender.  A signing or MAC layer is
needed for sender authentication.</t>
          </dd>
          <dt>Unlinkability:</dt>
          <dd>
            <t>Key identifiers and structural features of the encrypted format are
visible, so unlinkability requires application-layer measures.</t>
          </dd>
          <dt>Whole-message replacement:</dt>
          <dd>
            <t>Snapshot verification covers segments within a message but cannot
detect replacement of the message itself.  An adversary who swaps one
encrypted message for another goes undetected unless the application
binds message identity externally.</t>
          </dd>
          <dt>Serialization, storage, and key management:</dt>
          <dd>
            <t>raAE emits and consumes component values but defines no wire
container, storage transactions, or key lifecycle.  A consuming
protocol supplies these.</t>
          </dd>
        </dl>
      </section>
      <section anchor="security-domain-separation">
        <name>Cross-Application Domain Separation</name>
        <t>Two applications that both reuse the same SEAL profile label with the
same input keying material, the same payload_info, and the same G derive
identical commitments, keys, nonces, and AADs.  The protocol_id provides
cross-application domain separation only when it is distinct per
application.  Applications whose keying material may be shared across
systems <bcp14>SHOULD</bcp14> use an application-specific protocol_id (for example,
"myapp-backup-v1") rather than a SEAL profile label.  An application
adopting a SEAL profile unchanged <bcp14>MAY</bcp14> use that profile's label.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.  It defines an abstract primitive
and a parameterized construction and requests no code points or
registries of its own.  The cipher-suite code points and the registries
of named instantiations and snapshot authenticators are specified in the
companion (<xref target="I-D.sullivan-seal-concrete"/>).</t>
      <t>The normative reference to <xref target="I-D.ietf-hpke-pq"/>, which defines the
one-step KDF class this document's combiner admits, is a reference to
a work in progress, so publication of this document waits on it.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC5116">
          <front>
            <title>An Interface and Algorithms for Authenticated Encryption</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <date month="January" year="2008"/>
            <abstract>
              <t>This document defines algorithms for Authenticated Encryption with Associated Data (AEAD), and defines a uniform interface and a registry for such algorithms. The interface and registry can be used as an application-independent set of cryptoalgorithm suites. This approach provides advantages in efficiency and security, and promotes the reuse of crypto implementations. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5116"/>
          <seriesInfo name="DOI" value="10.17487/RFC5116"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </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>
        <reference anchor="RFC8452">
          <front>
            <title>AES-GCM-SIV: Nonce Misuse-Resistant Authenticated Encryption</title>
            <author fullname="S. Gueron" initials="S." surname="Gueron"/>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="Y. Lindell" initials="Y." surname="Lindell"/>
            <date month="April" year="2019"/>
            <abstract>
              <t>This memo specifies two authenticated encryption algorithms that are nonce misuse resistant -- that is, they do not fail catastrophically if a nonce is repeated.</t>
              <t>This document is the product of the Crypto Forum Research Group.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8452"/>
          <seriesInfo name="DOI" value="10.17487/RFC8452"/>
        </reference>
        <reference anchor="RFC9180">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="R. Barnes" initials="R." surname="Barnes"/>
            <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
            <author fullname="B. Lipp" initials="B." surname="Lipp"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="February" year="2022"/>
            <abstract>
              <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9180"/>
          <seriesInfo name="DOI" value="10.17487/RFC9180"/>
        </reference>
        <reference anchor="RFC9861">
          <front>
            <title>KangarooTwelve and TurboSHAKE</title>
            <author fullname="B. Viguier" initials="B." surname="Viguier"/>
            <author fullname="D. Wong" initials="D." role="editor" surname="Wong"/>
            <author fullname="G. Van Assche" initials="G." role="editor" surname="Van Assche"/>
            <author fullname="Q. Dang" initials="Q." role="editor" surname="Dang"/>
            <author fullname="J. Daemen" initials="J." role="editor" surname="Daemen"/>
            <date month="October" year="2025"/>
            <abstract>
              <t>This document defines four eXtendable-Output Functions (XOFs), hash functions with output of arbitrary length, named TurboSHAKE128, TurboSHAKE256, KT128, and KT256.</t>
              <t>All four functions provide efficient and secure hashing primitives, and the last two are able to exploit the parallelism of the implementation in a scalable way.</t>
              <t>This document is a product of the Crypto Forum Research Group. It builds up on the definitions of the permutations and of the sponge construction in NIST FIPS 202 and is meant to serve as a stable reference and an implementation guide.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9861"/>
          <seriesInfo name="DOI" value="10.17487/RFC9861"/>
        </reference>
        <reference anchor="I-D.ietf-hpke-pq">
          <front>
            <title>Post-Quantum and Post-Quantum/Traditional Hybrid Algorithms for HPKE</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
              <organization>Cisco</organization>
            </author>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>Selkie Cryptography</organization>
            </author>
            <date day="6" month="July" year="2026"/>
            <abstract>
              <t>   Updating key exchange and public-key encryption protocols to resist
   attack by quantum computers is a high priority given the possibility
   of "harvest now, decrypt later" attacks.  Hybrid Public Key
   Encryption (HPKE) is a widely-used public key encryption scheme based
   on combining a Key Encapsulation Mechanism (KEM), a Key Derivation
   Function (KDF), and an Authenticated Encryption with Associated Data
   (AEAD) scheme.  In this document, we define KEM algorithms for HPKE
   based on both post-quantum KEMs and hybrid constructions of post-
   quantum KEMs with traditional KEMs, as well as a KDF based on SHA-3
   that is suitable for use with these KEMs.  When used with these
   algorithms, HPKE is resilient with respect to attacks by a quantum
   computer.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-hpke-pq-05"/>
        </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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC8446">
          <front>
            <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
            <author fullname="E. Rescorla" initials="E." surname="Rescorla"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>This document specifies version 1.3 of the Transport Layer Security (TLS) protocol. TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
              <t>This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961. This document also specifies new requirements for TLS 1.2 implementations.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8446"/>
          <seriesInfo name="DOI" value="10.17487/RFC8446"/>
        </reference>
        <reference anchor="RFC8645">
          <front>
            <title>Re-keying Mechanisms for Symmetric Keys</title>
            <author fullname="S. Smyshlyaev" initials="S." role="editor" surname="Smyshlyaev"/>
            <date month="August" year="2019"/>
            <abstract>
              <t>A certain maximum amount of data can be safely encrypted when encryption is performed under a single key. This amount is called the "key lifetime". This specification describes a variety of methods for increasing the lifetime of symmetric keys. It provides two types of re-keying mechanisms based on hash functions and block ciphers that can be used with modes of operations such as CTR, GCM, CBC, CFB, and OMAC.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8645"/>
          <seriesInfo name="DOI" value="10.17487/RFC8645"/>
        </reference>
        <reference anchor="RFC8937">
          <front>
            <title>Randomness Improvements for Security Protocols</title>
            <author fullname="C. Cremers" initials="C." surname="Cremers"/>
            <author fullname="L. Garratt" initials="L." surname="Garratt"/>
            <author fullname="S. Smyshlyaev" initials="S." surname="Smyshlyaev"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="C. Wood" initials="C." surname="Wood"/>
            <date month="October" year="2020"/>
            <abstract>
              <t>Randomness is a crucial ingredient for Transport Layer Security (TLS) and related security protocols. Weak or predictable "cryptographically secure" pseudorandom number generators (CSPRNGs) can be abused or exploited for malicious purposes. An initial entropy source that seeds a CSPRNG might be weak or broken as well, which can also lead to critical and systemic security problems. This document describes a way for security protocol implementations to augment their CSPRNGs using long-term private keys. This improves randomness from broken or otherwise subverted CSPRNGs.</t>
              <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8937"/>
          <seriesInfo name="DOI" value="10.17487/RFC8937"/>
        </reference>
        <reference anchor="RFC9580">
          <front>
            <title>OpenPGP</title>
            <author fullname="P. Wouters" initials="P." role="editor" surname="Wouters"/>
            <author fullname="D. Huigens" initials="D." surname="Huigens"/>
            <author fullname="J. Winter" initials="J." surname="Winter"/>
            <author fullname="Y. Niibe" initials="Y." surname="Niibe"/>
            <date month="July" year="2024"/>
            <abstract>
              <t>This document specifies the message formats used in OpenPGP. OpenPGP provides encryption with public key or symmetric cryptographic algorithms, digital signatures, compression, and key management.</t>
              <t>This document is maintained in order to publish all necessary information needed to develop interoperable applications based on the OpenPGP format. It is not a step-by-step cookbook for writing an application. It describes only the format and methods needed to read, check, generate, and write conforming packets crossing any network. It does not deal with storage and implementation questions. It does, however, discuss implementation issues necessary to avoid security flaws.</t>
              <t>This document obsoletes RFCs 4880 ("OpenPGP Message Format"), 5581 ("The Camellia Cipher in OpenPGP"), and 6637 ("Elliptic Curve Cryptography (ECC) in OpenPGP").</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9580"/>
          <seriesInfo name="DOI" value="10.17487/RFC9580"/>
        </reference>
        <reference anchor="RFC9771">
          <front>
            <title>Properties of Authenticated Encryption with Associated Data (AEAD) Algorithms</title>
            <author fullname="A. Bozhko" initials="A." role="editor" surname="Bozhko"/>
            <date month="May" year="2025"/>
            <abstract>
              <t>Authenticated Encryption with Associated Data (AEAD) algorithms provide both confidentiality and integrity of data. The widespread use of AEAD algorithms in various applications has led to an increased demand for AEAD algorithms with additional properties, driving research in the field. This document provides definitions for the most common of those properties and aims to improve consistency in the terminology used in documentation. This document is a product of the Crypto Forum Research Group.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9771"/>
          <seriesInfo name="DOI" value="10.17487/RFC9771"/>
        </reference>
        <reference anchor="I-D.irtf-cfrg-aead-limits">
          <front>
            <title>Usage Limits on AEAD Algorithms</title>
            <author fullname="Felix Günther" initials="F." surname="Günther">
              <organization>IBM Research Europe - Zurich</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="4" month="December" year="2025"/>
            <abstract>
              <t>   An Authenticated Encryption with Associated Data (AEAD) algorithm
   provides confidentiality and integrity.  Excessive use of the same
   key can give an attacker advantages in breaking these properties.
   This document provides simple guidance for users of common AEAD
   functions about how to limit the use of keys in order to bound the
   advantage given to an attacker.  It considers limits in both single-
   and multi-key settings.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-11"/>
        </reference>
        <reference anchor="I-D.sullivan-seal-concrete">
          <front>
            <title>SEAL Cipher Suites and Instantiations</title>
            <author initials="N." surname="Sullivan" fullname="Nick Sullivan">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-sullivan-seal-concrete-00"/>
        </reference>
        <reference anchor="BHT18" target="https://eprint.iacr.org/2018/136">
          <front>
            <title>Revisiting AES-GCM-SIV: Multi-user Security, Faster Key Derivation, and Better Bounds</title>
            <author initials="P." surname="Bose">
              <organization/>
            </author>
            <author initials="V. T." surname="Hoang">
              <organization/>
            </author>
            <author initials="S." surname="Tessaro">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="IACR" value="ePrint 2018/136"/>
        </reference>
        <reference anchor="HRRV15" target="https://eprint.iacr.org/2015/189">
          <front>
            <title>Online Authenticated-Encryption and its Nonce-Reuse Misuse-Resistance</title>
            <author initials="V. T." surname="Hoang">
              <organization/>
            </author>
            <author initials="R." surname="Reyhanitabar">
              <organization/>
            </author>
            <author initials="P." surname="Rogaway">
              <organization/>
            </author>
            <author initials="D." surname="Vizár">
              <organization/>
            </author>
            <date year="2015"/>
          </front>
          <seriesInfo name="IACR" value="ePrint 2015/189"/>
        </reference>
        <reference anchor="Tink" target="https://eprint.iacr.org/2020/1019">
          <front>
            <title>Security of Streaming Encryption in Google's Tink Library</title>
            <author initials="V. T." surname="Hoang">
              <organization/>
            </author>
            <author initials="Y." surname="Shen">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
          <seriesInfo name="IACR" value="ePrint 2020/1019"/>
        </reference>
        <reference anchor="DGRW18" target="https://doi.org/10.1007/978-3-319-96884-1_6">
          <front>
            <title>Fast Message Franking: From Invisible Salamanders to Encryptment</title>
            <author initials="Y." surname="Dodis">
              <organization/>
            </author>
            <author initials="P." surname="Grubbs">
              <organization/>
            </author>
            <author initials="T." surname="Ristenpart">
              <organization/>
            </author>
            <author initials="J." surname="Woodage">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
          <seriesInfo name="CRYPTO 2018, LNCS" value="vol. 10991, pp. 155-186"/>
          <seriesInfo name="DOI" value="10.1007/978-3-319-96884-1_6"/>
        </reference>
        <reference anchor="ADG22" target="https://www.usenix.org/conference/usenixsecurity22/presentation/albertini">
          <front>
            <title>How to Abuse and Fix Authenticated Encryption Without Key Commitment</title>
            <author initials="A." surname="Albertini">
              <organization/>
            </author>
            <author initials="T." surname="Duong">
              <organization/>
            </author>
            <author initials="S." surname="Gueron">
              <organization/>
            </author>
            <author initials="S." surname="Kölbl">
              <organization/>
            </author>
            <author initials="A." surname="Luykx">
              <organization/>
            </author>
            <author initials="S." surname="Schmieg">
              <organization/>
            </author>
            <date year="2022"/>
          </front>
          <seriesInfo name="USENIX Security 2022" value="pp. 3291-3308"/>
        </reference>
        <reference anchor="FLRR25" target="https://eprint.iacr.org/2025/2275">
          <front>
            <title>Random-Access AEAD for Fast Lightweight Online Encryption</title>
            <author initials="A." surname="Fábrega">
              <organization/>
            </author>
            <author initials="J." surname="Len">
              <organization/>
            </author>
            <author initials="T." surname="Ristenpart">
              <organization/>
            </author>
            <author initials="G." surname="Rubin">
              <organization/>
            </author>
            <date year="2026"/>
          </front>
          <seriesInfo name="EUROCRYPT" value="2026"/>
          <seriesInfo name="DOI" value="10.1007/978-3-032-25333-0_10"/>
        </reference>
        <reference anchor="SEALPROOFS">
          <front>
            <title>Security Analysis of the SEAL Construction: raAE, Snapshot Integrity, and Commitment</title>
            <author initials="N." surname="Sullivan">
              <organization/>
            </author>
            <date/>
          </front>
          <seriesInfo name="Work in Progress" value="manuscript in preparation"/>
        </reference>
      </references>
    </references>
    <?line 3073?>

<section anchor="appendix-pt-bound">
      <name>Optional Plaintext-Bound Nonce Construction</name>
      <t>This appendix is informative.  It describes an optional encryptor-side
construction that mixes plaintext content into the per-segment nonce
derivation to defend against RNG state duplication.  The construction is
encryptor-only: the decryptor reads the resulting nonce from the wire
(in the same slot used by random mode) and never invokes any of the
machinery below.  Implementations <bcp14>MAY</bcp14> use this construction in place of
a fresh CSPRNG call when generating nonces under nonce_mode "random".
The wire format is indistinguishable from random mode and decryption is
unaffected.</t>
      <t>One such construction:</t>
      <artwork><![CDATA[
pt_digest(i) = LH(P_i)

encryption_params = [aead_id, segment_max_be, kdf_id]
pt_hash(i) = KDF(protocol_id, pt_hash_label,
                 [pt_digest(i)],
                 encryption_params, Nh)

nonce_ctx = encode(protocol_id, uint64(i), pt_hash(i))
nonce(i) = KDF(protocol_id, pt_nonce_label,
               [Random(Nn), payload_key],
               [...payload_info, nonce_ctx], Nn)
]]></artwork>
      <t>This construction fixes two labels:</t>
      <table anchor="pt-bound-labels">
        <name>Plaintext-bound construction labels</name>
        <thead>
          <tr>
            <th align="left">Derivation role</th>
            <th align="left">Label variable</th>
            <th align="left">Value</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">Plaintext digest binding</td>
            <td align="left">pt_hash_label</td>
            <td align="left">"pt-nonce"</td>
          </tr>
          <tr>
            <td align="left">Final nonce derivation</td>
            <td align="left">pt_nonce_label</td>
            <td align="left">"nonce"</td>
          </tr>
        </tbody>
      </table>
      <t>Both labels are distinct from all other SEAL labels.  Neither
derivation uses nonce_base_label (<xref target="label-table"/>): the "nonce_base"
label belongs to derived nonce mode and does not appear in this
construction.  In the final derivation nonce_ctx enters the info list
as one element after the payload_info elements: its encode output is
framed behind a length prefix like any other element, not spliced flat
into the list.</t>
      <t>LH is the over-large-field digest of <xref target="kdf-combiner"/>.  Its collision
resistance is justified in <xref target="kdf-combiner"/>.</t>
      <t>When the encryptor's CSPRNG produces duplicated state (for example, from
a virtual machine snapshot or a fork without reseed), two encryptions of
distinct plaintexts at the same segment index still produce distinct
nonces because pt_hash(i) differs.  Two encryptions of identical
plaintexts at the same index produce identical nonces, resulting in
deterministic encryption: the ciphertexts are identical, revealing only
that the plaintexts are equal.</t>
      <t>For rewrites under this construction, the encryptor recomputes
pt_hash(i) with the new plaintext, derives a fresh nonce(i) using the
new pt_hash(i) and a new Random(Nn), seals the new plaintext under the
new nonce, and updates the snapshot value as in
<xref target="full-rewrite"/>.</t>
    </section>
    <section anchor="hedged-randomness">
      <name>Optional Hedged Randomness</name>
      <t>When a long-term symmetric key sk of at least Nh octets is available to
the encryptor, implementations <bcp14>SHOULD</bcp14> mix it into random generation
using the hedging pattern of <xref target="RFC8937"/>.  If only an asymmetric private
key is available, it <bcp14>MUST</bcp14> first be processed through a KDF to produce a
uniform symmetric key.</t>
      <artwork><![CDATA[
hedge_key = KDF(protocol_id, hedge_label, sk, [], Nh)

HedgedRandom(n, label):
  return KDF(protocol_id, label,
      [hedge_key, Random(n)], [], n)
]]></artwork>
      <t>This construction fixes one label, hedge_label = "hedge", distinct from
all other SEAL labels.</t>
      <t>HedgedRandom output depends on both the CSPRNG and sk, so a weak CSPRNG
alone cannot predict it.  Hedging does not help when the CSPRNG state
itself is duplicated (VM snapshots, fork without reseed).  Identical
CSPRNG output still produces identical HedgedRandom output.
<xref target="appendix-pt-bound"/> describes an optional encryptor-side construction
that defends against state duplication.  It is orthogonal to hedging
and the two <bcp14>MAY</bcp14> be combined.</t>
    </section>
    <section anchor="appendix-reductions">
      <name>Proof Status and Security Claim Provenance</name>
      <t>This appendix is informative.  <xref target="proof-map-table"/> gives each security
claim's source, argument, and assumptions.  Each is inherited from
<xref target="FLRR25"/>, argued in this document, referenced from external work, or
deferred to the proof paper in preparation (<xref target="SEALPROOFS"/>).  The one
claim proved in full here is the KDF combiner's injectivity.</t>
      <t>The combiner's input encoding is injective and canonical
(<xref target="kdf-combiner"/>, <xref target="framing"/>):  distinct (protocol_id, label, ikm,
info, L) tuples map to distinct primitive inputs, from the
length-prefixed encoding rather than the KDF.  Collision resistance is
assumed only of LH, and only for over-large fields.  A snapshot
authenticator with the segment commitment additionally relies on LH
collision resistance to bind each segment's ciphertext of any length
(<xref target="snapshot-interface"/>), and the commitment derivation carries its own
separate collision-resistance assumption (<xref target="appendix-commitment"/>).</t>
      <section anchor="appendix-proof-map">
        <name>Provenance of the Security Claims</name>
        <table anchor="proof-map-table">
          <name>Provenance of the security claims</name>
          <thead>
            <tr>
              <th align="left">Property</th>
              <th align="left">Source</th>
              <th align="left">Argument</th>
              <th align="left">Rests on</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ra-ROR</td>
              <td align="left">
                <xref target="FLRR25"/> notion and base proof; SEAL's arbitrary-position ra-ROR syntax is a SEAL-specific obligation</td>
              <td align="left">
                <xref target="appendix-adv-notation"/>, <xref target="appendix-ror"/></td>
              <td align="left">mu-PRF KDF (two keying levels), mu-ROR AEAD, no nonce collision, fresh per-message salt</td>
            </tr>
            <tr>
              <td align="left">ra-CMT (commitment, position-respecting)</td>
              <td align="left">
                <xref target="FLRR25"/></td>
              <td align="left">
                <xref target="appendix-commitment"/></td>
              <td align="left">collision resistance of the commitment derivation map over (protocol_id, "commit", CEK, payload_info, G, commitment_length)</td>
            </tr>
            <tr>
              <td align="left">ra-CMT-p (per-segment associated-data and position commitment)</td>
              <td align="left">
                <xref target="FLRR25"/> notion and base proof; SEAL position-binding realization and per-segment associated-data and position accounting argued here, formal write-up in <xref target="SEALPROOFS"/></td>
              <td align="left">
                <xref target="appendix-commitment"/></td>
              <td align="left">ra-CMT collision bound plus the underlying AEAD's commitment bound for the forged position, restored conditionally by the segment commitment over a strict ordering where the snapshot is authenticated outside the construction (<xref target="key-commitment"/>)</td>
            </tr>
            <tr>
              <td align="left">KDF combiner injectivity and domain separation</td>
              <td align="left">this document (structural, proof-complete)</td>
              <td align="left">
                <xref target="kdf-combiner"/>, <xref target="framing"/></td>
              <td align="left">injectivity of the length-prefixed encoding (KDF need not be injective); collision resistance of LH for over-large fields only</td>
            </tr>
            <tr>
              <td align="left">Snapshot integrity</td>
              <td align="left">this document (notion, <xref target="snapshot-integrity"/>); configured authenticator (bound)</td>
              <td align="left">
                <xref target="snapshot-security"/></td>
              <td align="left">unforgeability of the snapshot value by a party without snap_key; per-object separation via salt-bound snap_key</td>
            </tr>
            <tr>
              <td align="left">AEAD usage, rewrite, and max-object bounds</td>
              <td align="left">external work (operational, not proven here)</td>
              <td align="left">
                <xref target="aead-usage-limits"/>, <xref target="max-object-size"/>, <xref target="mrae-bounds"/></td>
              <td align="left">
                <xref target="I-D.irtf-cfrg-aead-limits"/>, <xref target="RFC8452"/> Section 9 with <xref target="BHT18"/>, 2^63 segment-index ceiling</td>
            </tr>
            <tr>
              <td align="left">Derived-nonce unique-nonce transform</td>
              <td align="left">precedent, not proof (TLS 1.3 <xref target="RFC8446"/>, STREAM <xref target="HRRV15"/>)</td>
              <td align="left">
                <xref target="derived-nonces"/>, <xref target="appendix-nonce-modes"/></td>
              <td align="left">write-once or append-only uniqueness discipline reducing to nonce-respecting AEAD security</td>
            </tr>
            <tr>
              <td align="left">Derived-nonce equality leakage (MRAE)</td>
              <td align="left">this document; full proof in <xref target="SEALPROOFS"/></td>
              <td align="left">
                <xref target="appendix-nonce-modes"/></td>
              <td align="left">MRAE AEAD (<xref target="RFC8452"/>); per-segment fixed-nonce data-volume cap</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="appendix-adv-notation">
        <name>Advantage Notation and Adversary Parameters</name>
        <t>For a ra-ROR adversary (<xref target="adversary-model"/>) using at most u distinct
CEKs and q_m messages, each encrypted with an independent fresh 32-octet
per-content salt (<xref target="full-encryption"/>), across n_ep total epochs and
making q_e encryption and q_d decryption segment queries with sigma =
q_e + q_d, the advantage is bounded by:</t>
        <artwork><![CDATA[
Adv_raROR(A) <= Adv_salt_coll
                   + Adv_muPRF(KDF, B_KDF)
                   + Adv_muROR(AEAD, B_AEAD)
                   + Adv_nonce_coll
                   + Adv_snap
]]></artwork>
        <dl>
          <dt>Adv_salt_coll</dt>
          <dd>
            <t>The probability that two messages encrypted under one CEK draw
the same salt.  Because the salt is a 32-octet value drawn
uniformly at random, this term is at most q_m^2 / 2^256.  A salt
collision is not a PRF-distinguishing event: the KDF
deterministically produces identical payload_key, snap_key, and
nonce_base outputs whenever (CEK, payload_info) repeats, so the
event must be charged separately.  Conditioned on no salt
collision, distinct messages under one CEK have distinct
payload_info values and therefore independent KDF outputs under
the mu-PRF assumption.  This term holds only under the fresh
per-message uniform salt requirement of <xref target="full-encryption"/>.  A
profile that reuses salts or draws them non-uniformly forfeits it
and must argue payload-schedule separation by other means
(<xref target="salt-reuse"/>).</t>
          </dd>
          <dt>Adv_muPRF(KDF, B_KDF)</dt>
          <dd>
            <t>The multi-user PRF advantage of the KDF, covering two keying levels.
Level A is keyed by the CEK and produces payload_key, snap_key, and
nonce_base.  It has u users, queried once per message.  Level B is
keyed by payload_key (producing epoch_key per <xref target="epoch-key-derivation"/>
and, in the plaintext-bound construction, per-segment nonces per
<xref target="appendix-pt-bound"/>) and by snap_key (producing the snapshot
authenticator's keyed derivations).  It has q_m users.  The snap_key
subset of Level B feeds the configured snapshot authenticator and is
counted under Adv_snap below.  It is not counted again here.</t>
          </dd>
          <dt>Adv_muROR(AEAD, B_AEAD)</dt>
          <dd>
            <t>The multi-user real-or-random advantage of the AEAD over sigma total
segment queries.  There is one mu-ROR user per distinct segment key,
for n_ep epoch keys total (n_ep = q_m when each message uses a single
flat epoch key).  This advantage absorbs a key-collision birthday term
of about n_ep^2/2^(8*Nk) over the n_ep distinct keys.  For the
256-bit-key suites (Nk = 32) that term is about n_ep^2/2^256 and is
negligible.  For the 128-bit-key suite (Nk = 16) it is about
n_ep^2/2^128 and is the binding epoch-key collision floor.
<xref target="epoch-length-guidance"/> bounds n_ep for that suite.</t>
          </dd>
          <dt>Adv_nonce_coll</dt>
          <dd>
            <t>The probability of a nonce collision under any segment key.  In
derived nonce mode it is zero, conditional on no salt collision
(already charged via Adv_salt_coll).  In random nonce mode (with or
without the plaintext-bound hedge) it is bounded per
<xref target="confidentiality-nonce-collision"/>.  The
derived-mode statement relies on the deterministic-MRAE analysis in
<xref target="appendix-nonce-modes"/>.</t>
          </dd>
          <dt>Adv_snap</dt>
          <dd>
            <t>The snapshot-forgery advantage of the configured snapshot
authenticator, present only under an authenticator that produces a
snapshot value and zero under None (<xref target="snapshot-none"/>).  It covers
the mu-PRF cost of the authenticator's snap_key derivations (the
snap_key subset of Level B, counted here and not again in
Adv_muPRF(KDF, B_KDF)) with the forgery and any further
terms the authenticator's own construction requires.  A key-holder
content-binding property, where an authenticator provides one, is a
separate notion from this without-key advantage and is not counted
here.</t>
          </dd>
        </dl>
      </section>
      <section anchor="appendix-ror">
        <name>ra-ROR Reduction</name>
        <t>The reduction follows the <xref target="FLRR25"/> hybrid over the two-level key
schedule (<xref target="key-derivation"/>).  Condition on no salt collision
(Adv_salt_coll).  Replace the CEK-keyed KDF outputs and the
payload_key-keyed outputs with uniformly random values, charged to
Adv_muPRF; these are Level A and the payload_key subset of Level B.  The
snap_key-keyed outputs are idealized likewise, but their mu-PRF cost is
the snap_key subset of Level B, charged to Adv_snap and not to Adv_muPRF
(<xref target="snapshot-security"/>).  Bound the resulting segment AEAD outputs
(Adv_muROR).  A flat epoch key is the single-epoch case of the same
argument.  The segment AEAD calls are nonce-respecting only under no
nonce collision, the event charged to Adv_nonce_coll
(<xref target="appendix-adv-notation"/>).  In derived nonce mode this term is zero
conditional on the same no-salt-collision event
(<xref target="appendix-nonce-modes"/>).  The snapshot authenticator's forgery is the
remaining part of Adv_snap (<xref target="snapshot-security"/>).  The reduction
constructs adversaries B_KDF against multi-user PRF security of the KDF
and B_AEAD against multi-user real-or-random security of the AEAD, each
running in time approximately that of A.</t>
      </section>
      <section anchor="appendix-commitment">
        <name>Commitment</name>
        <t>ra-CMT security reduces to collision resistance of the commitment
derivation map over the tuple (protocol_id, "commit", CEK, payload_info,
G, commitment_length), with G empty by default.  PRF security alone is
not sufficient for this reduction, because the commitment adversary may
choose the CEK and the context values (<xref target="key-derivation"/>).</t>
        <t>For commitment_length = L octets, the relevant quantities are:</t>
        <artwork><![CDATA[
fixed-pair collision probability:  2^(-8*L)
q-query birthday probability:      q^2 / 2^(8*L + 1)
collision-search work factor:      about 2^(4*L)
]]></artwork>
        <t>Thus 16 octets gives about 2^64 collision-search work, 32 octets about
2^128, 48 octets about 2^192, and 64 octets about 2^256, each capped by
the collision resistance of the underlying hash.  The fixed-pair
collision probabilities at 32, 48, and 64 octets are 2^(-256), 2^(-384),
and 2^(-512), respectively.</t>
        <t>The ra-CMT-p advantage is bounded by the sum of two terms:  the
commitment collision bound above and the underlying AEAD's commitment
bound for the forged position.</t>
        <t>Position binding is inherited from the underlying AEAD, restored by the
segment commitment over a strict ordering where the snapshot is
authenticated outside the construction (<xref target="key-commitment"/>).  The notion
derives from <xref target="FLRR25"/>, and the per-segment associated-data and
position accounting is deferred to <xref target="SEALPROOFS"/>
(<xref target="appendix-proof-map"/>).</t>
      </section>
      <section anchor="appendix-nonce-modes">
        <name>Nonce Modes</name>
        <t>The unique-nonce transform of <xref target="derived-nonces"/>, which XORs the segment
index and finality bit into nonce_base, follows TLS 1.3 (<xref target="RFC8446"/>)
static-IV-XOR-identifier and STREAM (<xref target="HRRV15"/>) counter-plus-final-bit
precedent.  The transform is injective in the pair (i, is_final).  The
leading Nn - 8 octets of nonce_base are unchanged; XOR by its fixed low
8-octet value is a bijection on 8-octet strings; and (i, is_final) maps
to the integer (i &lt;&lt; 1) | is_final, which is a bijection from the index
range i &lt; 2^63 onto the 64-bit values.  Distinct pairs therefore yield
distinct nonces, and a derived nonce repeats only when an object
encrypts twice at one pair.</t>
        <t>Both disciplines of <xref target="derived-nonces"/> keep every derived nonce carrying
one plaintext, so each reduces unique-nonce record protection to
nonce-respecting AEAD security.  That reduction is precedent, not a
SEAL-specific proof.</t>
        <t>Under both disciplines no segment is ever re-encrypted with a different
plaintext or associated data (<xref target="nonce-misuse"/>, <xref target="append-only"/>), so
where a nonce is used twice both uses carry the same inputs,
AEAD.Encrypt reproduces the same ciphertext, and a reduction answers the
second query from the first one's output.  The bound is therefore the
same in both cases:  the underlying AEAD's bound under distinct nonces.</t>
        <t>In derived nonce mode the nonce-collision term is zero conditional on no
salt collision, because each segment index maps to one derived nonce and
a fresh per-message salt makes the segment keys distinct across
messages.  A rewrite reuses a segment's derived nonce, so the
construction relies on the underlying MRAE AEAD: re-encrypting the same
plaintext and associated data under the same key and nonce reproduces
the same ciphertext, which leaks only equality of those inputs, while
distinct inputs remain real-or-random secure (<xref target="RFC8452"/>).  The formal
real-or-random treatment of this equality leakage for derived nonce mode
is in preparation (<xref target="SEALPROOFS"/>).  That treatment builds on the
<xref target="FLRR25"/> ra-ROR analysis and changes its nonce-respecting hypothesis:
a rewrite repeats a segment's derived nonce, so the proof replaces the
nonce-respecting AEAD assumption with deterministic-MRAE security, under
which nonce reuse leaks only input equality.</t>
      </section>
    </section>
    <section anchor="appendix-rationale">
      <name>Design Rationale</name>
      <t>This appendix is informative.</t>
      <section anchor="key-schedule-design-rationale">
        <name>Key Schedule Design Rationale</name>
        <t>The per-content salt makes the payload schedule unique even when a CEK
is reused across messages, which matters for applications that derive
CEKs from group keys.  The encryptor chooses the salt locally at write
time.  A per-message counter would instead require synchronized state.</t>
        <t>The CEK is 32 octets regardless of the AEAD key size Nk, so a
128-bit-key AEAD still derives its keys from a 256-bit CEK.</t>
        <t>Epoch keys bound the number of AEAD invocations under any one segment
encryption key.</t>
        <dl>
          <dt>AEAD per-key bounds:</dt>
          <dd>
            <t>The per-key bounds of the underlying AEAD (birthday for 96-bit-nonce
schemes, block-size for AES, integrity forgery for all schemes) become
the limiting factor on security long before the nonce space is fully
exhausted.</t>
          </dd>
          <dt>Write-once content:</dt>
          <dd>
            <t>Large content with many segments can place many AEAD invocations
under one key, even when the content is written once.</t>
          </dd>
          <dt>Rewrites:</dt>
          <dd>
            <t>Rewrites consume additional invocations and can exhaust the same
budget faster than write-once use, but they are not the only reason
for epoching.  Write-once large content benefits from the same
partitioning.</t>
          </dd>
          <dt>Random access:</dt>
          <dd>
            <t>Rekeying the entire content would defeat the random-access property,
so epoch keys bound the per-key invocation count without requiring a
full re-encryption.</t>
          </dd>
        </dl>
        <t>Labels separate derivation roles: commitment and payload_key share the
same inputs but different labels, making them independent under the PRF
assumption.  Once CEK and salt are chosen the hierarchy is fixed, with
no mutable state to synchronize across writers.</t>
      </section>
      <section anchor="nonce-mode-design-rationale">
        <name>Nonce Mode Design Rationale</name>
        <t>Random mode is simplest but trusts the CSPRNG completely.  Derived mode
removes that trust.  In a mutable profile it requires an MRAE AEAD,
because an in-place rewrite reuses the segment nonce
(<xref target="parameter-misuse"/>).  In the write-once profile the write-once rule
keeps every derived nonce unique, and in the append-only profile the
append-only rule does, so under either, derived mode pairs with any
AEAD.  A third rule was available and rejected:  permitting a length
change in either direction would let a truncation free indices the
object had already spent, for a later append to encrypt new content at
(<xref target="append-only"/>).</t>
        <t>The nonce mode is a profile parameter:  a profile selects a valid
(nonce_mode, snap_id) tuple, subject to the MRAE requirement above.</t>
      </section>
    </section>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The author thanks Andrés Fábrega, Thomas Ristenpart, Gregory Rubin,
Richard Barnes, Brendan McMillion, Thibault Meunier, Kenny Paterson,
Christopher Patton, Martin Thomson, Stanislav V. Smyshlyaev, and
Christopher A. Wood for their reviews, comments, and discussions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7S963Ycx7Eu+D+fog71g8BxN0RQF0vY1j4D8yaOKJIDULb3
srV5CugCUGJ3V7uqGiRMaj/LnJeYB5j9YhNfXDIjq6pByvsM17IFNKqzMiMj
I+P6xXw+D33dL6uj4s5JuV40q/nx+XnVdcXxtr+q1n19XvbVoni0Pm9vNn3d
rO+E8uysra7pC215/OhOWDTn63JFAyza8qKfd9vlsr4u1/Pzi/Zy3pZlNb/3
RcAol017c1TU64sm1Jv2qOjbbdffv3fv23v3Q7c9W9VdR+P3Nxsa6+nJq8eh
bKtSf3zbtG8u22a7OSoeYCJN8bhpt6vQ9TTp1+WyWdOXbqoudKuy7V//fdv0
VXdUrJuwqY9CUcyLvjnn/3ZN27fVRSe/3Kz451DSaptWnqzX9M3nB8WproQ+
LApZ4vP6/E3+edNeluv6HyVIY3O7bMvN1U3xoFkTMfp6fVk8e/aAn65WZb2k
adXnV82y7A6MWL+rq/7i/7jEXw/Om1UI66Zd0ZjXFaZ08vjBV4eHX9uP33z9
rf74zb3D39uPX351X3/89vCbe/bjN18f4sen84cHeMX8avOmmm/+fhQC9iF/
xzdffmnv+ObrL7+yH7/9wt7x7Vdp4N//Pg3c0sC822VVLubLelX3nf0xskNX
lcv5eUN8VPX8xqIwxjt9dPyseFBvrqqWiFvTzhW0q8XTNXa3r5m23R3+Ston
/NuxV7ft14IY8ai4f+/+1/xrV7V11YEWNubTdV+166qfPwQ7j7g6W8b83j36
1h+/f3X4ja6obC8r+tJV32+6o88/rzZtve4P6vK8PSBO+fz+vcNvPj/84uts
+SfVdd3VzCfHj07nTx78OD99+qej4kcwz3zbgSrV+bat+5vZ33SWfyselx1N
tPihuike0iKumUozJtwfqx5/+mOzXS9uo9vLA3qmq/IP/3RQvDoovm/K9WX+
h1P6AwmGsm0yQh5+s4OQd54ePzi5Q+urXoIIha0dE/r+5ORPh199Ms2++vzw
m28zmr1YL+t1lQupeRJSTAbiwkSu57Rl1fykInIWP9Yd/Yd+6Wpw2Hl1C412
kuPkoDipbq7o8PflWdmOKHvSXJZvy5v884cHxZ/qf/zn/2pzEn716SRkUmC+
r+r1m08l4P17nx/eO8wpaCxVNBfFKUnEcgUGdCSs14l6T5rmclnd7fitxbP6
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
T3jmGs98hA4f+8d0+jA9PrNmJutumSvGyKXk2Q241+ktor0WvyuUQYtV+a5e
bVfZGFGS0BimLhXVpqEbdFmtL+mKvp1mO9byqf/iGDvoelB85G9+DPofq8r1
ku6to/QO/T87L0f+/RNjJL28GI2xhn3xoVA/zO4xnA4/GmOSDrvWks3iN46x
41zcLT7yNxvjI+fqY/8+6dwV0CtJ46q68dO/G444/mD8pY8z5MRZv/7olz5+
+JUddz5jR3/SIoOiZVPnY2myvTYvR1FkB26vXJKy2xkn7meLl//svaWx8wc+
vq3KADufuYtrIrw/Kj6jm24Opfy6rt6KY+e7O6/GyqbdYCPpdufXEPhZu6fl
Qu7fNgNDtejOSQNQvdfZLmoG4Ta7WMKRE8LLHbQ9CkeksFVyq/flpajqUI+3
fC97nYotV4hLUmFLSBK6mOFGW5XtG9PFWcvSL5jUvFE1cg4Df1lXmRuA1KkS
DPCUNPeGXot7mQxHOt91d+UsBp3DWbVs1ped6U+kibf0cUh8AU1mxCJY5Z+x
5+UuC77unJk/S08JOYSs9BbS42BbxWmZuMvUzkwzgb1bvaMLm+TdW/0aDTSl
lM6U5mUxpYYUxZ/yuYg3tks2p58F0x5GTNWKAyJfrrlaaJianj1n7xipiaWq
au1KmYoUu66+XPNWddszrM95zQoORdTr8+UWSrWsrm6Tmk26a636abLfyoVx
C2vKGIIMJSP5PCo2ZDQd7GKMCyL81ZqdhOq2KIQIczUq22a5hN0NGtRs9eKI
bdkVQoK1b86bJV0k4FZwJdQ8PnPYveioWFTL+qxSNxDZ3aSg09BLWGMde4km
xlQm73LXyIytF3gjSXtbd6W5YWhnw6pc0x/SibGp85jVuXxdV0GTAhGxBzj7
BfZXLL4A50BxhngtW3EXwm68qEhAvVKwb+/f0y8bhCmqbk5/m+vfFr/+qv6o
FpkGzJFsy3krWvm+k+GJX7o+UY4M5Ga9OKA3tNWSg6rwQ/z6K6lS/ZbFmVBa
Ng4SERxppnDmO1vMvdf3+NF+7sailb9/T59c43n6nd4BRwiZghWcXs2yuRQ/
La3PXHtm4g88AZlxGnIpDds2SoRkc/FgF9A0dX3euMfyzVMwT5TGe/sk0vkI
J49Ceg7KJs8kU3uZX1cVjjef6Y6YbyMSH++8y76IDWli2Bphbppqd3Ejzgc+
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
l3bunOeXOG8qNywaZxMi2bnaEnWvtXuWXame5G9ag0njGAbc+DR5SOwBpHCx
NBBb/BCP0C5sGhE3s46ay3SfYacQxWRFxO4oOrbOrIAQyGxPW2bVWDG8Tv6Q
DGy/WvkzWKoUNzDhPzRgSBd7mxPSE6n5O1pP0EL/LkVjPO5Ob2R85YiS4+VK
2KkYdbbd2265QmARPFvlzBWfTLsxUJUEnVHb2iom6fea5CWqGU+neofbPQ49
AlLXh8En1kylCvAbuj6qGy1M7o8eW/J+SHdbgxtXuR6YQSnA+dCJSuP5WnO7
cud/laMKTyLC5srVpEw5MoI99F7cZORqkfTIi03dytC/TQGb+aj7eItQJcgO
0YLPfJUiZbm2iwxbPVpz7LJUirVerBNtQciVacsL2VUk064ix60Vz8OV7Y3s
66rjO3HuSEZv0DWW3991hXG8s0x+sdGkhmayQ6dQeH2RMsRe9VvrSgiK51gm
cmos/67ZdTVfGS571a3Tv22QsNJ6ZUQ7y5T3jpN15KZAL/tzUQuX+OrdEhMo
hlXkXLZ+I4Iku1MtN2/o1ayW52mHnK7I1urWMV3By2RAt/KISFZC3VLg5oJP
3H6zwZ56kbsKQ6/3GT5c5JZDBel1oyIaTAvTrJ5bBm2RhZFEslm+rFGMw4SH
GJLTJfbSnSX56DvNI4SQODtew1yJMplj4E8fCdkK80oRTGlGoSGkMIZgfPvY
cInAGHkrajhnLoF+G6O3us5IZGX1opnkFZoGxjeIg7A48btC9d75nErYa0QF
Nh9d3aRfoHa3v168/fSjoyoAHk+NbriwO7qzjYXpxdddkyaZvf9oOeOoCePj
dCzzekIn8MOjZ48qKoGGjpx7LJpewDd1kTO/YHsDREFCLcZqMjGZStLjIEFg
pYsOBgrLvtkj/wD2sDNxeZdwu7bJDbsAPWwfmXyM9h+HwIIMQPF3mSbefiyp
2Ama46E4Wcs2Lx4szqJpVCdw0teaJRC2kyEd2ynSkt3XrRaWN8iKaWvY/SWS
sWQ/RsinVCn97nxxef26X1y/kX4+5gZsSJGlXPeLtNKuGQACyLaLE/MJTBZ0
6zXVM2dVLd4tuXWSUkCZdLu52OqBq6rwXY4u4oy/68iJSezFYrEAFEKWy08I
jNLO+Nmz6SBCao16Nczvrx+PG1R0bdkH8rxiOnScbFkNp9vlCRfWxm7oQP+F
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
eYKMYOi9WA6n+wGc5sfN/wNmCQQttG4CAA==

-->

</rfc>
