<?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.29 (Ruby 3.3.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-uri-lake-pquake-00" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="PQuAKE">PQuAKE - Post-Quantum Authenticated Key Exchange</title>
    <seriesInfo name="Internet-Draft" value="draft-uri-lake-pquake-00"/>
    <author initials="U." surname="Blumenthal" fullname="Uri Blumenthal">
      <organization>MIT</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>uri@ll.mit.edu</email>
      </address>
    </author>
    <author initials="B." surname="Luo" fullname="Brandon Luo">
      <organization>MIT</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>brandon.luo@ll.mit.edu</email>
      </address>
    </author>
    <author initials="S." surname="O'Melia" fullname="Sean O'Melia">
      <organization>MIT</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>sean.omelia@ll.mit.edu</email>
      </address>
    </author>
    <author initials="G." surname="Torres" fullname="Gabriel Torres">
      <organization>MIT</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>gabriel.torres@ll.mit.edu</email>
      </address>
    </author>
    <author initials="D." surname="Wilson" fullname="David A. Wilson">
      <organization>MIT</organization>
      <address>
        <postal>
          <country>United States of America</country>
        </postal>
        <email>david.wilson@ll.mit.edu</email>
      </address>
    </author>
    <date year="2025" month="April" day="22"/>
    <area>Security</area>
    <workgroup>LAKE Lightweight Authenticated Key Exchange</workgroup>
    <keyword>Post-Quantum</keyword>
    <keyword>Key Exchange</keyword>
    <keyword>Compact</keyword>
    <keyword>Authenticated</keyword>
    <abstract>
      <?line 90?>

<t>This document defines the Post-Quantum Authenticated Key Exchange (PQuAKE)
protocol that addresses the needs of bandwidth- and/or power-constrained
environments, while maintaining strong security guarantees.
It accomplishes that by minimizing
the number of bits that need to be exchanged and
by utilizing an implicit peer authentication approach
similar to Menezes-Qu-Vanstone (MQV) design.
This protocol is suitable for
integration into protocols that establish dynamic
secure sessions, such as Extensible Authentication Protocol (EAP),
Internet Key Exchange Version 2 (IKEv2),
or Secure COmmunications Interoperability Protocol (SCIP).
This protocol has proofs in the verifiers Verifpal and CryptoVerif for
security properties such as secrecy of the session
key, mutual authentication, identity hiding with a preshared secret, and forward
secrecy of the session key.
The authors are in the process of publishing the proofs.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://mouse07410.github.io/pquake-draft/draft-uri-lake-pquake.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-uri-lake-pquake/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Lightweight Authenticated Key Exchange Working Group mailing list (<eref target="mailto:lake@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/lake/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/lake/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/mouse07410/pquake-draft"/>.</t>
    </note>
  </front>
  <middle>
    <?line 111?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The primary goal of PQuAKE is to minimize the communication overhead of
Post-Quantum (PQ) public-key cryptography during a key exchange.
Bandwidth or power limited devices may not realistically use
alternative PQ key exchanges
such as the TLS handshake protocol to derive
a shared symmetric key,
as PQ digital signatures and keys are drastically larger.
This protocol minimizes the communication overhead
by reducing the number of signatures transmitted
by each party to one offline-generated certificate
signature. It is designed to be an add-on to such
protocols as EAP <xref target="EAP"/>, IKEv2, and others.
Since computing a PQ digital signature typically is more
expensive than performing a PQ KEM, there is a benefit
of reduced computational costs.</t>
      <t>The overall idea of the implicit authentication of the peers
comes from the <contact fullname="MQV"/> protocol.</t>
      <t>Both parties <bcp14>MAY</bcp14> have a pre-shared symmetric secret key, usually
distributed among all the members of the given network or
Community of Interest (COI).
Adding a pre-shared symmetric key to the key derivation ensures
confidentiality of the peers' identities (certificates) against
active attackers that do not have that pre-shared key.</t>
      <t>The protocol maintains the following security guarantees:</t>
      <ul spacing="normal">
        <li>
          <t>The secure channel between the Initiator and Responder is mutually authenticated</t>
        </li>
        <li>
          <t>Key freshness, aka a new key is generated for this channel, and it hasn't
  been reused or stale;</t>
        </li>
        <li>
          <t>If two parties properly follow the protocol,
  both parties will compute the same shared keys that are known only to them;</t>
        </li>
        <li>
          <t>Perfect Forward Secrecy, aka after the channel is closed, there is no way
  for an adversary to break security properties associated with the shared
  key established via this protocol;</t>
        </li>
        <li>
          <t>Security against replay attacks;</t>
        </li>
        <li>
          <t>Confidentiality of peers' identities against passive adversary;</t>
        </li>
        <li>
          <t>Confidentiality of peers' identities against active adversary (aka, Man-In-The-Middle)
  when both peers utilize long-term pre-shared key.</t>
        </li>
      </ul>
      <t>This protocol has proofs in the verifiers Verifpal and CryptoVerif for
security properties such as secrecy of the session
key, mutual authentication, identity hiding with a preshared secret, and forward
secrecy of the session key.
The authors are in the process of publishing the proofs.</t>
      <t>It is important to note that PQuAKE does not replace protocols like
the TLS record protocol, only the handshake protocol.
Other protocols such as IKEv2, SCIP, or EAP may integrate PQuAKE
into their key exchange phase.</t>
      <section anchor="compliance-requirements-for-the-components">
        <name>Compliance requirements for the components</name>
        <t>The building blocks of this protocol <bcp14>SHALL</bcp14> have the
following security properties:</t>
        <ul spacing="normal">
          <li>
            <t>Symmetric Key Cryptosystem - IND-CCA2</t>
          </li>
          <li>
            <t>Key Encapsulation Mechanism (KEM) - Implicit, IND-CCA2 and IK-CCA2</t>
          </li>
          <li>
            <t>Key Derivation Function 1 - Random Oracle Hash Function</t>
          </li>
          <li>
            <t>Key Derivation Function 2 - Random Oracle Hash Function</t>
          </li>
          <li>
            <t>Message Authentication Code (MAC) - Pseudorandom Function</t>
          </li>
        </ul>
      </section>
      <section anchor="mandatory-to-implement-algorithms">
        <name>Mandatory-To-Implement algorithms</name>
        <t>While this protocol has been formally proven to work with any
KEM, MAC, and symmetric cipher that exhibit the above
properties -- interoperability
requires that a Mandatory-To-Implement (MTI) set of algorithms
is specified for the Version 1 of the protocol:</t>
        <ul spacing="normal">
          <li>
            <t>Enc: AES-GCM-256</t>
          </li>
          <li>
            <t>KEM: ML-KEM-1024</t>
          </li>
          <li>
            <t>Hash: SHA384</t>
          </li>
          <li>
            <t>MAC: HMAC</t>
          </li>
          <li>
            <t>KDF: HKDF</t>
          </li>
          <li>
            <t>Signature: ML-DSA-87</t>
          </li>
        </ul>
      </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?>

</section>
    <section anchor="protocol-description">
      <name>Protocol Description</name>
      <t>The PQuAKE protocol consists of four steps. Within each step, the exchanges
can happen asynchronously, but one step (aka, all of the exchanges of
that step) <bcp14>MUST</bcp14> conclude before the peers
can proceed to the next one.
If any step results in an error, the protocol <bcp14>SHOULD</bcp14> abort.
That includes receiving an out-of-order or corrupted message,
or not receiving an expected message within the
deployer-configured time interval. However, the protocol <bcp14>SHOULD</bcp14> only abort
at the end of the protocol if the peer's identity does not match an out-of-band
verification, and an implicit KEM without aborts <bcp14>SHOULD</bcp14> be used. Ideally, the
protocol <bcp14>SHOULD</bcp14> only abort after the key confirmation step if the reason for aborting
is related to the identities of the two parties.</t>
      <t>Currently, no notification to the other party, such as
information about an abnormal completion and/or giving
details of the error, is included in the protocol.</t>
      <t>The four steps are the following:</t>
      <ol spacing="normal" type="1"><li>
          <t>Establish an ephemeral symmetric key via hello messages and
exchange encrypted certificates (one <bcp14>MUST</bcp14> use an encryption scheme with
IND-CCA2 security and an implicit KEM with IND-CCA2 security and IK-CCA2 security).</t>
        </li>
        <li>
          <t>Encapsulate shared secrets and exchange the ciphertexts.</t>
        </li>
        <li>
          <t>Decapsulate shared secrets, derive key confirmation keys and a session key.</t>
        </li>
        <li>
          <t>Perform Key Confirmation.</t>
        </li>
      </ol>
      <t>Note that both peers take full transcripts (chain-hashes) of all the messages
they send and receive, and include the resulting hash outputs among the
inputs of the Key Derivation Function (KDF) that gets invoked to generate
shared secrets (first for encrypting certificates, and the next time - to
provide the shared secret that is the purpose of this protocol).</t>
      <t>While both parties have to share their certificates or identities
for authentication, we assume the identities of each party shall
remain confidential to those outside of this exchange.
They encrypt their certificates with a shared symmetric
ephemeral key that they generate via a ephemeral KEM.
This key is used to encrypt the certificate and is an input to the KDF when
generating the shared key. The final KDF that provides the negotiated
shared secret, will also include this symmetric key in its input.</t>
      <t>Instead of generating a signature over the handshake transcript like TLS,
PQuAKE performs an implicit authentication of the handshake.
It does this by making the protocol's session key dependent on not only a series
of KEM calculated shared secrets but also dependent on the hashes of the sent
and received messages.
Since only their corresponding party, who they have authenticated,
can know those secrets,
deriving the same session key implicitly authenticates
each other while creating a shared secret.</t>
      <section anchor="protocol-diagram">
        <name>Protocol Diagram</name>
        <artwork><![CDATA[
Initiator                                                 Responder
-------------------------------------------------------------------

Establish confidential link and exchange certificates
-----------------------------------------------------
(sk_e, pk_e) <- KEM.keygen()

{ pk_e } -->
                                    (ct_e, ss_e) <- KEM.encap(pk_e)

                                                       <-- { ct_e }

ss_e <- KEM.decap(ct_e, sk_e)

k_hid <- kdf_1(ss_pre, ss_e || "HID")
                                k_hid <- kdf(ss_pre, ss_e || "HID")

e_cert_i <- Enc(k_hid, cert_i)       e_cert_r <- Enc(k_hid, cert_r)

{ e_cert_i } -->                                   <-- { e_cert_r }


Encapsulate and send shared secrets
-----------------------------------
cert_r <- Dec(k_hid, e_cert_r)       cert_i <- Dec(k_hid, e_cert_i)

if cert_r is not valid, abort         if cert_i is not valid, abort

(ct_i, ss_i) <- KEM.encap(pk_r)     (ct_r, ss_r) <- KEM.encap(pk_i)

{ ct_i } -->                                           <-- { ct_r }


Decapsulate shared secrets and derive session keys
--------------------------------------------------
ss_r <- KEM.decap(sk_i, ct_r)         ss_i <- KEM.decap(sk_r, ct_i)

send_hash <- H(hf, pk_e, e_cert_i, ct_i)
                           send_hash <- H(hf, ct_e, e_cert_r, ct_r)

recv_hash <- H(hf, ct_e, e_cert_r, ct_r)
                           recv_hash <- H(hf, pk_e, e_cert_i, ct_i)

S <- ss_e||ss_i||ss_r||send_hash||recv_hash
                        S <- ss_e||ss_i||ss_r||recv_hash||send_hash

k_C_i, k_C_r, ... <- kdf_2(hf2, S)
                                 k_C_i, k_C_r, ... <- kdf_2(hf2, S)


Key Confirmation
----------------
{ HMAC(k_C_i, recv_hash || send_hash) } -->
                        <-- { HMAC(k_C_r, send_hash || recv_hash) }
]]></artwork>
      </section>
      <section anchor="exchange-certificates">
        <name>Exchange certificates</name>
        <t>During this step,
both nodes establish a shared ephemeral key via a KEM, then
use it to encrypt certificates before transmitting them.</t>
        <t>The initiator generates an ephemeral key and transmits the encapsulated secret.
The responder <bcp14>MUST</bcp14> decapsulate the ciphertext.
Both parties <bcp14>MUST</bcp14> derive a shared ephemeral key from the encapsulated secret
and the pre-shared secret if it is present.
Both parties <bcp14>MUST</bcp14> encrypt and transmit their certificates.
Both parties <bcp14>MUST</bcp14> validate the certificate's signature.
If the verification of a signature fails, the protocol <bcp14>MUST</bcp14> abort.
Implementors need to be careful to avoid aborting based off
the other node's identity
until the end of the protocol to maintain identity hiding of the peer.
Note that key encapsulation mechanism <bcp14>SHOULD</bcp14> be IND-CCA2 and IK-CCA2
secure and <bcp14>SHOULD NOT</bcp14> abort (it <bcp14>SHOULD</bcp14> be an implicit KEM).</t>
        <section anchor="key-derivation-of-khid-with-preshared-secret">
          <name>Key Derivation of k_hid with preshared secret</name>
          <t><tt>k_hid &lt;- kdf_1(ss_pre, ss_e || "HID");</tt></t>
        </section>
        <section anchor="key-derivation-of-khid-without-preshared-secret">
          <name>Key Derivation of k_hid without preshared secret</name>
          <t><tt>k_hid &lt;- kdf_1(ss_e, "HID");</tt></t>
        </section>
        <section anchor="initiator">
          <name>Initiator</name>
          <t><tt>e_cert_i &lt;- E(k_hid, cert_i);</tt></t>
        </section>
        <section anchor="responder">
          <name>Responder</name>
          <t><tt>e_cert_r &lt;- E(k_hid, cert_r);</tt></t>
        </section>
      </section>
      <section anchor="encapsulate-shared-secrets">
        <name>Encapsulate shared secrets</name>
        <t>During this step,
both nodes generate an encapsulated secret via a KEM.
The ciphertexts are exchanged.</t>
        <section anchor="initiator-1">
          <name>Initiator</name>
          <t><tt>(ct_r, ss_r) &lt;- KEM.encap(pk_i);</tt></t>
        </section>
        <section anchor="responder-1">
          <name>Responder</name>
          <t><tt>(ct_i, ss_i) &lt;- KEM.encap(pk_r);</tt></t>
        </section>
      </section>
      <section anchor="decapsulate-ciphertexts-and-key-derivation">
        <name>Decapsulate ciphertexts and key derivation</name>
        <t>The ciphertexts are decapsulated by both parties.
At this point, both sides have all the shared secrets
required to derive a set of session keys.</t>
        <section anchor="initiator-2">
          <name>Initiator</name>
          <t><tt>send_hash &lt;- hash(pk_e, e_cert_i, ct_i);</tt></t>
          <t><tt>recv_hash &lt;- hash(ct_e, e_cert_r, ct_r);</tt></t>
          <t><tt>transcript &lt;- (send_hash, recv_hash);</tt></t>
          <t><tt>k_C_i, k_C_r, k_session = kdf_2(ss_e, ss_i, ss_r, transcript);</tt></t>
        </section>
        <section anchor="responder-2">
          <name>Responder</name>
          <t><tt>send_hash &lt;- hash(ct_e, e_cert_r, ct_r);</tt></t>
          <t><tt>recv_hash &lt;- hash(pk_e, e_cert_i, ct_i);</tt></t>
          <t><tt>transcript &lt;- (recv_hash, send_hash);</tt></t>
          <t><tt>k_C_i, k_C_r, k_session = kdf_2(ss_e, ss_i, ss_r, transcript);</tt></t>
        </section>
      </section>
      <section anchor="key-confirmation">
        <name>Key Confirmation</name>
        <t>Key confirmation is done by calculating an HMAC of the chain-hash
of all the sent and received messages correspondingly, using
the appropriate Key Confirmation key derived in step 3.
The initiator <bcp14>MUST</bcp14> use the key K~ir~, and the responder
<bcp14>MUST</bcp14> use the key K~ri~.</t>
        <section anchor="initiator-3">
          <name>Initiator</name>
          <t><tt>C_i &lt;- HMAC(k_C_i, send_hash || recv_hash);</tt></t>
        </section>
        <section anchor="responder-3">
          <name>Responder</name>
          <t><tt>C_r &lt;- HMAC(k_C_r, recv_hash || send_hash);</tt></t>
        </section>
      </section>
      <section anchor="error-handling">
        <name>Error Handling</name>
        <t>We make no assumptions about the underlying transport that
carries PQuAKE messages, because no error - whether
maliciously introduced or accidental - in any of its
messages can impact correctness of the protocol itself.
We consider two kinds of errors:</t>
        <t>a. Corruption of a message - will result in protocol failure (abort)</t>
        <t>b. Failure to receive a message within expected time interval, aka
   timeout - will result in protocol failure (abort).</t>
        <t>Handling the protocol timeout (how long to wait until declaring
failure to receive) is the responsibility of the implementation
deployer. The implementer <bcp14>SHOULD</bcp14> make this value configurable.</t>
        <t>Note: the more the underlying transport does
to detect or mitigate line errors (aka, non-malicious errors),
the likelier the protocol is to successfully complete.
Ideally, the transport would offer at least the capabilities
of UDP.</t>
      </section>
    </section>
    <section anchor="protocol-messages">
      <name>Protocol Messages</name>
      <t>We do not include explicit checksums because it is practically
impossible for the protocol to succeed if any message would
arrive corrupted, either maliciously, or by a random error.</t>
      <section anchor="message-format">
        <name>Message Format</name>
        <t>A message of the protocol is formatted as follows:</t>
        <artwork><![CDATA[
 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                             Data                            ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Version: 8 bits</t>
        <t>The version field indicates the format of the initiator hello message.
This document describes version 1.</t>
        <t>Type: 8 bits</t>
        <t>This field indicates the current step of the protocol.</t>
        <t>Length: 16 bits</t>
        <t>Length is the length of the data, measured in octets. This field
allows the length of the data to be up to 65535 octets.</t>
        <t>Data: variable</t>
        <t>This field changes based on the current step of the protocol.</t>
      </section>
      <section anchor="hello-messages">
        <name>Hello Messages</name>
        <t>The Initiator generates an ephemeral KEM key-pair
<tt>(sk_e, pk_e) = KEM.keygen()</tt>
and sends the public key <tt>pk_e</tt>
to its intended recipient (the Responder).
The Responder performs encapsulation
<tt>(ct_e, ss_e) = KEM.encap(pk_e)</tt>
and sends the
ciphertext <tt>ct_e</tt> to the Initiator.</t>
        <section anchor="initiator-hello">
          <name>Initiator Hello</name>
          <t>An Initiator Hello message is formatted as follows:</t>
          <artwork><![CDATA[
 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Ephemeral Public Key                     ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <t>Version: 8 bits</t>
          <t>The version field indicates the format of the initiator hello message.
This document describes version 1.</t>
          <t>Type: 1</t>
          <t>This field indicates the state of the protocol.</t>
          <t>Length: 16 bits</t>
          <t>Length is the length of the ephemeral public key, measured in octets.
This field allows the length of a ephemeral public key to be up
to 65535 octets.</t>
          <t>Ephemeral Public Key: variable</t>
          <t>This field <bcp14>SHOULD</bcp14> be unique for each protocol execution.</t>
        </section>
        <section anchor="responder-hello">
          <name>Responder Hello</name>
          <t>A Responder Hello message is formatted as follows:</t>
          <artwork><![CDATA[
 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Encapsulated Secret                      ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
          <t>Type: 2</t>
          <t>Encapsulated Secret: variable</t>
          <t>The size of this field depends on the key encapsulation mechanism used.</t>
        </section>
      </section>
      <section anchor="certificate-exchange">
        <name>Certificate Exchange</name>
        <t>A Certificate Exchange message is formatted as follows:</t>
        <artwork><![CDATA[
 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Initial Vector      | Encrypted Certificate           ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|      Authentication Tag       |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Type: 3 for initiator, 4 for responder</t>
        <t>Initial Vector: 96 bits</t>
        <t>Encrypted Certificate: variable</t>
        <t>Authentication Tag: 128 bits</t>
        <t>The certificate encrypted with the derived key k_hid.</t>
      </section>
      <section anchor="certificate-format">
        <name>Certificate Format</name>
        <t>For now, we use standard X.509 certificate <xref target="X.509"/> with OIDs
specifying ML-KEM and ML-DSA correspondingly.
Future extensions may use different certificate formats.</t>
      </section>
      <section anchor="encapsulation">
        <name>Encapsulation</name>
        <t>An Encapsulation message is formatted as follows:</t>
        <artwork><![CDATA[
 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                    Encapsulated Secret                      ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Type: 5 for initiator, 6 for responder</t>
        <t>Encapsulated Secret: variable</t>
        <t>The size of this field depends on the key encapsulation mechanism used.</t>
      </section>
      <section anchor="key-confirmation-1">
        <name>Key Confirmation</name>
        <t>A Key Confirmation message is formatted as follows:</t>
        <artwork><![CDATA[
 0               1               2               3
 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7 0 1 2 3 4 5 6 7
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|    Version    |     Type      |            Length             |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                  Key Confirmation Value                     ...
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
]]></artwork>
        <t>Type: 7 for initiator, 8 for responder</t>
        <t>Key Confirmation Value: 384 bits (output size of SHA384)</t>
        <t>This field is the computed HMAC value of the exchange transcript.</t>
      </section>
    </section>
    <section anchor="integration-into-ikev2">
      <name>Integration into IKEv2</name>
      <t>Integration into IKEv2 <xref target="IKEV2"/> results in a hybrid Post-Quantum
Key Exchange.</t>
      <t>During the <tt>IKE_INIT</tt> phase, the peers establish ephemeral shared
secret key via ECDHE (Ephemeral Diffie-Hellman key exchange),
and signal that they will use PQuAKE in the <tt>IKE_INTERMEDIATE</tt> phase.</t>
      <t>Messages exchanged during <tt>IKE_INTERMEDIATE</tt> phase,
perform the actual key exchange.</t>
      <t>Instead of explicit signatures during <tt>IKE_AUTH</tt> phase,
both peers exchange Key Confirmation messages here.</t>
      <section anchor="ikesainit">
        <name>IKE_SA_INIT</name>
        <t>The first pair of messages negotiate cryptographic algorithms,
exchange nonces, and do an elliptic curve Diffie-Hellman exchange
in order to maintain compatibility with standard IKEv2. The initiator
indicates its support for Intermediate Exchange by including a notification
of type INTERMEDIATE_EXCHANGE_SUPPORTED in the IKE_SA_INIT request message.
If the responder also supports this exchange, it includes this notification
in the response message.</t>
        <t>The IKE_SA_INIT exchange is as follows:</t>
        <artwork><![CDATA[
Initiator                                             Responder
---------------------------------------------------------------
HDR, SAi1, KEi, Ni,
N(PQUAKE_SUPPORTED),
N(INTERMEDIATE_EXCHANGE_SUPPORTED) --->
                                            HDR, SAr1, KEr, Nr,
                                           N(PQUAKE_SUPPORTED),
                        <--- N(INTERMEDIATE_EXCHANGE_SUPPORTED)
]]></artwork>
      </section>
      <section anchor="ikeintermediate">
        <name>IKE_INTERMEDIATE</name>
        <t>If both peers indicated their support for the Intermediate Exchange,
the initiator may proceed with the PQuAKE key exchange.</t>
        <artwork><![CDATA[
Initiator                                             Responder
---------------------------------------------------------------
HDR, SK { PQUAKE_INITIATOR_HELLO } -->

                         <-- HDR, SK { PQUAKE_RESPONDER_HELLO }

HDR, SK { PQUAKE_CERT_EXCHANGE_I } -->

                         <-- HDR, SK { PQUAKE_CERT_EXCHANGE_R }

HDR, SK { PQUAKE_KEY_ENCAP_I } -->

                             <-- HDR, SK { PQUAKE_KEY_ENCAP_R }
]]></artwork>
      </section>
      <section anchor="ikeauth">
        <name>IKE_AUTH</name>
        <t>The last pair of messages (IKE_AUTH) authenticate the previous
messages and establish the first Child SA.</t>
        <artwork><![CDATA[
Initiator                                             Responder
---------------------------------------------------------------
HDR, SK { PQUAKE_KEY_CONFIRMATION_I } -->

                      <-- HDR, SK { PQUAKE_KEY_CONFIRMATION_R }
]]></artwork>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This is a security protocol, and it holds the properties described
in (TODO reference)
in the presence of passive or active attacker on the network.</t>
      <t>One potential concern is the confidentiality of the peers' identities
carried in their certificates.
An active attacker can learn their identities during the certificate
exchange step.
Using a pre-shared secret will prevent disclosure of these certificates,
keeping peers identities confidential.
Since there are costs associated with out-of-band distribution of
that secret, it would be typically shared among the Community of
Interest (CoI). In that case, this protocol would protect peers identities
against active attackers outside of this Community
of Interest, but not against an active attacker that is a member
of CoI.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document defines a new Notify Message Type in the
"IKEv2 Notify Message Types - Status Types" registry:</t>
      <artwork><![CDATA[
<TBA>   PQUAKE_SUPPORTED
]]></artwork>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="IKEV2">
          <front>
            <title>Internet Key Exchange Protocol Version 2 (IKEv2)</title>
            <author fullname="C. Kaufman" initials="C." surname="Kaufman"/>
            <author fullname="P. Hoffman" initials="P." surname="Hoffman"/>
            <author fullname="Y. Nir" initials="Y." surname="Nir"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <author fullname="T. Kivinen" initials="T." surname="Kivinen"/>
            <date month="October" year="2014"/>
            <abstract>
              <t>This document describes version 2 of the Internet Key Exchange (IKE) protocol. IKE is a component of IPsec used for performing mutual authentication and establishing and maintaining Security Associations (SAs). This document obsoletes RFC 5996, and includes all of the errata for it. It advances IKEv2 to be an Internet Standard.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="79"/>
          <seriesInfo name="RFC" value="7296"/>
          <seriesInfo name="DOI" value="10.17487/RFC7296"/>
        </reference>
        <reference anchor="X.509">
          <front>
            <title>Internet X.509 Public Key Infrastructure Certificate and CRL Profile</title>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <author fullname="W. Ford" initials="W." surname="Ford"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <author fullname="D. Solo" initials="D." surname="Solo"/>
            <date month="January" year="1999"/>
            <abstract>
              <t>This memo profiles the X.509 v3 certificate and X.509 v2 CRL for use in the Internet. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2459"/>
          <seriesInfo name="DOI" value="10.17487/RFC2459"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="MQV">
          <front>
            <title>An Efficient Protocol for Authenticated Key Agreement</title>
            <author initials="L." surname="Law" fullname="Laurie Law">
              <organization/>
            </author>
            <author initials="A." surname="Menezes" fullname="Alfred Menezes">
              <organization/>
            </author>
            <author initials="M." surname="Qu" fullname="Minghua Qu">
              <organization/>
            </author>
            <author initials="J." surname="Solinas" fullname="Jerry Solinas">
              <organization/>
            </author>
            <author initials="S." surname="Vanstone" fullname="Scott Vanstone">
              <organization/>
            </author>
            <date year="1998"/>
          </front>
          <seriesInfo name="DOI" value="10.1023/A:1022595222606"/>
        </reference>
        <reference anchor="EAP">
          <front>
            <title>Extensible Authentication Protocol (EAP) Key Management Framework</title>
            <author fullname="B. Aboba" initials="B." surname="Aboba"/>
            <author fullname="D. Simon" initials="D." surname="Simon"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="August" year="2008"/>
            <abstract>
              <t>The Extensible Authentication Protocol (EAP), defined in RFC 3748, enables extensible network access authentication. This document specifies the EAP key hierarchy and provides a framework for the transport and usage of keying material and parameters generated by EAP authentication algorithms, known as "methods". It also provides a detailed system-level security analysis, describing the conditions under which the key management guidelines described in RFC 4962 can be satisfied. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5247"/>
          <seriesInfo name="DOI" value="10.17487/RFC5247"/>
        </reference>
      </references>
    </references>
    <?line 698?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors want to thank Roger Khazan (MIT/LL), Adam Margetts (MIT/LL)
for reviewing this work and giving helpful suggestions.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
RluIzOL9xqKgt5Ug8LL/K53geQtFK7dQ1NTFeheIzJo/PWqqxMZvDsCQpnun
pjLk2PiLbn4PDHWEw1lld/VSiHf3iqR+9+7zwKkMdi/4gN6G6iJ3NG9FWZ0Y
y7Zv4nXXvthsX5j2n6gdfcYMucRaV7y6+tZYIa32Xt2J63Ru/2SwOc3PxCx9
M/1MKGQm60cnLYT0Li9vf4zoRdozVjGltH6BJRCTyhRicijESL8sOcfXWaIp
YXWobJbi4maXGme8vOTmx0k9dGpFG/R30Ov2afLvWjECt+0NNbitVwtA44Eb
xvOMumHbE1+9tfh+bdyxlmdiiubmyCsz9LJxc0Z3Y7k5o7tn35mR6+r5519t
Rpthh3jdraDyil+mSIZsOcOsgFDsYC1nUwUVXgm05GXCvupFu1aR8uYzu52Z
Nx2vCyoybSDYyL6usvNSwqOg4/5didsuP7z+W1L8rSliOscueloWyd96BHhP
mzI/9rojXuoTlj1t2Pxo647Izdo6WlOQB0A4JbKI72nT+JWi1Q2ua67NwjEv
WhDuNY2U3rIRJDbTHhN2YgI+lWpSdk3QcgBaDxNBUwdMXsKQY6oOkmcVq5D8
Ea/00ZoVb9PV+8PCKGLniThmrFffeJcMYinR8Fa7tDCqNJujKjM7Y9rrV1Wp
0nlAc+P1SQq0aFnnKsn09nrGirZ2hAGEgFflXKxhV93Guu6oi+eEkANPMQi5
4AE7XQTas0C+Ms9gwIxIeqDMAp5b2Gut2PHGMwqo6SkR/d4DQ5gsHzsBiYE0
WOY3vK+Kd1SECAN0IAMTnobk1sR8A+2hLa1rUS4Tsynd20vK8ZXWarseqcu7
7iXobcIQli32CJhqraRdt6RN+2Y9ZFcvatj12l55oyKqYOdQ0d49iAtiz2RB
isxL15qhZrU4y7OxkzPzajhiC0Bl3TQxhV//IIHeAUz7rGgh5tYu0VFQ6i1L
ehjd5HXKYSOdbahkqsLSlMvDtd5hYsq1b/bPgtaa+rFdviH5NJtEbWEbIqLj
tWipoiuoY+mUyYbntNuO9xML2u9V6kMKdv+JH5PyfMiY6dVtJ4yEuCDVvVbN
kjRcRsKhr6egvHFrRsVns+mHSakrrHbD0Cte5hRi4uBvKGOp9/dUeg+HWZgk
5eNs8WEne9zufN/pfH9ku23j1SP5WD6RT+Wzn/qdgfzH+Bf+Yygf6Jfd92O/
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
VFvTvu+yXsAkM/EC8X/nU1Vn9lwAAA==

-->

</rfc>
