<?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.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-thomson-webpush-sym-00" category="std" consensus="true" submissionType="IETF" obsoletes="8291" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>WebPush Encryption using Symmetric Ciphers</title>
    <seriesInfo name="Internet-Draft" value="draft-thomson-webpush-sym-00"/>
    <author fullname="Martin Thomson">
      <organization>Mozilla</organization>
      <address>
        <email>mt@lowentropy.net</email>
      </address>
    </author>
    <date year="2026" month="July" day="24"/>
    <area>Applications and Real-Time</area>
    <workgroup>Web-Based Push Notifications</workgroup>
    <keyword>spam</keyword>
    <keyword>transdimensional annoyance</keyword>
    <keyword>perfect forward secrecy</keyword>
    <abstract>
      <?line 57?>

<t>This document defines how to use purely symmetric cryptography
with Web Push.</t>
      <t>This document obsoletes RFC 8291.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://martinthomson.github.io/webpush-hpke/draft-thomson-webpush-hpke.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-thomson-webpush-sym/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Web-Based Push Notifications Working Group mailing list (<eref target="mailto:webpush@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/webpush/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/webpush/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/martinthomson/webpush-hpke"/>.</t>
    </note>
  </front>
  <middle>
    <?line 65?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Message Encryption for Web Push <xref target="RFC8291"/>
defines a hybrid encryption system
that depends on elliptic curve cryptography.
This system is known to be vulnerable to compromise
in the event that a cryptographically-relevant quantum computer (CRQC)
is created.
The risk of this resulting in the compromise of Web Push encryption
will be increasingly likely as time passes <xref target="PQC-GUIDE"/>.</t>
      <t>This document defines a message encryption design
that uses purely symmetric algorithms,
relying on a pre-shared symmetric key.
This relies on building a system for signaling
updates to the pre-shared key.
That system is not described in this document.</t>
      <t>This document obsoletes RFC 8291 <xref target="RFC8291"/>.</t>
      <t>This document is one of a pair.
Its companion, <xref target="WEBPUSH-HPKE"/> is an alternative to this approach.
<xref target="WEBPUSH-HPKE"/> describes how to encode messages
using Hybrid Public Key Encryption (HPKE).</t>
    </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?>

</section>
    <section anchor="using-hpke-in-web-push">
      <name>Using HPKE in Web Push</name>
      <t>Web Push <xref target="WEBPUSH"/> provides a messaging capability
that allows applications to send small messages
to user agents via a push service.
The push service enables efficient message delivery,
even when user agents have constrained connectivity.</t>
      <t>Typical interactions for Web Push are shown in <xref target="f-overview"/>.</t>
      <figure anchor="f-overview">
        <name>Web Push Overview</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="304" width="472" viewBox="0 0 472 304" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px" stroke-linecap="round">
              <path d="M 8,32 L 8,64" fill="none" stroke="black"/>
              <path d="M 40,72 L 40,176" fill="none" stroke="black"/>
              <path d="M 40,208 L 40,272" fill="none" stroke="black"/>
              <path d="M 72,32 L 72,64" fill="none" stroke="black"/>
              <path d="M 168,32 L 168,64" fill="none" stroke="black"/>
              <path d="M 224,72 L 224,128" fill="none" stroke="black"/>
              <path d="M 224,208 L 224,272" fill="none" stroke="black"/>
              <path d="M 288,32 L 288,64" fill="none" stroke="black"/>
              <path d="M 352,32 L 352,64" fill="none" stroke="black"/>
              <path d="M 408,72 L 408,176" fill="none" stroke="black"/>
              <path d="M 408,208 L 408,272" fill="none" stroke="black"/>
              <path d="M 464,32 L 464,64" fill="none" stroke="black"/>
              <path d="M 8,32 L 72,32" fill="none" stroke="black"/>
              <path d="M 168,32 L 288,32" fill="none" stroke="black"/>
              <path d="M 352,32 L 464,32" fill="none" stroke="black"/>
              <path d="M 8,64 L 72,64" fill="none" stroke="black"/>
              <path d="M 168,64 L 288,64" fill="none" stroke="black"/>
              <path d="M 352,64 L 464,64" fill="none" stroke="black"/>
              <path d="M 48,110 L 216,110" fill="none" stroke="black"/>
              <path d="M 48,114 L 216,114" fill="none" stroke="black"/>
              <path d="M 48,160 L 400,160" fill="none" stroke="black"/>
              <path d="M 8,192 Q 10,188.8 12,192 Q 14,195.2 16,192 Q 18,188.8 20,192 Q 22,195.2 24,192 Q 26,188.8 28,192 Q 30,195.2 32,192 Q 34,188.8 36,192 Q 38,195.2 40,192 Q 42,188.8 44,192 Q 46,195.2 48,192 Q 50,188.8 52,192 Q 54,195.2 56,192 Q 58,188.8 60,192 Q 62,195.2 64,192 Q 66,188.8 68,192 Q 70,195.2 72,192 Q 74,188.8 76,192 Q 78,195.2 80,192 Q 82,188.8 84,192 Q 86,195.2 88,192 Q 90,188.8 92,192 Q 94,195.2 96,192 Q 98,188.8 100,192 Q 102,195.2 104,192 Q 106,188.8 108,192 Q 110,195.2 112,192 Q 114,188.8 116,192 Q 118,195.2 120,192 Q 122,188.8 124,192 Q 126,195.2 128,192 Q 130,188.8 132,192 Q 134,195.2 136,192 Q 138,188.8 140,192 Q 142,195.2 144,192 Q 146,188.8 148,192 Q 150,195.2 152,192 Q 154,188.8 156,192 Q 158,195.2 160,192 Q 162,188.8 164,192 Q 166,195.2 168,192 Q 170,188.8 172,192 Q 174,195.2 176,192 Q 178,188.8 180,192 Q 182,195.2 184,192 " fill="none" stroke="black"/>
              <path d="M 264,192 Q 266,188.8 268,192 Q 270,195.2 272,192 Q 274,188.8 276,192 Q 278,195.2 280,192 Q 282,188.8 284,192 Q 286,195.2 288,192 Q 290,188.8 292,192 Q 294,195.2 296,192 Q 298,188.8 300,192 Q 302,195.2 304,192 Q 306,188.8 308,192 Q 310,195.2 312,192 Q 314,188.8 316,192 Q 318,195.2 320,192 Q 322,188.8 324,192 Q 326,195.2 328,192 Q 330,188.8 332,192 Q 334,195.2 336,192 Q 338,188.8 340,192 Q 342,195.2 344,192 Q 346,188.8 348,192 Q 350,195.2 352,192 Q 354,188.8 356,192 Q 358,195.2 360,192 Q 362,188.8 364,192 Q 366,195.2 368,192 Q 370,188.8 372,192 Q 374,195.2 376,192 Q 378,188.8 380,192 Q 382,195.2 384,192 Q 386,188.8 388,192 Q 390,195.2 392,192 Q 394,188.8 396,192 Q 398,195.2 400,192 Q 402,188.8 404,192 Q 406,195.2 408,192 Q 410,188.8 412,192 Q 414,195.2 416,192 Q 418,188.8 420,192 Q 422,195.2 424,192 Q 426,188.8 428,192 Q 430,195.2 432,192 Q 434,188.8 436,192 Q 438,195.2 440,192 " fill="none" stroke="black"/>
              <path d="M 232,240 L 400,240" fill="none" stroke="black"/>
              <path d="M 48,256 L 216,256" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="408,160 396,154.4 396,165.6" fill="black" transform="rotate(0,400,160)"/>
              <polygon class="arrowhead" points="240,240 228,234.4 228,245.6" fill="black" transform="rotate(180,232,240)"/>
              <polygon class="arrowhead" points="224,112 212,106.4 212,117.6" fill="black" transform="rotate(0,216,112)"/>
              <polygon class="arrowhead" points="56,256 44,250.4 44,261.6" fill="black" transform="rotate(180,48,256)"/>
              <polygon class="arrowhead" points="56,112 44,106.4 44,117.6" fill="black" transform="rotate(180,48,112)"/>
              <g class="text">
                <text x="36" y="52">UA</text>
                <text x="196" y="52">Push</text>
                <text x="248" y="52">Service</text>
                <text x="408" y="52">Application</text>
                <text x="128" y="100">Setup</text>
                <text x="160" y="148">Provide</text>
                <text x="244" y="148">Subscription</text>
                <text x="224" y="180">|</text>
                <text x="224" y="196">(Later)</text>
                <text x="284" y="228">Push</text>
                <text x="336" y="228">Message</text>
                <text x="92" y="244">Push</text>
                <text x="144" y="244">Message</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
    +-------+           +--------------+       +-------------+
    |  UA   |           | Push Service |       | Application |
    +-------+           +--------------+       +-------------+
        |                      |                      |
        |        Setup         |                      |
        |<====================>|                      |
        |                      |                      |
        |           Provide Subscription              |
        |-------------------------------------------->|
        |                      |                      |
    ~~~~~~~~~~~~~~~~~~~~~~~ (Later) ~~~~~~~~~~~~~~~~~~~~~~~
        |                      |                      |
        |                      |     Push Message     |
        |    Push Message      |<---------------------|
        |<---------------------|                      |
        |                      |                      |
]]></artwork>
        </artset>
      </figure>
      <t>Encryption of push messages ensures that the push service
is unable to read or alter the messages it handles.</t>
      <t>Web Push uses a hybrid encryption mode that combines
a key-encapsulation mechanism (KEM)
and pre-shared key (PSK)
with authenticated encryption with additional data (AEAD) encryption.
This document describes how this can be performed using purely symmetric ciphers.</t>
      <t>The overall encryption design is composed from two parts:</t>
      <ol spacing="normal" type="1"><li>
          <t>A user agent key configuration,
where the user agent provides the information
necessary to construct a message it will accept.
This is provided by the user agent to the application
during the establishment of a Web Push subscription.
Details of the format of this key configuration
are provided in <xref target="config"/>.</t>
        </li>
        <li>
          <t>A message protection format,
used to encode push messages.
This format is defined in <xref target="message"/>.</t>
        </li>
      </ol>
    </section>
    <section anchor="config">
      <name>User Agent Key Configuration</name>
      <t>In order for an application server to send a push message using these keys,
it requires knowledge of the PSK the user agent has chosen
and the corresponding cipher.</t>
      <t>This information is formatted into a key configuration.</t>
      <t><xref target="f-config"/> shows the format of the key configuration,
using the format described in <xref section="1.3" sectionFormat="of" target="QUIC"/>.</t>
      <figure anchor="f-config">
        <name>Configuration Format</name>
        <sourcecode type="artwork"><![CDATA[
Key Config {
  Symmetric Algorithms (32) ...,
}

Symmetric Key {
  Key Identifier (8),
  HPKE AEAD ID (16),
  Key Length (16),
  Key (Nk * 8),
}
]]></sourcecode>
      </figure>
      <t>The format consists of one or more Symmetric Key items,
each of which contains:</t>
      <dl>
        <dt>Key Identifier:</dt>
        <dd>
          <t>An 8 bit value that will be used in protected messages
to identify the user agent's PSK and KEM secret key.</t>
        </dd>
        <dt>HPKE AEAD ID:</dt>
        <dd>
          <t>A 16 bit HPKE AEAD identifier as defined in <xref section="7.3" sectionFormat="of" target="HPKE"/>
or <eref target="https://www.iana.org/assignments/hpke/hpke.xhtml#hpke-aead-ids">the HPKE AEAD IANA registry</eref>.</t>
        </dd>
        <dt>Key Length:</dt>
        <dd>
          <t>A 16 bit integer in network byte order that encodes the length, in bytes,
of the Key field that follows.</t>
        </dd>
        <dt>Key:</dt>
        <dd>
          <t>A key for the identified AEAD,
with a length determined by the
If the encoded length of the key is not identical to the size of the key (Nk)
in the definition of the AEAD,
the entry <bcp14>MUST</bcp14> be discarded.</t>
        </dd>
      </dl>
    </section>
    <section anchor="message">
      <name>HPKE-Encrypted Push Message Format</name>
      <t>The format of push messages is illustrated in <xref target="f-message"/>.</t>
      <figure anchor="f-message">
        <name>HPKE-Protected Push Message Format</name>
        <sourcecode type="artwork"><![CDATA[
HPKE-Protected Push Message {
  Key Identifier (8),
  Nonce (Nn),
  Encrypted Message Contents (..),
}
]]></sourcecode>
      </figure>
      <t>Processes for the application server that sends messages
are included in <xref target="encrypt"/>;
processes for the user agent that receives messages
are included in <xref target="decrypt"/>.</t>
      <section anchor="encrypt">
        <name>Push Message Application Server Processing</name>
        <t>Applications encapsulate a push message, <tt>msg</tt>,
using values from the key configuration:</t>
        <ul spacing="normal">
          <li>
            <t>the key identifier from the configuration, <tt>key_id</tt>,
with the corresponding AEAD identified by <tt>aead_id</tt>, and</t>
          </li>
          <li>
            <t>the pre-shared key from the configuration, <tt>key</tt>,</t>
          </li>
        </ul>
        <t>The application then constructs an encrypted push message, <tt>push_message</tt>,
from the plaintext of the message, <tt>msg</tt>, as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Generate a unique value for <tt>nonce</tt>.
This value needs to be unique across all uses
of the same pre-shared key.</t>
          </li>
          <li>
            <t>Encrypt <tt>msg</tt> by invoking the <tt>Seal()</tt> method on the selected AEAD
passing <tt>key</tt> and an empty associated data <tt>aad</tt>,
yielding ciphertext <tt>ct</tt>.</t>
          </li>
          <li>
            <t>Concatenate the values of <tt>key_id</tt>, <tt>nonce</tt>, and <tt>ct</tt>,
yielding an encrypted push message <tt>push_message</tt>.</t>
          </li>
        </ol>
        <t>Ideally, senders maintain a counter and use that for nonces.
However, coordinating a counter across multiple hosts
can be challenging.
For this reason, the value of <tt>nonce</tt> can be drawn at random,
in which case the number of messages that can be protected
with a single key <bcp14>MUST</bcp14> be significantly less than
two to the power of half the number of bits in the <tt>nonce</tt> value.
Setting a limit of 2<sup>Nn/2 - margin</sup> messages,
where <tt>margin</tt> is at least 20,
provides a very low chance of collision.</t>
        <t>Note that <tt>nonce</tt> is of fixed-length, so there is no ambiguity in parsing this
structure.</t>
        <t>In pseudocode, this procedure is as follows:</t>
        <sourcecode type="pseudocode"><![CDATA[
aead = find_aead(aead_id)
nonce = random_bits(aead.Nn)
ct = aead.Seal(key, nonce, "", msg)
push_message = concat(key_id, nonce, ct)
]]></sourcecode>
      </section>
      <section anchor="decrypt">
        <name>Push Message Receiver Processing</name>
        <t>An user agent decrypts a push message by reversing this process.
To decapsulate the encrypted push message, <tt>push_message</tt>:</t>
        <ol spacing="normal" type="1"><li>
            <t>Parses <tt>push_message</tt>
into <tt>key_id</tt>, <tt>nonce</tt>, and <tt>ct</tt>
(indicated using the function <tt>parse()</tt> in pseudocode).
The user agent is then able to find
the pre-shared key, <tt>key</tt>.  </t>
            <t>
a. If <tt>key_id</tt> does not identify a key known to the user agent
   the user agent discards the message.  </t>
            <t>
b. Optionally, if <tt>nonce</tt> matches a value that has been used with this key,
   the user agent destroys the corresponding key
   and discards the message.</t>
          </li>
          <li>
            <t>Decrypt <tt>ct</tt> by invoking the <tt>Open()</tt> method on the AEAD
associated with the <tt>key</tt>,
passing <tt>key</tt>, <tt>nonce, and an empty associated data,
yielding </tt>msg` or an error on failure.
If an error is returned, the user agent discards the message.</t>
          </li>
        </ol>
        <t>In pseudocode, this procedure is as follows:</t>
        <sourcecode type="pseudocode"><![CDATA[
key_id, nonce, ct = parse(enc_request)
key, aead = find_key(key_id)
if not key: abort
if previously_seen(key_id, nonce):
  delete(key)
  abort
msg, error = aead.Open(key, "", nonce, ct)
if error: abort
]]></sourcecode>
      </section>
    </section>
    <section anchor="algorithms">
      <name>Mandatory Algorithms</name>
      <t>All implementations of this specification <bcp14>MUST</bcp14> implement
AES-128-GCM, identified as 0x0001 in <xref section="7.3" sectionFormat="of" target="HPKE"/>.</t>
    </section>
    <section anchor="upgrading-from-rfc-8291">
      <name>Upgrading from RFC 8291</name>
      <t>The encryption scheme in <xref target="RFC8291"/> identifies itself
through the use of the encrypted "aes128gcm" content coding <xref target="RFC8188"/>.
Though it is possible to use this message encryption system
and the "aes128gcm" content coding at the same time,
this is not generally necessary.
A user agent can therefore use the absence of the encrypted content coding
to indicate the use of this scheme.</t>
      <t>This document defines a media type
for HPKE-protected push messages; see <xref target="iana"/>.
This media type <bcp14>MAY</bcp14> be omitted if the "aes128gcm" content coding is not present.</t>
      <t>The use of post-quantum cryptography can increase the size of messages considerably.
<xref section="4" sectionFormat="of" target="RFC8291"/> recommends that push services support ciphertext
of 4096 bytes.
This can reduce the available space for plaintext considerably.
For example, using MLKEM768-X25519 means 1143 bytes of cryptographic overhead,
compared to the 103-byte overhead in RFC 8291.</t>
      <t>Ideally, to allow for a smooth transition to PQ cryptography,
push services would allow an additional 1kB for ciphertext.</t>
      <t>Unlike RFC 8291, no native padding facility is provided by this encryption format;
see <xref target="security"/> for details.</t>
    </section>
    <section anchor="security">
      <name>Security Considerations</name>
      <t>A Web Push user agent relies to some degree on two values
remaining confidential to protect it from unwanted messages:</t>
      <ul spacing="normal">
        <li>
          <t>the URL at which push messages are delivered,
knowledge of which is necessary
for messages to reach the user agent at all, and</t>
        </li>
        <li>
          <t>the pre-shared key that is used to authenticate the sender,
which is the primary defense.</t>
        </li>
      </ul>
      <t>Knowledge of these values,
along with the other parameters in the key configuration,
allows an attacker to send any message it chooses
to the user agent.</t>
      <t>Like the design in RFC 8291 (see <xref section="7" sectionFormat="of" target="RFC8291"/>),
this mechanism cannot obscure the presence, timing, and size of messages
from the push service.
Though communication with the push service is protected by TLS,
without additional traffic analysis protection,
network observers might also be able to observe these attributes of messages.</t>
      <t>Padding of the payload of messages can be used
to obscure the precise size of the message,
but no facility is provided in this document for padding messages.
This differs from the RFC 8291 design,
which was able to use the padding provided by the <xref target="RFC8188"/> encoding.</t>
      <t>This document exercises the options described in <xref target="RFC8192"/>
for replacing the encryption scheme.
Any replacement of this encryption scheme can use those same techniques.</t>
      <section anchor="pcs">
        <name>Post-Compromise Security</name>
        <t>This message encryption scheme does not provide confidentiality
of messages that are sent after a key becomes compromised.
A key compromise leads to loss of confidentiality
for all messages sent under the same key,
in the past or future.
Knowledge of the key also grants the ability to forge arbitrary new messages.</t>
      </section>
      <section anchor="collision">
        <name>Nonce Collisions</name>
        <t>Protection of two different messages with an identical nonce
leads to a key compromise in many AEAD functions.
Applications <bcp14>MUST</bcp14> ensure that nonces used with the same key are unique.</t>
        <t>This document does not require that user agents track
which nonces have been used,
as that require significant state retention and computation.
However, where a user agent detects nonce reuse
it <bcp14>MUST</bcp14> discard the associated key.
Messages that are merely replayed <bcp14>MUST NOT</bcp14> trigger this response.
The user agent is encouraged to make all affected entities aware
of the (potential) compromise of both previous and subsequent communications.</t>
        <t>This document does not require the use of a nonce-reuse resistant AEAD,
but one might be defined based on something like <xref target="AES-GCM-SIV"/>.</t>
      </section>
      <section anchor="overuse">
        <name>AEAD Overuse</name>
        <t>Overuse of an AEAD key can give an attacker additional advantages
that might lead to loss of confidentiality
or the ability to forge messages.
The guidance in <xref target="AEAD-LIMITS"/>
          <bcp14>MUST</bcp14> be followed with a target AEA advantage of 2<sup>-40</sup>,
assuming that all messages are 4096 bytes.
Application servers <bcp14>MUST</bcp14> refuse to send messages beyond the corresponding limits;
user agents <bcp14>MUST</bcp14> discard keys after receiving that many messages.</t>
      </section>
      <section anchor="dos">
        <name>Handling Denial of Service</name>
        <t>A user agent that receives multiple unwanted messages,
including messages that are discarded,
might be the target of a denial of service attack.
Such an attack might seek to drain batteries
by activating the device radio
or by creating messages that cannot be decrypted.</t>
        <t>A user agent can disable the associated subscription
if they receive too many unwanted or invalid messages.</t>
      </section>
      <section anchor="sec-media">
        <name>Media Type Security</name>
        <t>Push messages contain arbitrary content chosen by an application server.
Though the format does not provide explicit signaling for the encapsulated media type,
applications can include arbitrary data.
How data is handled is determined by the application,
which both sends and receives the data.</t>
      </section>
    </section>
    <section anchor="iana">
      <name>IANA Considerations</name>
      <t>This document registers the "application/webpush-message" content type
to identify a push message that is protected with this scheme,
as defined in <xref target="message"/>.</t>
      <dl spacing="compact">
        <dt>Type name:</dt>
        <dd>
          <t>application</t>
        </dd>
        <dt>Subtype name:</dt>
        <dd>
          <t>webpush-message</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="sec-media"/></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>This type identifies an encrypted web push message.</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>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="HPKE">
          <front>
            <title>Hybrid Public Key Encryption</title>
            <author fullname="Richard Barnes" initials="R." surname="Barnes">
         </author>
            <author fullname="Karthikeyan Bhargavan" initials="K." surname="Bhargavan">
              <organization>Inria</organization>
            </author>
            <author fullname="Benjamin Lipp" initials="B." surname="Lipp">
              <organization>Rosenpass</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
         </author>
            <date day="6" month="July" year="2026"/>
            <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 a variant that authenticates possession of a pre-shared key.
   HPKE works for any combination of an asymmetric Key Encapsulation
   Mechanism (KEM), key derivation function (KDF), and authenticated
   encryption with additional data (AEAD) encryption function.  This
   document provides 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 SHA-2.

   This document obsoletes RFC 9180.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-hpke-hpke-04"/>
        </reference>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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="WEBPUSH">
          <front>
            <title>Generic Event Delivery Using HTTP Push</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <author fullname="E. Damaggio" initials="E." surname="Damaggio"/>
            <author fullname="B. Raymor" initials="B." role="editor" surname="Raymor"/>
            <date month="December" year="2016"/>
            <abstract>
              <t>This document describes a simple protocol for the delivery of real- time events to user agents. This scheme uses HTTP/2 server push.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8030"/>
          <seriesInfo name="DOI" value="10.17487/RFC8030"/>
        </reference>
        <reference anchor="RFC8188">
          <front>
            <title>Encrypted Content-Encoding for HTTP</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>This memo introduces a content coding for HTTP that allows message payloads to be encrypted.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8188"/>
          <seriesInfo name="DOI" value="10.17487/RFC8188"/>
        </reference>
        <reference anchor="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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="WEBPUSH-HPKE">
          <front>
            <title>WebPush Encryption using HPKE</title>
            <author initials="M." surname="Thomson" fullname="Martin Thomson">
              <organization/>
            </author>
            <date year="2026" month="July" day="24"/>
          </front>
        </reference>
        <reference anchor="CDJZ">
          <front>
            <title>Automated Analysis of Protocols that use Authenticated Encryption: How Subtle AEAD Differences can impact Protocol Security</title>
            <author initials="C." surname="Cremers" fullname="Cas Cremers">
              <organization/>
            </author>
            <author initials="A." surname="Dax" fullname="Alexander Dax">
              <organization/>
            </author>
            <author initials="C." surname="Jacomme" fullname="Charlie Jacomme">
              <organization/>
            </author>
            <author initials="M." surname="Zhao" fullname="Mang Zhao">
              <organization/>
            </author>
            <date year="2023" month="August"/>
          </front>
          <seriesInfo name="USENIX" value="2023"/>
        </reference>
        <reference anchor="RFC8291">
          <front>
            <title>Message Encryption for Web Push</title>
            <author fullname="M. Thomson" initials="M." surname="Thomson"/>
            <date month="November" year="2017"/>
            <abstract>
              <t>This document describes a message encryption scheme for the Web Push protocol. This scheme provides confidentiality and integrity for messages sent from an application server to a user agent.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8291"/>
          <seriesInfo name="DOI" value="10.17487/RFC8291"/>
        </reference>
        <reference anchor="PQC-GUIDE">
          <front>
            <title>Post-Quantum Cryptography for Engineers</title>
            <author fullname="A. Banerjee" initials="A." surname="Banerjee"/>
            <author fullname="T. Reddy.K" initials="T." surname="Reddy.K"/>
            <author fullname="D. Schoinianakis" initials="D." surname="Schoinianakis"/>
            <author fullname="T. Hollebeek" initials="T." surname="Hollebeek"/>
            <author fullname="M. Ounsworth" initials="M." surname="Ounsworth"/>
            <date month="June" year="2026"/>
            <abstract>
              <t>The advent of a cryptographically relevant quantum computer (CRQC) would render state-of-the-art, traditional public key algorithms deployed today obsolete, as the mathematical assumptions underpinning their security would no longer hold. To address this, protocols and infrastructure must transition to post-quantum algorithms, which are designed to resist both traditional and quantum attacks. This document explains why engineers need to be aware of and understand post-quantum cryptography (PQC), and it details the impact of CRQCs on existing systems and the challenges involved in transitioning to post-quantum algorithms. Unlike previous cryptographic updates, this shift may require significant protocol redesign due to the unique properties of post-quantum algorithms.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9958"/>
          <seriesInfo name="DOI" value="10.17487/RFC9958"/>
        </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="RFC8192">
          <front>
            <title>Interface to Network Security Functions (I2NSF): Problem Statement and Use Cases</title>
            <author fullname="S. Hares" initials="S." surname="Hares"/>
            <author fullname="D. Lopez" initials="D." surname="Lopez"/>
            <author fullname="M. Zarny" initials="M." surname="Zarny"/>
            <author fullname="C. Jacquenet" initials="C." surname="Jacquenet"/>
            <author fullname="R. Kumar" initials="R." surname="Kumar"/>
            <author fullname="J. Jeong" initials="J." surname="Jeong"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document sets out the problem statement for Interface to Network Security Functions (I2NSF) and outlines some companion use cases.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8192"/>
          <seriesInfo name="DOI" value="10.17487/RFC8192"/>
        </reference>
        <reference anchor="AES-GCM-SIV">
          <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>
      </references>
    </references>
    <?line 535?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>David Benjamin insisted that we attempt to use symmetric keys.
This is because introducing a scheme that provides post-compromise security,
such as the one in <xref target="WEBPUSH-HPKE"/> is somewhat more inefficient than this scheme.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA61b63bbRpL+30/RQ/8YKSGpi53EVmxnaEmONbZkxZI3k5kz
J2oCTRJjEGDQgGhGUZ5ln2WfbL+q6saFlLWezejkxCTQl+q6fHXp4mAwUGVS
pvZA93604/PKzfRxFhWrRZnkma5ckk31xWo+t2WRRPowWcxs4XoqMqWd5sXq
QLsyVirOo8zMsUhcmEk5KGf53OXZYGnHC6w4cKv5YHdXuWo8T5zDwuVqgcEn
x5cvtX6gTepy7J9ksV1Y/C8re33ds3FS5kViUvpyMnqBf/ICn95dvuyprJqP
bXGg8rHLU1tad6Af7z/ZUzHoOlBRnjmbuQpPy6Ky6vpAP1SmsAa7jBaLNAH5
oMJpk8X6nTXp4DKZ255a5sWHaZFXC+HG4IVxNtbMlLO8TCZhXk99sCsMjg+U
Hmi3MHP6tyxM5mIslNERTYrVs3xlssjS24UtJjYq9SQvlqaItbNRYaOVurZZ
BZK1/ryNtRbe9X4ErSSc72kaPZ+bJMVzz/O/JLacDPNiSq9MEc3walaWC3ew
s0Mj6VFybYdh2A492BkX+dLZHb/GDs2dJuWsGmP23BRlknnRhiGD2eKDpWEp
GO/Kziat4UNZZZjknYk7d6sLvRrOynnaU8pUeFsQn7GJ1pMqTUXTeqe8gb6U
yT1+jYOYLPmVmXWgT/NfkzQ1/MZ69szLv6T5EipW5IvVMLMl9sjyYo4p1yyG
V+evj6GagyNmDdPC/1MqySbtgT8evzh/f/FqwBN4D29In7QjGskD60Px30DL
iboH4pesznp/d//rwe43g/1HCk8Pj/76985+z/06o6rMQR4UZwTtW7nE6Xyi
z4u8zKM8dbqcmRKUWBo4AwdIqTC4ITMQ9Cpf6otqjMX16Hh0pI+SycQWFors
dGQyncwXBpocVtYXNqqKpFx1SX442H18z2kPjdOHhZ0DTtbejFL7EYZpC31k
Pq7PmpkiTaz+q4lygNIGB8Hlv89Mzs+dLRLrSGph7/cXx2cnfxPqlBoOh0oN
BgNtxg62G5VKXc7ANIBZBSMudWwnSYYzz8CPMmfWLarCpivtakRk3uXTwixm
K7WElpP42XKH68vVWKXfvTxkuMIQJmCexHEKDXugT0gx4yoicSh1ap0zU9vW
JKhgvYO+ufkOS9FKt7cqUGv0bDUukljbZpZbudLOFWuAgCx0I9M2TRMMwCmq
4tp2zjIU4mWixqcPWb7MiA1jq6+rNLOFGUNB8ACSWBQ5kN3CRKBlVttrOi/v
ZtqrQuPSdDUAC+21wYhfKvy/mvMKVQmBbx2+++FwW2E7gCNpJ5FhdZG4D6TL
JZFUWFelJdmT363Zn8bUzGmOD7mkKdGdZLQs2SJkmCYfSJRQwxKYrRfGOXAP
LD3/4XDw/fuTo+NnYO6TJ189vr3dkGXD7LmXUYvbMbRumqlgb25Ta0wK5wll
mbu+old0Gkw0elHYgYOOwy6b0XA2XhwYC5WmoeMqSWOaZoKMSDNoX5PisaoW
ZIiO5EM8aq3rVwNtjXCznI7koiIZYwTztXXaz9DkjipujCckylg6OKFJiqE6
KR3LDWidZ33MbqPp7S3NANCYFEqRMeLKQejxAsI2EcxrY1I4QW2xkEke2yAi
pzwMi3mcV2MEAvq1XbXta4vW2h6SLR7mGelxHSgckcwT/q5YLcFJTVGAgzN6
f3FJcQr9q8/e8ud3xz+8P3l3fESfL16N3rypPyg/4uLV2/dvjppPzczDt6en
x2dHMhlPdeeR6p2OfsIboqr39vzy5O3Z6E1vQ27w+9ZbLDyxLaAEBPjGqY6s
Xxye/89/7z2CEP4EEe7v7T0BL+XL471vHuHLEu5Cdssz6LF8hVqtFKRhTUGr
wLLhHBZJiWiuT1blZgQYCBctuPnFP4gz/zzQT8fRYu/Rc/+ADtx5GHjWecg8
23yyMVmYeMejO7apudl5vsbpLr2jnzrfA99bD59+B9uzerD3+LvngHbo0Pva
8ROPAjYp1YLwP3ktJrR5vPtwF/yGhl8ncQteaBEw14yTlPysIGuKQIbtoYln
IWwEvsCOOYmj1ntxXoXGlwyGd50YMkTaHk+vk8gKzLafwHYI3522E0SfCWlT
QLoYIHRti1VfEc6zNnSWnxnyJSAHThXsiOlzhtA3uQbthA2rBTkC0UkTCeUd
v0Z6K+oDpt3cTAb5NVFll4wtv//+uzbGXU8Vu/UvB/L3pW7+wrO1V93HX/L0
3xAWjOTf+u83IePCs+K3+nEredC//Sd212s7d4i4+/HmvAtbVot/Y97TZ3f8
Pf/8/f6/dOLvXDSbwktCIMHcT80b/Bt/z/8Ynb/f/ae33sCLFtufev8f5c3G
PFbCEAPeMW/jPUR7J3Pasr97wB+i8455xJubA/2gMV3JVp71aiN/61/0bpVq
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

-->

</rfc>
