<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.9) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-lcurley-moq-e2ee-00" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true">
  <front>
    <title abbrev="moq-e2ee">MoQ End-to-End Encryption Profile</title>

    <author fullname="Luke Curley">
      <organization></organization>
      <address>
        <email>kixelated@gmail.com</email>
      </address>
    </author>

    <date year="2026" month="September" day="24"/>

    <area>wit</area>
    <workgroup>moq</workgroup>
    

    <abstract>


<?line 33?>

<t>This document specifies moq-e2ee-00, a versioned profile for end-to-end encryption of MoQ application payloads.
Authorized publishers and subscribers share a 32-byte broadcast secret out of band.
Each publisher instance mints an epoch and publishes under an opaque broadcast path ending in it.
HKDF-SHA-256 derives opaque physical track names and per-track AES-128-GCM keys from the secret and the epoch; grouped frames and datagrams use separate key domains.
Media frames and datagrams carry only ciphertext plus a 16-byte tag.
The profile binds object identity through derivation and the nonce, not an on-wire header.</t>



    </abstract>



    <note title="Note to Readers">


<?line 42?>

<t>This document was generated by an AI model from the implementation at <eref target="https://github.com/moq-dev/moq">github.com/moq-dev/moq</eref> and is maintained alongside it.
Submit an <eref target="https://github.com/moq-dev/moq/issues">issue</eref> or <eref target="https://github.com/moq-dev/moq/pulls">PR</eref> if this spec sucks and you want to fix anything.</t>


    </note>


  </front>

  <middle>


<?line 47?>

<section anchor="conventions-and-definitions"><name>Conventions and Definitions</name>
<t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>

<?line -18?>

</section>
<section anchor="introduction"><name>Introduction</name>
<t>MoQ relays forward named tracks of groups and frames (<xref target="moql"/>, <xref target="moqt"/>) without parsing application payloads.
This profile encrypts those payloads and hides the semantic broadcast and track names that would otherwise describe them, so a relay cannot recover content.
It reuses AES-128-GCM and the 96-bit group/frame nonce shape of <xref target="secure"/> where those identities map, and specifies the moq-lite and datagram bindings that draft does not cover.</t>

<t>The profile does not distribute keys, sign senders, pad payloads, or rotate a key inside an epoch.
Applications that need those properties terminate this profile and run a different one.</t>

</section>
<section anchor="related"><name>Relationship to Other Formats</name>
<t><xref target="secure"/> encrypts a MoQ Transport object under a per-track base key.
Its nonce is a per-track salt XOR <spanx style="verb">uint64_be(group) || uint32_be(object)</spanx>, its AAD includes publisher priority and immutable properties, and the Key ID rides in those properties.
The object payload is a length-prefixed plaintext plus an optional encrypted-properties list.</t>

<t>This profile keeps AES-128-GCM, HKDF-SHA-256, a 96-bit nonce of <spanx style="verb">uint64_be(group) || uint32_be(frame)</spanx>, and the rule that an identity is used at most once.
It differs where the models diverge:</t>

<t><list style="symbols">
  <t>One 32-byte broadcast secret authorizes every track. Per-track keys are derived, not supplied.</t>
  <t>The Key ID is part of the out-of-band credential. No per-frame header or immutable property carries it.</t>
  <t>The salt is not derived from the key. The publisher instance's epoch is an input to every derivation and the last segment of the broadcast path (<xref target="epoch"/>), so a restarted publisher derives new keys instead of needing a new Key ID.</t>
  <t>The nonce is the identity counter itself, not a salt XOR. The derived key is already unique per credential, epoch, physical name, and domain.</t>
  <t>The payload is ciphertext concatenated with the 16-byte tag, with no inner length prefix, encrypted properties, or padding.</t>
  <t>moq-lite frame indices are implied by position in the group (<xref target="moql"/> Section "Frame"), not an on-wire object ID. This profile still uses that index as the 32-bit nonce half, because it is the only canonical end-to-end frame identity on both moq-lite and MoQ Transport.</t>
  <t>moq-lite datagrams share the group sequence namespace of the same track (<xref target="moql"/> Section "Datagrams"). A grouped frame 0 and a datagram with that sequence would collide under one AES-GCM key, so datagrams use a separate key domain with frame ID zero.</t>
</list></t>

<t>SFrame <xref target="sframe"/> is the cryptographic ancestor of <xref target="secure"/>.
This profile is not SFrame: it has no SFrame header, no CTR field on the wire, and no per-object KID.</t>

<t>The experimental <spanx style="verb">moq-secure</spanx> format (https://github.com/cathode-ray-tube/moq-secure) is prior art only.
Its independent counter, 17-byte per-frame header, ChaCha20-Poly1305 suite, signing lease, payload padding, and bytes-only processor are not compatibility requirements.</t>

</section>
<section anchor="profile-version"><name>Profile Version</name>
<t>This document defines profile <spanx style="verb">moq-e2ee-00</spanx>.
The profile is named out of band alongside the credential; an application <bcp14>MUST</bcp14> refuse a credential that names any other profile.
A new profile is a new document; implementations <bcp14>MUST NOT</bcp14> fall back to plaintext or to an older profile because a catalog, announcement, or peer suggested one.</t>

</section>
<section anchor="credential"><name>Credential</name>
<t>The application supplies an immutable credential:</t>

<figure><artwork><![CDATA[
Credential {
  context (b)
  kid (u64)
  secret (32)
}
]]></artwork></figure>

<t><strong>context</strong>:
Opaque bytes chosen by the application as the broadcast's end-to-end identity.
Both ends <bcp14>MUST</bcp14> use identical bytes.
The MoQ broadcast path is visible to relays and may be remounted under another prefix, so it is not this field unless the application copies it in.</t>

<t><strong>kid</strong>:
Selects among credentials the application retains.
It never changes in place; rotating the secret is a new kid.</t>

<t><strong>secret</strong>:
Exactly 32 bytes from a cryptographically secure random generator.
It <bcp14>MUST NOT</bcp14> be a password, passphrase, or other guessable input.</t>

<t><spanx style="verb">kid</spanx> <bcp14>MUST</bcp14> be in <spanx style="verb">0..=2^53-1</spanx> inclusive, the largest integer TypeScript can represent exactly.
<spanx style="verb">context</spanx>, every <spanx style="verb">epoch</spanx>, and every semantic broadcast or track name <bcp14>MUST</bcp14> be at most 65535 bytes, the <spanx style="verb">bytes</spanx> encoding width.
An implementation <bcp14>MUST</bcp14> refuse a credential outside those ranges (<spanx style="verb">identity</spanx>) or whose secret is not 32 bytes (<spanx style="verb">invalid_secret</spanx>).</t>

<t>Applications distribute credentials over their own authenticated channel.
MoQ announcements, catalogs, paths, and relay authorization <bcp14>MUST NOT</bcp14> carry the secret or authenticate it.
Implementations <bcp14>MUST</bcp14> let the application retain more than one credential and select among them; they <bcp14>MUST NOT</bcp14> infer the kid from the transport.</t>

</section>
<section anchor="epoch"><name>Epoch and Broadcast Path</name>
<t>A generation is one credential under one epoch.
Every derivation and every nonce is scoped to a generation.</t>

<t><strong>epoch</strong>:
Opaque nonempty bytes minted by the publisher instance, containing no <spanx style="verb">/</spanx>.
Each instance of a broadcast <bcp14>MUST</bcp14> mint an epoch that no other instance under the same credential has used or will use.
Two instances <bcp14>MUST NOT</bcp14> share an epoch: they would derive the same keys and collide on nonces.
The <bcp14>RECOMMENDED</bcp14> epoch is the lowercase text of a UUID version 7 (<xref target="RFC9562"/>): its leading 48-bit timestamp makes epochs sort by creation time and its random bits make collisions negligible.</t>

<t>A protected broadcast is published at <spanx style="verb">&lt;opaque&gt;/&lt;epoch&gt;</spanx>, where <spanx style="verb">&lt;opaque&gt;</spanx> is the 22-character base64url segment derived from the credential and the application's semantic broadcast name according to <xref target="derive"/>, and <spanx style="verb">&lt;epoch&gt;</spanx> is the epoch text.
The opaque derivation does not include the epoch, so every instance of the same semantic broadcast shares a discovery prefix.
The path carries no format or protection marker; for example, the semantic name <spanx style="verb">meeting.hang</spanx> appears only as an input to the opaque derivation.
A plaintext consumer that opens the protected broadcast fails because it cannot find the plaintext catalog it expects, not because of a path naming rule.
Subscribers discover instances by the <spanx style="verb">&lt;opaque&gt;/</spanx> prefix and select the greatest epoch when epochs are UUID version 7 text, where greatest is newest.
Opaque epochs carry no creation order, so any other epoch form needs an application rule for which instance is current.
A subscriber that already knows the full path takes the epoch from its last segment.</t>

<t>The epoch and the path are not secret and are not authenticated.
A relay that presents a wrong epoch causes authentication failure; a relay that withholds a newer instance denies service.
Neither can cause a nonce to repeat, because only the publisher instance chooses the epoch it encrypts under.</t>

<t>A restart or replacement of a publisher is a new instance and mints a new epoch.
Transport sequence numbers therefore restart freely without any coordination between instances.
Ended instances remain readable at their own path for as long as relays or archives retain them.</t>

</section>
<section anchor="encoding"><name>Canonical Encoding</name>
<t>HKDF info fields use unique encodings, not varints.</t>

<t><list style="symbols">
  <t><spanx style="verb">u16</spanx> / <spanx style="verb">u32</spanx> / <spanx style="verb">u64</spanx>: unsigned big-endian integers of that width.</t>
  <t><spanx style="verb">bytes</spanx>: <spanx style="verb">u16(length) || data</spanx>, length at most 65535.</t>
  <t>ASCII labels are the UTF-8 bytes of the quoted string, with no length prefix of their own.</t>
</list></t>

<t>Integers used as group, frame, or kid identities are refused before encoding if they fail <xref target="bounds"/>.</t>

</section>
<section anchor="derive"><name>Key Derivation</name>
<t>Keys and physical names are derived with HKDF-SHA-256 <xref target="RFC5869"/>.
Let <spanx style="verb">salt</spanx> be the ASCII bytes of <spanx style="verb">"moq-e2ee-00"</spanx>.</t>

<figure><artwork><![CDATA[
prk = HKDF-Extract(salt, secret)
]]></artwork></figure>

<t>Opaque broadcast path material is 16 bytes:</t>

<figure><artwork><![CDATA[
path_info = "moq-e2ee-00 path"
            || bytes(context)
            || u64(kid)
            || bytes(semantic_broadcast)
opaque    = HKDF-Expand(prk, path_info, 16)
]]></artwork></figure>

<t><spanx style="verb">semantic_broadcast</spanx> is the UTF-8 bytes of the application's semantic broadcast name.
The opaque path segment is the unpadded base64url encoding of <spanx style="verb">opaque</spanx> (<xref target="RFC4648"/> Section 5): 22 ASCII characters.
The epoch is deliberately absent from this derivation, so a subscriber can derive the prefix before discovering an instance.</t>

<t>Physical track name material is 16 bytes:</t>

<figure><artwork><![CDATA[
name_info = "moq-e2ee-00 name"
            || bytes(context)
            || bytes(epoch)
            || u64(kid)
            || bytes(semantic_name)
physical  = HKDF-Expand(prk, name_info, 16)
]]></artwork></figure>

<t><spanx style="verb">semantic_name</spanx> is the UTF-8 bytes of the application's track name (<spanx style="verb">catalog.json</spanx>, <spanx style="verb">video</spanx>, and so on).
The physical track name is the unpadded base64url encoding of <spanx style="verb">physical</spanx> (<xref target="RFC4648"/> Section 5): 22 ASCII characters, which is a valid moq-lite track name.
This function may hide any track-shaped name the application wants a relay not to read; it is not limited to media tracks.</t>

<t>AEAD keys are 16 bytes, one per physical name and domain:</t>

<figure><artwork><![CDATA[
key_info = "moq-e2ee-00 key"
           || bytes(context)
           || bytes(epoch)
           || u64(kid)
           || bytes(physical_name)
           || domain
key      = HKDF-Expand(prk, key_info, 16)
]]></artwork></figure>

<t><spanx style="verb">domain</spanx> is a single byte: <spanx style="verb">0x00</spanx> for grouped frames, <spanx style="verb">0x01</spanx> for datagrams.
<spanx style="verb">physical_name</spanx> here is the 22-character ASCII string, not the raw 16-byte material.</t>

<t>A given <spanx style="verb">(generation, physical_name, domain)</spanx> tuple has one key.
Implementations <bcp14>MUST</bcp14> derive names from semantic names, then keys from the resulting physical names.
A subscriber that learns a physical name from a decrypted catalog derives its key without ever knowing the semantic name.</t>

</section>
<section anchor="identity"><name>Object Identity</name>
<t>A protected object is the tuple <spanx style="verb">(generation, physical_name, domain, group, frame)</spanx>.</t>

<section anchor="grouped-frames"><name>Grouped Frames</name>
<t>A grouped frame uses <spanx style="verb">domain = 0x00</spanx>, the group's sequence as <spanx style="verb">group</spanx>, and the frame index within that group as <spanx style="verb">frame</spanx>.
moq-lite numbers frames from 0 in write order (<xref target="moql"/>).
On MoQ Transport, <spanx style="verb">frame</spanx> is the explicit Object ID, never its arrival ordinal.
Publishers supporting both transports <bcp14>MUST</bcp14> assign contiguous Object IDs from zero so that each matches its moq-lite write-order index; relays <bcp14>MUST NOT</bcp14> renumber protected objects.
An Object ID above <spanx style="verb">2^32-1</spanx> <bcp14>MUST</bcp14> be refused as <spanx style="verb">identity</spanx> before encryption or decryption.</t>

</section>
<section anchor="datagrams"><name>Datagrams</name>
<t>A datagram uses <spanx style="verb">domain = 0x01</spanx>, its 64-bit sequence as <spanx style="verb">group</spanx>, and <spanx style="verb">frame = 0</spanx>.
MoQ Transport has no datagram mapping in this profile; shared vectors cover grouped tracks on both transports and datagrams on moq-lite only.</t>

</section>
<section anchor="nonce"><name>Nonce</name>
<t>The 96-bit AES-GCM nonce is:</t>

<figure><artwork><![CDATA[
nonce = u64(group) || u32(frame)
]]></artwork></figure>

<t>AES-GCM's internal block counter is not <spanx style="verb">frame</spanx>.
Implementations <bcp14>MUST</bcp14> call a standard AEAD API <xref target="RFC5116"/> with this nonce and an empty AAD.</t>

<t>The empty AAD is deliberate: profile version, context, epoch, kid, physical name, and domain are bound by HKDF; group and frame are bound by the nonce.
Rewritten timestamps and mutable routing properties are not authenticated.</t>

</section>
</section>
<section anchor="payload"><name>Payload Protection</name>
<t>Let <spanx style="verb">Nt = 16</spanx>.
AES-128-GCM encrypts the application bytes with <spanx style="verb">key</spanx>, <spanx style="verb">nonce</spanx>, and empty AAD.
The bytes placed in the MoQ frame or datagram payload are ciphertext concatenated with the 16-byte tag, in the <xref target="RFC5116"/> convention.
There is no inner header.</t>

<t>Within a generation a publisher <bcp14>MUST</bcp14> allocate group and datagram sequences monotonically and frame indices in write order, so an identity is encrypted at most once.
Encrypting at an identity the same instance already used is <spanx style="verb">reuse</spanx> and <bcp14>MUST</bcp14> be refused.
Relays and caches forward ciphertext unchanged, so replay from a cache never re-encrypts.</t>

<section anchor="plaintext-ceiling"><name>Plaintext Ceiling</name>
<t>Protected payload length is plaintext length plus <spanx style="verb">Nt</spanx>.
A publisher <bcp14>MUST</bcp14> refuse plaintext that would make the protected payload exceed the transport payload limit for that object (<spanx style="verb">oversize</spanx>), before it touches the network.</t>

<t>The interoperable grouped-frame payload cap matching current moq-net implementations is 32 MiB, so grouped plaintext <bcp14>MUST</bcp14> be at most <spanx style="verb">32 MiB - 16</spanx> bytes.
moq-lite datagram bodies <bcp14>MUST</bcp14> remain at most 1200 bytes including Subscribe ID, Group Sequence, and Timestamp (<xref target="moql"/> Section "Datagrams").
Those three varints are at most 24 bytes, so datagram plaintext <bcp14>MUST</bcp14> be at most <spanx style="verb">1200 - 24 - 16 = 1160</spanx> bytes; a publisher cannot observe the Subscribe ID each hop will encode and <bcp14>MUST NOT</bcp14> budget for a smaller header.</t>

</section>
<section anchor="catalogs"><name>Catalogs</name>
<t>A catalog is a track like any other: published under the physical name derived from its semantic name, with each snapshot or delta protected at its own group and frame identity.
Hang <xref target="hang"/> <spanx style="verb">catalog.json</spanx> and <spanx style="verb">catalog.json.z</spanx> and MSF's <spanx style="verb">catalog</spanx> are semantic names; authorized clients derive those physical names from the generation, then learn the remaining opaque names from the decrypted catalog.
A Hang rendition-map key in that catalog is the physical name of the track.</t>

<t>If a representation is compressed, compression is applied to the catalog bytes before AEAD and reversed after decryption.
Encrypting then compressing is forbidden: ciphertext does not compress, and the <spanx style="verb">.z</spanx> sibling would leak the uncompressed size ratio.</t>

</section>
</section>
<section anchor="bounds"><name>Bounds</name>
<t>Implementations <bcp14>MUST</bcp14> refuse non-integer identities (including NaN and infinities) and identities outside these bounds before encoding or AEAD:</t>

<t><list style="symbols">
  <t><spanx style="verb">group</spanx> (grouped sequence or datagram sequence) and <spanx style="verb">kid</spanx>: <spanx style="verb">0..=2^53-1</spanx>. Above that is <spanx style="verb">identity</spanx>.</t>
  <t><spanx style="verb">frame</spanx>: <spanx style="verb">0..=2^32-1</spanx>. <spanx style="verb">2^32</spanx> and above is <spanx style="verb">identity</spanx>.</t>
  <t>AEAD operations with one key: at most <spanx style="verb">2^24</spanx> invocations and at most <spanx style="verb">2^36</spanx> plaintext bytes (<spanx style="verb">2^32</spanx> 16-byte blocks). Exceeding either is <spanx style="verb">exhausted</spanx>.</t>
</list></t>

<t><spanx style="verb">2^53-1</spanx> is <spanx style="verb">Number.MAX_SAFE_INTEGER</spanx>.
It is the strictest exact integer bound across current TypeScript and Rust implementations.
The 32-bit frame width is the nonce field.
The <spanx style="verb">2^24</spanx> invocation cap is the interoperable AES-GCM record limit from <xref target="aeadlimits"/>.
GCM authenticity also depends on total processed blocks, so <spanx style="verb">2^24</spanx> frames at the 32 MiB transport ceiling would be about <spanx style="verb">2^45</spanx> blocks; the <spanx style="verb">2^36</spanx>-byte cap is the matching total-block bound.
Small records hit the invocation cap first; large records hit the byte cap first.
A receiver counts failed opens too, since each is an AEAD invocation under that key.</t>

</section>
<section anchor="failure"><name>Failure Behavior</name>
<t>E2EE is an explicit per-broadcast mode.
There is no plaintext fallback.</t>

<t>Typed failures:</t>

<t><list style="symbols">
  <t><spanx style="verb">invalid_secret</spanx>: secret is not 32 bytes.</t>
  <t><spanx style="verb">identity</spanx>: an integer is outside <xref target="bounds"/>, a <spanx style="verb">bytes</spanx> field exceeds 65535, an epoch is empty or contains <spanx style="verb">/</spanx>, a physical name is not 22 base64url characters, or <spanx style="verb">domain</spanx> is not <spanx style="verb">0x00</spanx>/<spanx style="verb">0x01</spanx>.</t>
  <t><spanx style="verb">exhausted</spanx>: the next AEAD operation would exceed <spanx style="verb">2^24</spanx> uses of that key or <spanx style="verb">2^36</spanx> plaintext bytes under that key.</t>
  <t><spanx style="verb">reuse</spanx>: encrypting at an identity this instance already used.</t>
  <t><spanx style="verb">oversize</spanx>: plaintext plus tag exceeds the transport payload limit, or a ciphertext is shorter than <spanx style="verb">Nt</spanx> or larger than that limit.</t>
  <t><spanx style="verb">authentication</spanx>: AEAD open fails. Relocation across context, epoch, kid, physical name, domain, group, or frame is this failure.</t>
  <t><spanx style="verb">duplicate</spanx>: a receiver has already opened this datagram sequence inside its retained window. Operational, not a cryptographic event.</t>
</list></t>

<t>Authentication failure on a grouped track <bcp14>MUST</bcp14> end that track with <spanx style="verb">authentication</spanx>.
Authentication failure on a datagram <bcp14>MUST</bcp14> drop that datagram and emit <spanx style="verb">authentication</spanx>; the track continues.</t>

<t>Grouped frames need no duplicate window: a transport delivers each frame of a group once, in order, at its index.
Receivers <bcp14>SHOULD</bcp14> suppress datagram sequences they still retain; the window <bcp14>MUST</bcp14> be bounded, and 1024 sequences below the greatest opened is <bcp14>RECOMMENDED</bcp14>.
The AEAD identity and epoch rules are the security boundary; a relay may still delay, reorder, suppress, or replay ciphertext outside a receiver's window.</t>

<t>A late subscriber <bcp14>MAY</bcp14> start at any group the publisher still holds.
Gaps are not errors.
A receiver <bcp14>MUST NOT</bcp14> require group 0 or any prior identity before opening a later authentic object.</t>

</section>
<section anchor="vectors"><name>Test Vectors</name>
<t>Known-answer and negative vectors live in <spanx style="verb">moq-e2ee-00.json</spanx> beside this draft.
Hex strings are octet sequences.
The JSON is authoritative for primitive interop; an implementation of this profile <bcp14>MUST</bcp14> pass every vector.
Each negative row specifies an <spanx style="verb">operation</spanx>, its inputs, and its expected typed error.
Non-finite frame inputs use the strings <spanx style="verb">NaN</spanx>, <spanx style="verb">Infinity</spanx>, and <spanx style="verb">-Infinity</spanx>; group inputs in identity tests are decimal strings.
Implementations whose types cannot represent an invalid input <bcp14>MUST</bcp14> reject it at their input boundary.</t>

<t>The file covers opaque path derivation, key derivation, physical naming, grouped frames, a datagram at the fixed budget, the same identity under two epochs, relocation across every identity dimension, tag failure, malformed physical names, identity bounds, and oversize plaintext.</t>

<t>The shared verifier is stateless.
It does not verify <spanx style="verb">reuse</spanx>, <spanx style="verb">exhausted</spanx>, <spanx style="verb">duplicate</spanx>, or failure propagation.
Each language core <bcp14>MUST</bcp14> test those lifecycle requirements, including monotonic allocation, per-key invocation and plaintext-byte accounting, bounded datagram suppression, and that a new instance under a new epoch authenticates while the old epoch does not.
Passing the primitive vectors alone is not profile conformance.</t>

</section>
<section anchor="security-considerations"><name>Security Considerations</name>
<t>Relays, caches, recorders, and control planes are untrusted for content.
Authorized endpoints that hold the broadcast secret are trusted.
Sender authenticity against another endpoint that also holds the secret is not a goal of <spanx style="verb">moq-e2ee-00</spanx>.</t>

<t>A relay can still observe the outer broadcast path including the opaque segment and epoch, opaque physical names, group and frame structure, timestamps, sizes, and traffic patterns.
Padding and metadata-flow confidentiality are out of scope.</t>

<t>The opaque segment hides the application's semantic broadcast name from a relay only while the application does not publish or otherwise expose the same name in plaintext.
The epoch remains visible to every relay on the path.</t>

<t>Nonce reuse under one key is catastrophic for AES-GCM.
The profile prevents it by deriving every key from an epoch that only one publisher instance ever uses, allocating identities monotonically within that instance, separating datagram and grouped domains, and capping invocations and plaintext bytes per key.
No state survives an instance: nothing needs to be persisted across restarts to stay safe.</t>

<t>Empty AAD does not weaken the binding: every immutable end-to-end field is in the HKDF info or the nonce.
Timestamps are excluded because relays rewrite them; a relay can therefore shift or reorder authentic objects in time within a receiver's tolerance.</t>

<t>The opaque path segment is a deterministic function of the secret and semantic broadcast name; physical track names are deterministic functions of the secret and epoch.
An attacker without the secret cannot predict them; an attacker with the secret can derive every name, which is intended.</t>

</section>
<section anchor="iana-considerations"><name>IANA Considerations</name>
<t>This document requests no registrations.</t>

</section>


  </middle>

  <back>


<references title='References' anchor="sec-combined-references">

    <references title='Normative References' anchor="sec-normative-references">




<reference anchor="moql">
   <front>
      <title>Media over QUIC - Lite</title>
      <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
      <date day="30" month="June" year="2026"/>
      <abstract>
	 <t>   moq-lite is designed to fanout live content 1-&gt;N across the internet.
   It leverages QUIC to prioritize important content, avoiding head-of-
   line blocking while respecting encoding dependencies.  While
   primarily designed for media, the transport is payload agnostic and
   can be proxied by relays/CDNs without knowledge of codecs,
   containers, or encryption keys.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-lite-05"/>
   
</reference>

<reference anchor="moqt">
   <front>
      <title>Media over QUIC Transport</title>
      <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
         <organization>Cisco</organization>
      </author>
      <author fullname="Victor Vasiliev" initials="V." surname="Vasiliev">
         <organization>Google</organization>
      </author>
      <author fullname="Ian Swett" initials="I." surname="Swett">
         <organization>Google</organization>
      </author>
      <author fullname="Alan Frindell" initials="A." surname="Frindell">
         <organization>Meta</organization>
      </author>
      <date day="8" month="September" year="2026"/>
      <abstract>
	 <t>   This document defines Media over QUIC Transport (MOQT), a publish/
   subscribe protocol that runs over QUIC and WebTransport.  MOQT
   leverages the features of these transports, such as streams,
   datagrams, priorities, and partial reliability.  MOQT operates both
   point-to-point and through intermediate relays, enabling scalable
   low-latency delivery.  Despite its name, MOQT is media agnostic and
   can be used for a wide range of use cases.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-moq-transport-21"/>
   
</reference>
<reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference>
<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="RFC9562">
  <front>
    <title>Universally Unique IDentifiers (UUIDs)</title>
    <author fullname="K. Davis" initials="K." surname="Davis"/>
    <author fullname="B. Peabody" initials="B." surname="Peabody"/>
    <author fullname="P. Leach" initials="P." surname="Leach"/>
    <date month="May" year="2024"/>
    <abstract>
      <t>This specification defines UUIDs (Universally Unique IDentifiers) --
also known as GUIDs (Globally Unique IDentifiers) -- and a Uniform
Resource Name namespace for UUIDs. A UUID is 128 bits long and is
intended to guarantee uniqueness across space and time. UUIDs were
originally used in the Apollo Network Computing System (NCS), later
in the Open Software Foundation's (OSF's) Distributed Computing
Environment (DCE), and then in Microsoft Windows platforms.</t>
      <t>This specification is derived from the OSF DCE specification with the
kind permission of the OSF (now known as "The Open Group"). Information from earlier versions of the OSF DCE specification have
been incorporated into this document. This document obsoletes RFC
4122.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9562"/>
  <seriesInfo name="DOI" value="10.17487/RFC9562"/>
</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 title='Informative References' anchor="sec-informative-references">



<reference anchor="sframe">
  <front>
    <title>Secure Frame (SFrame): Lightweight Authenticated Encryption for Real-Time Media</title>
    <author fullname="E. Omara" initials="E." surname="Omara"/>
    <author fullname="J. Uberti" initials="J." surname="Uberti"/>
    <author fullname="S. G. Murillo" initials="S. G." surname="Murillo"/>
    <author fullname="R. Barnes" initials="R." role="editor" surname="Barnes"/>
    <author fullname="Y. Fablet" initials="Y." surname="Fablet"/>
    <date month="August" year="2024"/>
    <abstract>
      <t>This document describes the Secure Frame (SFrame) end-to-end encryption and authentication mechanism for media frames in a multiparty conference call, in which central media servers (Selective Forwarding Units or SFUs) can access the media metadata needed to make forwarding decisions without having access to the actual media.</t>
      <t>This mechanism differs from the Secure Real-Time Protocol (SRTP) in that it is independent of RTP (thus compatible with non-RTP media transport) and can be applied to whole media frames in order to be more bandwidth efficient.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9605"/>
  <seriesInfo name="DOI" value="10.17487/RFC9605"/>
</reference>

<reference anchor="secure">
   <front>
      <title>End-to-End Secure Objects for Media over QUIC Transport</title>
      <author fullname="Cullen Fluffy Jennings" initials="C. F." surname="Jennings">
         <organization>Cisco</organization>
      </author>
      <author fullname="Suhas Nandakumar" initials="S." surname="Nandakumar">
         <organization>Cisco</organization>
      </author>
      <author fullname="Richard Barnes" initials="R." surname="Barnes">
         <organization>Cisco</organization>
      </author>
      <date day="6" month="July" year="2026"/>
      <abstract>
	 <t>   This document specifies an end-to-end authenticated encryption scheme
   for application objects transmitted via Media over QUIC (MoQ)
   Transport.  The scheme enables original publishers that share a
   symmetric key with end subscribers, to ensuring that MoQ relays are
   unable to decrypt object contents.  Additionally, subscribers can
   verify the integrity and authenticity of received objects, confirming
   that the content has not been modified in transit.  Additionally it
   allows MoQ parameters to be protected so the publisher can select if
   they are readable and/or modifiable by relays.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-ietf-moq-secure-objects-01"/>
   
</reference>

<reference anchor="aeadlimits">
   <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="3" month="September" year="2026"/>
      <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.  This document is a product of the Crypto
   Forum Research Group (CFRG) in the IRTF.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-aead-limits-13"/>
   
</reference>

<reference anchor="hang">
   <front>
      <title>Media over QUIC - Hang</title>
      <author fullname="Luke Curley" initials="L." surname="Curley">
         </author>
      <date day="3" month="August" year="2026"/>
      <abstract>
	 <t>   Hang is a real-time conferencing protocol built on top of moq-lite.
   A room consists of multiple participants who publish media tracks.
   All updates are live, such as a change in participants or media
   tracks.

	 </t>
      </abstract>
   </front>
   <seriesInfo name="Internet-Draft" value="draft-lcurley-moq-hang-02"/>
   
</reference>



    </references>

</references>


<?line 375?>

<section numbered="false" anchor="changelog"><name>Changelog</name>

<section numbered="false" anchor="draft-lcurley-moq-e2ee-00"><name>draft-lcurley-moq-e2ee-00</name>

<t><list style="symbols">
  <t>Initial <spanx style="verb">moq-e2ee-00</spanx> profile: out-of-band credential, opaque broadcast path with a publisher-minted epoch as its last segment, HKDF physical names and keys, AES-128-GCM payloads, identity bounds, typed failures, and shared primitive vectors.</t>
</list></t>

</section>
</section>
<section numbered="false" anchor="acknowledgments"><name>Acknowledgments</name>

<t>This document was drafted with the assistance of Grok, an AI assistant by xAI.</t>

</section>


  </back>

<!-- ##markdown-source:
H4sIAAAAAAAAA51c7XbbRpL9j6folX+MlEPQkixrHCrJrGzLiTaxpLGU2cnJ
mTFAskliBAIcAJTEaJRn2WfZJ9u6VdWNBkk7mc3ZHVMg0Oiuro9bt6oZx3HU
ZE1uB2bnfflnc1aM46aM6R/6OKpWiyYrC3NVlZMstztROhxW9o7unZf/jO2h
pUujtLHTsloNTFZMyigal6MindN44yqdNHE+Wla5XcXugXh/P6qXw3lW1zRy
s1rQnednN++MeWbSvC5p7KwY24Wl/ymanZ7ZseOsKasszfHH+elr+qes6NOH
m3c7UbGcD201iMY0i0FEM3sRpZVNB+Y+a6L7srqdVuVyMTD0+ihKl82spJtN
HBn6b7LMc5nqD8tba97wRPkbO0+zfGBusweb08Dj/5ziQn9UzqOoKKt52mR3
9DqDYem+8/htP1xnnjVWvmzky8w2E/6mqdKiXpRVQ19/ePfm6Pjo1UA+vjw4
OHYfXx1/qR+/fHl8OIgiSDZ4az2peNq44Xj/Ja5Yer1de5lcjMvhP+yoqemu
1KbjPJtnTa13VnTnaFJNY3wTy1d03ywtppurwtUoiuPYpMOaFjJqouhmltWG
dnw5p80y9cKOsklmaxPsds+k5s5W2G07NgvRJEPrMVZ0jf6hj17XyomBIqaL
RZ6RbuHSIl3lZTqu+9Ep72D2C0ZaDvOsntHIJqURSKfqUZUN8Xc9Ix2g1744
jIerxpphRU+P0rqBnCrbmHLZ4D1DerAfnaWjWTsaaXHdpMXImnlWNBjb2EVJ
d+Al7q7aLEk9K3xZLtJ/LsNXLNJmhqVlxZTGMlnTj777/u27+Pq70/jw5bGh
52gba/fgYraqaZ25gURvDfRRFrSwVSzXTs+u44PDV/G3b96bW7uqzaQq56aZ
Wbcc3I4/eaInhlWeJMRaIoOReaRT+pMmXuOxRVqRXmM02j3S7YJk+54MLd3+
0CitqpUpi3xlRtmCpNTYB1ppvqQbzcGxSJlu7pNCWL/HQzJkWiern8lgzlmz
oonS9KYzkYPsr5t/UZLce/RPw5It4vuM9nFGummrvqgefWc/XuB/mvLjB/6m
XlfD+7Q2U1tYLHFshisMdnpOOjm2eSu7bL7ILe7XOTTm52nWzJZDmPlzKPDY
3uHfv+3OmmZRD54/3/79Hs+fJgA5NvT/9NI0L4tpTWvm/b+Gv+M1/Uxub2l/
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

-->

</rfc>

