<?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.19 (Ruby 3.3.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ohai-chunked-ohttp-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.23.2 -->
  <front>
    <title abbrev="Chunked OHTTP">Chunked Oblivious HTTP Messages</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-chunked-ohttp-02"/>
    <author fullname="Tommy Pauly">
      <organization>Apple</organization>
      <address>
        <email>tpauly@apple.com</email>
      </address>
    </author>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2024" month="October" day="19"/>
    <area>ART</area>
    <workgroup>OHAI Working Group</workgroup>
    <abstract>
      <?line 32?>

<t>This document defines a variant of the Oblivious HTTP message format that allows
chunks of requests and responses to be encrypted and decrypted before the entire
request or response is processed. This allows incremental processing of Oblivious
HTTP messages, which is particularly useful for handling large messages or systems
that process messages slowly.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-ohai.github.io/draft-ohai-chunked-ohttp/draft-ietf-ohai-chunked-ohttp.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-ohai-chunked-ohttp/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        OHAI Working Group mailing list (<eref target="mailto:ohai@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ohai/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ohai/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/ietf-wg-ohai/draft-ohai-chunked-ohttp"/>.</t>
    </note>
  </front>
  <middle>
    <?line 40?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Oblivious HTTP <xref target="OHTTP"/> defines a system for sending HTTP requests
and responses as encrypted messages. Clients send requests via a relay to a gateway, which
is able to decrypt and forward the request to a target server. Responses are encrypted
with an ephemeral symmetric key by the gateway and sent back to the client via the relay.
The messages are protected with Hybrid Public Key Encryption (HPKE; <xref target="HPKE"/>),
and are intended to prevent the gateway from linking any two independent requests to the
same client.</t>
      <t>The definition of Oblivious HTTP in <xref target="OHTTP"/> encrypts messages such that entire request
and response bodies need to be received before any of the content can be decrypted. This
is well-suited for many of the use cases of Oblivious HTTP, such as DNS queries or metrics
reporting.</t>
      <t>However, some applications of Oblivious HTTP can benefit from being able to encrypt and
decrypt parts of the messages in chunks. If a request or response can be processed by a
receiver in separate parts, and is particularly large or will be generated slowly, then
sending a series of encrypted chunks can improve the performance of applications.</t>
      <t>Incremental delivery of responses allows an Oblivious Gateway Resource to provide
Informational (1xx) responses (<xref section="15.2" sectionFormat="of" target="HTTP"/>).</t>
      <t>This document defines an optional message format for Oblivious HTTP that supports the
progressive creation and processing of both requests and responses. New media types are
defined for this purpose.</t>
      <section anchor="applicability">
        <name>Applicability</name>
        <t>Like the non-chunked variant, chunked Oblivious HTTP has limited applicability
as described in <xref section="2.1" sectionFormat="of" target="OHTTP"/>, and requires the use of a willing
Oblivious Relay Resource and Oblivious Gateway Resource.</t>
        <t>Chunked Oblivious HTTP is intended to be used in cases for where the privacy
properties of Oblivious HTTP are needed — specifically, removing linkage
at the transport layer between separate HTTP requests — but incremental
processing is also needed for performance or functionality.</t>
        <t>One specific functional capability that requires chunked Oblivious HTTP
is support for Informational (1xx) responses
(<xref section="15.2" sectionFormat="of" target="HTTP"/>).</t>
        <t>In order to be useful, the content of chunked Oblivious HTTP needs to be
possible to process incrementally. Since incremental processing means that the
message might end up being truncated, for example in the case of an error on the
underlying transport, applications also need to be prepared to safely handle incomplete
messages (see <xref target="security"/> for more discussion). Applications that use the Indeterminate
format of Binary HTTP (<xref section="3.2" sectionFormat="of" target="BHTTP"/>) are well-suited
to using chunked Oblivious HTTP.</t>
        <t>Chunked Oblivious HTTP is not intended to be used for long-lived sessions
between clients and servers that might build up state, or as a replacement
for a proxied TLS session.</t>
      </section>
    </section>
    <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?>

<t>Notational conventions from <xref target="OHTTP"/> are used in this document.</t>
    </section>
    <section anchor="chunked-requests-and-responses">
      <name>Chunked Requests and Responses</name>
      <t>Chunked Oblivious HTTP defines different media than the non-chunked variant. These
media types are "message/ohttp-chunked-req" (defined in <xref target="iana-req"/>) and
"message/ohttp-chunked-res" (defined in <xref target="iana-res"/>).</t>
      <t>Chunked OHTTP requests and responses <bcp14>SHOULD</bcp14> include the
<tt>Incremental</tt> header field <xref target="INCREMENTAL"/>
in order to signal to intermediaries (such as the relay) that the content of
the messages are intended to be delivered incrementally. Without this signal,
intermediaries might buffer request or response body until complete, removing
the benefits of using Chunked OHTTP.</t>
      <t>Chunked OHTTP messages generally will not include a <tt>Content-Length</tt> header field,
since the complete length of all chunks might not be known ahead of time.</t>
      <t>For example, a Chunked OHTTP request could look like the following:</t>
      <sourcecode type="http-message"><![CDATA[
POST /request.example.net/proxy HTTP/1.1
Host: proxy.example.org
Content-Type: message/ohttp-chunked-req
Incremental: ?1

<content is an Encapsulated Request>
]]></sourcecode>
    </section>
    <section anchor="request">
      <name>Request Format</name>
      <t>Chunked OHTTP requests start with the same header as used for the non-chunked variant,
which consists of a key ID, algorithm IDs, and the KEM shared secret. This header is
followed by chunks of data protected with HPKE, each of which is preceded by a
variable-length integer (as defined in <xref section="16" sectionFormat="of" target="QUIC"/>)
that indicates the length of the chunk. The final chunk is preceded by a length
field with the value 0, which means the chunk extends to the end of the outer stream.</t>
      <figure anchor="fig-enc-request">
        <name>Chunked Encapsulated Request Format</name>
        <artwork><![CDATA[
Chunked Encapsulated Request {
  Chunked Request Header (56 + 8 * Nenc),
  Chunked Request Chunks (..),
}

Chunked Request Header {
  Key Identifier (8),
  HPKE KEM ID (16),
  HPKE KDF ID (16),
  HPKE AEAD ID (16),
  Encapsulated KEM Shared Secret (8 * Nenc),
}

Chunked Request Chunks {
  Non-Final Request Chunk (..),
  Final Request Chunk Indicator (i) = 0,
  HPKE-Protected Final Chunk (..),
}

Non-Final Request Chunk {
  Length (i) = 1..,
  HPKE-Protected Chunk (..),
}
]]></artwork>
      </figure>
      <t>The content of the HPKE-protected chunks is defined in <xref target="request-encap"/>.</t>
    </section>
    <section anchor="response">
      <name>Response Format</name>
      <t>Chunked OHTTP responses start with a nonce, followed by chunks of data protected with
an AEAD. Each chunk is preceded by a variable-length integer that indicates the length
of the chunk. The final chunk is preceded by a length field with the value 0, which means
the chunk extends to the end of the outer stream.</t>
      <figure anchor="fig-enc-response">
        <name>Chunked Encapsulated Response Format</name>
        <artwork><![CDATA[
Chunked Encapsulated Response {
  Response Nonce (Nk),
  Chunked Response Chunks (..),
}

Chunked Response Chunks {
  Non-Final Response Chunk (..),
  Final Response Chunk Indicator (i) = 0,
  AEAD-Protected Final Response Chunk (..),
}

Non-Final Response Chunk {
  Length (i) = 1..,
  AEAD-Protected Chunk (..),
}
]]></artwork>
      </figure>
    </section>
    <section anchor="encapsulation-of-chunks">
      <name>Encapsulation of Chunks</name>
      <t>The encapsulation of chunked Oblivious HTTP requests and responses uses
the same approach as the non-chunked variant, with the difference that
the body of requests and responses are sealed and opened in chunks, instead
of as a whole.</t>
      <t>The AEAD that protects both requests and responses protects individual chunks from
modification or truncation. Additionally, chunk authentication protects two other
pieces of information:</t>
      <ol spacing="normal" type="1"><li>
          <t>the order of the chunks (the sequence number of each chunk), which is
included in the nonce of each chunk.</t>
        </li>
        <li>
          <t>which chunk is the final chunk, which is indicated by a sentinel in the AAD
of the final chunk.</t>
        </li>
      </ol>
      <t>The format of the outer packaging that carries the chunks (the length prefix for each
chunk specifically) is not explicitly authenticated. This allows the chunks to be
transported by alternative means, and still be valid as long as the order and
finality are preserved.  In particular, the variable-length encoding used for lengths
allows for different expressions of the same value, where the choice between
equivalent encodings is not authenticated.</t>
      <section anchor="request-encap">
        <name>Request Encapsulation</name>
        <t>For requests, the setup of the HPKE context and the encrypted request header
is the same as the non-chunked variant. This is the Chunked Request Header
defined in <xref target="request"/>.</t>
        <artwork><![CDATA[
hdr = concat(encode(1, key_id),
             encode(2, kem_id),
             encode(2, kdf_id),
             encode(2, aead_id))
info = concat(encode_str("message/bhttp chunked request"),
              encode(1, 0),
              hdr)
enc, sctxt = SetupBaseS(pkR, info)
enc_request_hdr = concat(hdr, enc)
]]></artwork>
        <t>Each chunk is sealed using the HPKE context. For non-final chunks, the AAD
is empty.</t>
        <artwork><![CDATA[
sealed_chunk = sctxt.Seal("", chunk)
sealed_chunk_len = varint_encode(len(sealed_chunk))
non_final_chunk = concat(sealed_chunk_len, sealed_chunk)
]]></artwork>
        <t>The final chunk in a request uses an AAD of the string "final".</t>
        <artwork><![CDATA[
sealed_final_chunk = sctxt.Seal("final", chunk)
sealed_final_chunk_len = varint_encode(len(sealed_final_chunk))
final_chunk = concat(sealed_final_chunk_len, sealed_final_chunk)
]]></artwork>
        <t>HPKE already maintains a sequence number for sealing operations as part of
the context, so the order of chunks is protected. HPKE will produce an
error if the sequence number overflows, which puts a limit on the number
of chunks that can be sent in a request.</t>
      </section>
      <section anchor="response-encap">
        <name>Response Encapsulation</name>
        <t>For responses, the first piece of data sent back is the response nonce,
as in the non-chunked variant. As in the non-chunked variant, the length
of the nonce is <tt>max(Nn, Nk)</tt>, where <tt>Nn</tt> and <tt>Nk</tt> are the length of
the AEAD nonce and key.</t>
        <artwork><![CDATA[
entropy_len = max(Nn, Nk)
response_nonce = random(entropy_len)
]]></artwork>
        <t>Each chunk is sealed using the same AEAD key and AEAD nonce that are
derived for the non-chunked variant, which are calculated as follows:</t>
        <artwork><![CDATA[
secret = context.Export("message/bhttp chunked response", entropy_len)
salt = concat(enc, response_nonce)
prk = Extract(salt, secret)
aead_key = Expand(prk, "key", Nk)
aead_nonce = Expand(prk, "nonce", Nn)
]]></artwork>
        <t>The sender also maintains a counter of chunks, which is set to 0 for the first
chunk an incremented by 1 after encoding each chunk.</t>
        <artwork><![CDATA[
counter = 0
]]></artwork>
        <t>The AEAD nonce is XORed with the counter for encrypting (and decrypting) each
chunk.  For non-final chunks, the AAD is empty.</t>
        <artwork><![CDATA[
chunk_nonce = aead_nonce XOR encode(Nn, counter)
sealed_chunk = Seal(aead_key, chunk_nonce, "", chunk)
sealed_chunk_len = varint_encode(len(sealed_chunk))
non_final_chunk = concat(sealed_chunk_len, sealed_chunk)
counter++
]]></artwork>
        <t>The final chunk in a response uses an AAD of the string "final".</t>
        <artwork><![CDATA[
chunk_nonce = aead_nonce XOR encode(Nn, counter)
sealed_final_chunk = Seal(aead_key, chunk_nonce, "final", chunk)
sealed_final_chunk_len = varint_encode(len(sealed_final_chunk))
final_chunk = concat(sealed_final_chunk_len, sealed_final_chunk)
]]></artwork>
        <t>If the counter reached the maximum value that can be held in an
integer with <tt>Nn</tt> bits (that maximum being <tt>2^Nn</tt>), where <tt>Nn</tt> is the
length of the AEAD nonce, the <tt>chunk_nonce</tt> would wrap and be reused.
Therefore, the response <bcp14>MUST NOT</bcp14> use <tt>2^Nn</tt> or more chunks.</t>
      </section>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>In general, Chunked OHTTP inherits the same security considerations as Oblivious
HTTP <xref target="OHTTP"/>. Note specifically that while Chunked OHTTP allows for incremental
delivery and processing of messages, it does not add forward secrecy between
chunks. As with the non-chunked variant, forward secrecy is only provided when
changing the key configuration. This is particularly important when chunking is
used to enable interactivity.</t>
      <section anchor="message-truncation">
        <name>Message Truncation</name>
        <t>The primary advantage of a chunked encoding is that chunked requests or responses can
be generated or processed incrementally.  However, for a recipient in particular,
processing an incomplete message can have security consequences.</t>
        <t>The potential for message truncation is not a new concern for HTTP.  All versions of
HTTP provide incremental delivery of messages.  For this use of Oblivious HTTP,
incremental processing that might result in side-effects demands particular attention
as Oblivious HTTP does not provide strong protection against replay attacks; see
<xref section="6.5" sectionFormat="of" target="OHTTP"/>.  Truncation might be the result of interference at the
network layer, or by a malicious Oblivious Relay Resource.</t>
        <t>Endpoints that receive chunked messages can perform early processing if the risks are
understood and accepted. Conversely, endpoints that depend on having a complete
message <bcp14>MUST</bcp14> ensure that they do not consider a message complete until having
received a chunk with a 0-valued length prefix, which was successfully decrypted
using the expected sentinel value, "final", in the AAD.</t>
      </section>
      <section anchor="interactivity-and-privacy">
        <name>Interactivity and Privacy</name>
        <t>Without chunking, Oblivious HTTP involves a single request and response, with no
further interactivity.  Using a chunked variant at both Client and Oblivious
Gateway Resource creates the possibility that an exchange could lead to multiple
rounds of interaction.  Information from early chunks from a peer could
influence how an endpoint constructs later chunks of their message.</t>
        <t>An Oblivious Gateway Resource could be able to observe the round trip time to
the Client if the Client conditions the timing or content of chunks on what it
receives in a response.</t>
        <t>Client implementations therefore need to be aware of the possibility that
processing chunks might result in observable interactivity that could reduces
the privacy protection that the protocol could otherwise provide.  Interactivity
that is deliberate might be acceptable. For instance, the 100-continue feature
in HTTP, which has the client withhold the body of a request until it receives a
100 Informational response, is not possible without chunked encoding.  This
highlights the risks involved in the use of this chunked encoding to adapt an
existing HTTP-based interaction to use Oblivious HTTP as such an adaptation
might not achieve expected privacy outcomes.</t>
        <t>In order to prevent the Oblivious Gateway Resource from observing the round trip time
to the client, client implementations can choose to not base the sending of request chunks based
on received response chunks. These interactions can still benefit from chunked processing,
without incurring additional observability risks.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document updates the "Media Types" registry at
<eref target="https://iana.org/assignments/media-types">https://iana.org/assignments/media-types</eref> to add the media types
"message/ohttp-chunked-req" (<xref target="iana-req"/>), and
"message/ohttp-chunked-res" (<xref target="iana-res"/>), following the procedures of
<xref target="RFC6838"/>.</t>
      <section anchor="iana-req">
        <name>message/ohttp-chunked-req Media Type</name>
        <t>The "message/ohttp-chunked-req" identifies an encrypted binary HTTP request
that is transmitted or processed in chunks. This is a binary format that is
defined in <xref target="request"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-chunked-req</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP requests that are incrementally generated or processed.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
      <section anchor="iana-res">
        <name>message/ohttp-chunked-res Media Type</name>
        <t>The "message/ohttp-chunked-res" identifies an encrypted binary HTTP response
that is transmitted or processed in chunks. This is a binary format that
is defined in <xref target="response"/>.</t>
        <dl spacing="compact">
          <dt>Type name:</dt>
          <dd>
            <t>message</t>
          </dd>
          <dt>Subtype name:</dt>
          <dd>
            <t>ohttp-chunked-res</t>
          </dd>
          <dt>Required parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Optional parameters:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Encoding considerations:</dt>
          <dd>
            <t>"binary"</t>
          </dd>
          <dt>Security considerations:</dt>
          <dd>
            <t>see <xref target="security"/></t>
          </dd>
          <dt>Interoperability considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Published specification:</dt>
          <dd>
            <t>this specification</t>
          </dd>
          <dt>Applications that use this media type:</dt>
          <dd>
            <t>Oblivious HTTP and applications that use Oblivious HTTP use this media type to
identify encapsulated binary HTTP responses that are incrementally generated or processed.</t>
          </dd>
          <dt>Fragment identifier considerations:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Additional information:</dt>
          <dd>
            <dl spacing="compact">
              <dt>Magic number(s):</dt>
              <dd>N/A</dd>
              <dt>Deprecated alias names for this type:</dt>
              <dd>N/A</dd>
              <dt>File extension(s):</dt>
              <dd>N/A</dd>
              <dt>Macintosh file type code(s):</dt>
              <dd>N/A</dd>
            </dl>
          </dd>
          <dt>Person and email address to contact for further information:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Intended usage:</dt>
          <dd>
            <t>COMMON</t>
          </dd>
          <dt>Restrictions on usage:</dt>
          <dd>
            <t>N/A</t>
          </dd>
          <dt>Author:</dt>
          <dd>
            <t>see Authors' Addresses section</t>
          </dd>
          <dt>Change controller:</dt>
          <dd>
            <t>IETF</t>
          </dd>
        </dl>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="January" year="2024"/>
            <abstract>
              <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9458"/>
          <seriesInfo name="DOI" value="10.17487/RFC9458"/>
        </reference>
        <reference anchor="HPKE">
          <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="BHTTP">
          <front>
            <title>Binary Representation of HTTP Messages</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>This document defines a binary format for representing HTTP messages.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9292"/>
          <seriesInfo name="DOI" value="10.17487/RFC9292"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="INCREMENTAL">
          <front>
            <title>Incremental HTTP Messages</title>
            <author fullname="Kazuho Oku" initials="K." surname="Oku">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple</organization>
            </author>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <date day="15" month="October" year="2024"/>
            <abstract>
              <t>   This document specifies the "Incremental" HTTP header field, which
   instructs HTTP intermediaries to forward the HTTP message
   incrementally.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Discussion of this document takes place on the HTTP Working Group
   mailing list (ietf-http-wg@w3.org), which is archived at
   https://lists.w3.org/Archives/Public/ietf-http-wg/.

   Source for this draft and an issue tracker can be found at
   https://github.com/kazuho/draft-kazuho-httpbis-incremental-http.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-kazuho-httpbis-incremental-http-00"/>
        </reference>
        <reference anchor="QUIC">
          <front>
            <title>QUIC: A UDP-Based Multiplexed and Secure Transport</title>
            <author fullname="J. Iyengar" initials="J." role="editor" surname="Iyengar"/>
            <author fullname="M. Thomson" initials="M." role="editor" surname="Thomson"/>
            <date month="May" year="2021"/>
            <abstract>
              <t>This document defines the core of the QUIC transport protocol. QUIC provides applications with flow-controlled streams for structured communication, low-latency connection establishment, and network path migration. QUIC includes security measures that ensure confidentiality, integrity, and availability in a range of deployment circumstances. Accompanying documents describe the integration of TLS for key negotiation, loss detection, and an exemplary congestion control algorithm.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9000"/>
          <seriesInfo name="DOI" value="10.17487/RFC9000"/>
        </reference>
        <reference anchor="RFC6838">
          <front>
            <title>Media Type Specifications and Registration Procedures</title>
            <author fullname="N. Freed" initials="N." surname="Freed"/>
            <author fullname="J. Klensin" initials="J." surname="Klensin"/>
            <author fullname="T. Hansen" initials="T." surname="Hansen"/>
            <date month="January" year="2013"/>
            <abstract>
              <t>This document defines procedures for the specification and registration of media types for use in HTTP, MIME, and other Internet protocols. This memo documents an Internet Best Current Practice.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="13"/>
          <seriesInfo name="RFC" value="6838"/>
          <seriesInfo name="DOI" value="10.17487/RFC6838"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="HTTP">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
      </references>
    </references>
    <?line 547?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>TODO acknowledgements.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
