<?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.6.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wussler-openpgp-pqc-02" category="info" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title abbrev="PQC in OpenPGP">Post-Quantum Cryptography in OpenPGP</title>
    <seriesInfo name="Internet-Draft" value="draft-wussler-openpgp-pqc-02"/>
    <author initials="S." surname="Kousidis" fullname="Stavros Kousidis">
      <organization>BSI</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>stavros.kousidis@bsi.bund.de</email>
      </address>
    </author>
    <author initials="F." surname="Strenzke" fullname="Falko Strenzke">
      <organization>MTG AG</organization>
      <address>
        <postal>
          <country>Germany</country>
        </postal>
        <email>falko.strenzke@mtg.de</email>
      </address>
    </author>
    <author initials="A." surname="Wussler" fullname="Aron Wussler">
      <organization>Proton AG</organization>
      <address>
        <postal>
          <country>Switzerland</country>
        </postal>
        <email>aron@wussler.it</email>
      </address>
    </author>
    <date year="2023" month="July" day="10"/>
    <area>sec</area>
    <workgroup>Network Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 343?>

<t>This document defines a post-quantum public-key algorithm extension for the
OpenPGP protocol. Given the generally assumed threat of a cryptographically
relevant quantum computer, this extension provides a basis for long-term secure
OpenPGP signatures and ciphertexts. Specifically, it defines composite
public-key encryption based on CRYSTALS-Kyber, composite public-key signatures
based on CRYSTALS-Dilithium, both in combination with elliptic curve
cryptography, and SPHINCS+ as a standalone public key signature scheme.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wussler-openpgp-pqc/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        WG Working Group mailing list (<eref target="mailto:openpgp@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/openpgp/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/openpgp/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/openpgp-pqc/draft-openpgp-pqc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 353?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The OpenPGP protocol supports various traditional public-key algorithms based
on the factoring or discrete logarithm problem. As the security of algorithms
based on these mathematical problems is endangered by the advent of quantum
computers, there is a need to extend OpenPGP by algorithms that remain secure
in the presence of quantum computers.</t>
      <t>Such cryptographic algorithms are referred to as post-quantum cryptography.
The algorithms defined in this extension were chosen for standardization by the
National Institute of Standards and Technology (NIST) in mid 2022
<xref target="NISTIR-8413"/> as the result of the NIST Post-Quantum Cryptography
Standardization process initiated in 2016 <xref target="NIST-PQC"/>. Namely, these are
CRYSTALS-Kyber as a Key Encapsulation Mechanism (KEM), a KEM being a modern
building block for public-key encryption, and CRYSTALS-Dilithium as well as
SPHINCS+ as signature schemes.</t>
      <t>For the two CRYSTALS-* schemes, this document follows the conservative strategy
to deploy post-quantum in combination with traditional schemes such that the
security is retained even if all schemes but one in the combination are broken.
In contrast, the hashed-based signature scheme SPHINCS+ is considered to be
sufficiently well understood with respect to its security assumptions in order
to be used standalone. To this end, this document specifies the following new
set: SPHINCS+ standalone and CRYSTALS-* as composite with ECC-based KEM and
digital signature schemes. Here, the term "composite" indicates that any data
structure or algorithm pertaining to the
combination of the two components appears as single data structure or algorithm
from the protocol perspective.</t>
      <t>The document specifies the conventions for interoperability between compliant
OpenPGP implementations that make use of this extension and the newly defined
algorithms or algorithm combinations.</t>
      <section anchor="conventions-used-in-this-document">
        <name>Conventions used in this Document</name>
        <section anchor="terminology-for-multi-algorithm-schemes">
          <name>Terminology for Multi-Algorithm Schemes</name>
          <t>The terminology in this document is oriented towards the definitions in
<xref target="draft-driscoll-pqt-hybrid-terminology"/>. Specifically, the terms
"multi-algorithm", "composite" and "non-composite" are used in correspondence
with the definitions therein. The abbreviation "PQ" is used for post-quantum
schemes. To denote the combination of post-quantum and traditional schemes, the
abbreviation "PQ/T" is used. The short form "PQ(/T)" stands for PQ or PQ/T.</t>
        </section>
      </section>
      <section anchor="post-quantum-cryptography">
        <name>Post-Quantum Cryptography</name>
        <t>This section describes the individual post-quantum cryptographic schemes. All
schemes listed here are believed to provide security in the presence of a
cryptographically relevant quantum computer. However, the mathematical problems
on which the two CRYSTALS-* schemes and SPHINCS+ are based, are fundamentally
different, and accordingly the level of trust commonly placed in them as well
as their performance characteristics vary.</t>
        <t>[Note to the reader: This specification refers to the latest NIST submission
papers of each scheme as if it were a specification. This is a temporary
solution that is owed to the fact that currently no other specification is
available. The goal is to provide a sufficiently precise specification of the
algorithms already at the draft stage of this specification, so that it is
possible for implementers to create interoperable implementations. As soon as
standards by NIST or the IETF for the PQC schemes employed in this
specification are available, these will replace the references to the NIST
submission papers. Furthermore, we want to point out that, depending on
possible changes to the schemes standardized by NIST, this specification may be
updated substantially as soon as corresponding information becomes available.]</t>
        <section anchor="kyber-intro">
          <name>CRYSTALS-Kyber</name>
          <t>CRYSTALS-Kyber <xref target="KYBER-Subm"/> is based on the hardness of solving the
learning-with-errors problem in module lattices (MLWE). The scheme is believed
to provide security against cryptanalytic attacks by classical as well as
quantum computers. This specification defines CRYSTALS-Kyber only in composite
combination with ECC-based encryption schemes in order to provide a pre-quantum
security fallback.</t>
        </section>
        <section anchor="dilithium-intro">
          <name>CRYSTALS-Dilithium</name>
          <t>CRYSTALS-Dilithium, defined in <xref target="DILITHIUM-Subm"/>, is a signature scheme that,
like CRYSTALS-Kyber, is based on the hardness of solving lattice problems in
module lattices. Accordingly, this specification only defines
CRYSTALS-Dilithium in composite combination with ECC-based signature schemes.</t>
        </section>
        <section anchor="sphincs">
          <name>SPHINCS+</name>
          <t>SPHINCS+ <xref target="SPHINCS-Subm"/> is a stateless hash-based signature scheme. Its
security relies on the hardness of finding preimages for cryptographic hash
functions. This feature is generally considered to be a high security
guarantee. Therefore, this specification defines SPHINCS+ as a standalone
signature scheme.</t>
          <t>In deployments the performance characteristics of SPHINCS+ should be taken into
account. We refer to <xref target="performance-considerations"/> for a discussion of the
performance characteristics of this scheme.</t>
        </section>
      </section>
      <section anchor="elliptic-curve-cryptography">
        <name>Elliptic Curve Cryptography</name>
        <t>The ECC-based encryption is defined here as a KEM. This is in contrast to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> where the ECC-based encryption is defined
as a public-key encryption scheme.</t>
        <t>All elliptic curves for the use in the composite combinations are taken from
<xref target="I-D.ietf-openpgp-crypto-refresh"/>. However, as explained in the following, in
the case of Curve25519 encoding changes are applied to the new composite
schemes.</t>
        <section anchor="curve25519-and-curve448">
          <name>Curve25519 and Curve448</name>
          <t>Curve25519 and Curve448 are defined in <xref target="RFC7748"/> for use in a Diffie-Hellman
key agreement scheme and defined in <xref target="RFC8032"/> for use in a digital signature
scheme. For Curve25519 this specification adapts the encoding of objects as
defined in <xref target="RFC7748"/> in contrast to <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
        </section>
        <section anchor="generic-prime-curves">
          <name>Generic Prime Curves</name>
          <t>For interoperability this extension offers CRYSTALS-* in composite combinations
with the NIST curves P-256, P-384 defined in <xref target="SP800-186"/> and the
Brainpool curves brainpoolP256r1, brainpoolP384r1 defined in <xref target="RFC5639"/>.</t>
        </section>
      </section>
      <section anchor="multi-algo-schemes">
        <name>Standalone and Multi-Algorithm Schemes</name>
        <t>This section provides a categorization of the new algorithms and their
combinations.</t>
        <section anchor="composite-multi-alg">
          <name>Standalone and Composite Multi-Algorithm Schemes</name>
          <t>This specification introduces new cryptographic schemes, which can be
categorized as follows:</t>
          <ul spacing="normal">
            <li>PQ/T multi-algorithm public-key encryption, namely a composite combination
of CRYSTALS-Kyber with an ECC-based KEM,</li>
            <li>PQ/T multi-algorithm digital signature, namely composite combinations of
CRYSTALS-Dilithium with ECC-based signature schemes,</li>
            <li>PQ digital signature, namely SPHINCS+ as a standalone cryptographic
algorithm.</li>
          </ul>
          <t>For each of the composite schemes, this specification mandates that the
recipient has to successfully perform the cryptographic algorithms for each of
the component schemes used in a cryptrographic message, in order for the
message to be deciphered and considered as valid. This means that all component
signatures must be verified successfully in order to achieve a successful
verification of the composite signature. In the case of the composite
public-key decryption, each of the component KEM decapsulation operations must
succeed.</t>
        </section>
        <section anchor="non-composite-multi-alg">
          <name>Non-Composite Algorithm Combinations</name>
          <t>As the OpenPGP protocol <xref target="I-D.ietf-openpgp-crypto-refresh"/> allows for multiple
signatures to be applied to a single message, it is also possible to realize
non-composite combinations of signatures. Furthermore, multiple OpenPGP
signatures may be combined on the application layer. These latter two cases
realize non-composite combinations of signatures. <xref target="multiple-signatures"/>
specifies how implementations should handle the verification of such
combinations of signatures.</t>
          <t>Furthermore, the OpenPGP protocol also allows for parallel encryption to
different keys held by the same recipient. Accordingly, if the sender makes use
of this feature and sends an encrypted message with multiple PKESK packages for
different encryption keys held by the same recipient, a non-composite
multi-algorithm public-key encryption is realized where the recipient has to
decrypt only one of the PKESK packages in order to decrypt the message. See
<xref target="no-pq-t-parallel-encryption"/> for restrictions on parallel encryption
mandated by this specification.</t>
        </section>
      </section>
    </section>
    <section anchor="preliminaries">
      <name>Preliminaries</name>
      <t>This section provides some preliminaries for the definitions in the subsequent
sections.</t>
      <section anchor="elliptic-curves">
        <name>Elliptic curves</name>
        <section anchor="sec1-format">
          <name>SEC1 EC Point Wire Format</name>
          <t>Elliptic curve points of the generic prime curves are encoded using the SEC1
(uncompressed) format as the following octet string:</t>
          <artwork><![CDATA[
B = 04 || X || Y
]]></artwork>
          <t>where <tt>X</tt> and <tt>Y</tt> are coordinates of the elliptic curve point <tt>P = (X, Y)</tt>, and
each coordinate is encoded in the big-endian format and zero-padded to the
adjusted underlying field size. The adjusted underlying field size is the
underlying field size rounded up to the nearest 8-bit boundary, as noted in the
"Field size" column in <xref target="tab-ecdh-nist-artifacts"/>,
<xref target="tab-ecdh-brainpool-artifacts"/>, or <xref target="tab-ecdsa-artifacts"/>. This encoding is
compatible with the definition given in <xref target="SEC1"/>.</t>
        </section>
        <section anchor="measures-to-ensure-secure-implementations">
          <name>Measures to Ensure Secure Implementations</name>
          <t>In the following measures are described that ensure secure implementations
according to existing best practices and standards defining the operations of
Elliptic Curve Cryptography.</t>
          <t>Even though the zero point, also called the point at infinity, may occur as a
result of arithmetic operations on points of an elliptic curve, it MUST NOT
appear in any ECC data structure defined in this document.</t>
          <t>Furthermore, when performing the explicitly listed operations in
<xref target="x25519-kem"/>, <xref target="x448-kem"/> or <xref target="ecdh-kem"/> it is REQUIRED to follow the
specification and security advisory mandated from the respective elliptic curve specification.</t>
        </section>
      </section>
    </section>
    <section anchor="supported-public-key-algorithms">
      <name>Supported Public Key Algorithms</name>
      <t>This section specifies the composite Kyber + ECC and Dilithium + ECC schemes as
well as the standalone SPHINCS+ signature scheme. The composite schemes are
fully specified via their algorithm ID. The SPHINCS+ signature schemes are
fully specified by their algorithm ID and an additional parameter ID.</t>
      <section anchor="algorithm-specifications">
        <name>Algorithm Specifications</name>
        <t>For encryption, the following composite KEM schemes are specified:</t>
        <table anchor="kem-alg-specs">
          <name>KEM algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">29</td>
              <td align="left">Kyber768  + X25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">30</td>
              <td align="left">Kyber1024 + X448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">31</td>
              <td align="left">Kyber768  + ECDH-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">32</td>
              <td align="left">Kyber1024 + ECDH-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">33</td>
              <td align="left">Kyber768  + ECDH-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
            <tr>
              <td align="right">34</td>
              <td align="left">Kyber1024 + ECDH-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-kyber"/></td>
            </tr>
          </tbody>
        </table>
        <t>For signatures, the following (composite) signature schemes are specified:</t>
        <table anchor="sig-alg-specs">
          <name>Signature algorithm specifications</name>
          <thead>
            <tr>
              <th align="right">ID</th>
              <th align="left">Algorithm</th>
              <th align="left">Requirement</th>
              <th align="left">Definition</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">35</td>
              <td align="left">Dilithium3 + Ed25519</td>
              <td align="left">MUST</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">36</td>
              <td align="left">Dilithium5 + Ed448</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">37</td>
              <td align="left">Dilithium3 + ECDSA-NIST-P-256</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">38</td>
              <td align="left">Dilithium5 + ECDSA-NIST-P-384</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">39</td>
              <td align="left">Dilithium3 + ECDSA-brainpoolP256r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">40</td>
              <td align="left">Dilithium5 + ECDSA-brainpoolP384r1</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="ecc-dilithium"/></td>
            </tr>
            <tr>
              <td align="right">41</td>
              <td align="left">SPHINCS+-simple-SHA2</td>
              <td align="left">SHOULD</td>
              <td align="left">
                <xref target="sphincs"/></td>
            </tr>
            <tr>
              <td align="right">42</td>
              <td align="left">SPHINCS+-simple-SHAKE</td>
              <td align="left">MAY</td>
              <td align="left">
                <xref target="sphincs"/></td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="parameter-specification">
        <name>Parameter Specification</name>
        <section anchor="sphincs-simple-sha2">
          <name>SPHINCS+-simple-SHA2</name>
          <t>For the SPHINCS+-simple-SHA2 signature algorithm from <xref target="sig-alg-specs"/>, the
following parameters are specified:</t>
          <table anchor="sphincs-param-sha2">
            <name>SPHINCS+-simple-SHA2 security parameters</name>
            <thead>
              <tr>
                <th align="right">Parameter ID</th>
                <th align="left">Parameter</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">1</td>
                <td align="left">SPHINCS+-simple-SHA2-128s</td>
              </tr>
              <tr>
                <td align="right">2</td>
                <td align="left">SPHINCS+-simple-SHA2-128f</td>
              </tr>
              <tr>
                <td align="right">3</td>
                <td align="left">SPHINCS+-simple-SHA2-192s</td>
              </tr>
              <tr>
                <td align="right">4</td>
                <td align="left">SPHINCS+-simple-SHA2-192f</td>
              </tr>
              <tr>
                <td align="right">5</td>
                <td align="left">SPHINCS+-simple-SHA2-256s</td>
              </tr>
              <tr>
                <td align="right">6</td>
                <td align="left">SPHINCS+-simple-SHA2-256f</td>
              </tr>
            </tbody>
          </table>
          <t>All security parameters inherit the requirement of SPHINCS+-simple-SHA2 from
<xref target="sig-alg-specs"/>. That is, implementations SHOULD implement the parameters
specified in <xref target="sphincs-param-sha2"/>. The values <tt>0x00</tt> and <tt>0xFF</tt> are reserved
for future extensions.</t>
        </section>
        <section anchor="sphincs-simple-shake">
          <name>SPHINCS+-simple-SHAKE</name>
          <t>For the SPHINCS+-simple-SHAKE signature algorithm from <xref target="sig-alg-specs"/>, the
following parameters are specified:</t>
          <table anchor="sphincs-param-shake">
            <name>SPHINCS+-simple-SHAKE security parameters</name>
            <thead>
              <tr>
                <th align="right">Parameter ID</th>
                <th align="left">Parameter</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">1</td>
                <td align="left">SPHINCS+-simple-SHAKE-128s</td>
              </tr>
              <tr>
                <td align="right">2</td>
                <td align="left">SPHINCS+-simple-SHAKE-128f</td>
              </tr>
              <tr>
                <td align="right">3</td>
                <td align="left">SPHINCS+-simple-SHAKE-192s</td>
              </tr>
              <tr>
                <td align="right">4</td>
                <td align="left">SPHINCS+-simple-SHAKE-192f</td>
              </tr>
              <tr>
                <td align="right">5</td>
                <td align="left">SPHINCS+-simple-SHAKE-256s</td>
              </tr>
              <tr>
                <td align="right">6</td>
                <td align="left">SPHINCS+-simple-SHAKE-256f</td>
              </tr>
            </tbody>
          </table>
          <t>All security parameters inherit the requirement of SPHINCS+-simple-SHAKE from
<xref target="sig-alg-specs"/>. That is, implementations MAY implement the parameters
specified in <xref target="sphincs-param-shake"/>. The values <tt>0x00</tt> and <tt>0xFF</tt> are reserved
for future extensions.</t>
        </section>
      </section>
    </section>
    <section anchor="algorithm-combinations">
      <name>Algorithm Combinations</name>
      <section anchor="composite-kems">
        <name>Composite KEMs</name>
        <t>Kyber + ECC public-key encryption is meant to involve both the Kyber KEM and an
ECC-based KEM in an a priori non-separable manner. This is achieved via KEM
combination, i.e. both key encapsulations/decapsulations are performed in
parallel, and the resulting key shares are fed into a key combiner to produce a
single shared secret for message encryption.</t>
      </section>
      <section anchor="no-pq-t-parallel-encryption">
        <name>Parallel Public-Key Encryption</name>
        <t>As explained in <xref target="non-composite-multi-alg"/>, the OpenPGP protocol inherently
supports parallel encryption to different keys of the same recipient.
Implementations MUST NOT encrypt a message with a purely traditional public-key
encryption key of a recipient if it is encrypted with a PQ/T key of the same
recipient.</t>
      </section>
      <section anchor="composite-signatures">
        <name>Composite Signatures</name>
        <t>Dilithium + ECC signatures are meant to contain both the Dilithium and the ECC
signature data, and an implementation MUST validate both algorithms to state
that a signature is valid.</t>
      </section>
      <section anchor="multiple-signatures">
        <name>Multiple Signatures</name>
        <t>The OpenPGP message format allows multiple signatures of a message, i.e. the
attachment of multiple signature packets.</t>
        <t>An implementation MAY sign a message with a traditional key and a PQ(/T) key
from the same sender. This ensures backwards compatibility due to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5, since a legacy
implementation without PQ(/T) support can fall back on the traditional
signature.</t>
        <t>Newer implementations with PQ(/T) support MAY ignore the traditional
signature(s) during validation.</t>
        <t>Implementations SHOULD consider the message correctly signed if at least one of
the non-ignored signatures validates successfully.</t>
        <t>[Note to the reader: The last requirement, that one valid signature is
sufficient to identify a message as correctly signed, is an interpretation of
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.5.]</t>
      </section>
    </section>
    <section anchor="composite-kem-schemes">
      <name>Composite KEM schemes</name>
      <section anchor="building-blocks">
        <name>Building Blocks</name>
        <section anchor="ecc-kem">
          <name>ECC-Based KEMs</name>
          <t>In this section we define the encryption, decryption, and data formats for the
ECDH component of the composite algorithms.</t>
          <t><xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, and
<xref target="tab-ecdh-brainpool-artifacts"/> describe the ECC-KEM parameters and artifact
lengths. The artefacts in <xref target="tab-ecdh-cfrg-artifacts"/> follow the encodings
described in <xref target="RFC7748"/>.</t>
          <table anchor="tab-ecdh-cfrg-artifacts">
            <name>Montgomery curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">X25519</th>
                <th align="left">X448</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">29</td>
                <td align="left">30</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">56 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">x25519Kem (<xref target="x25519-kem"/>)</td>
                <td align="left">x448Kem (<xref target="x448-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">32 octets <xref target="RFC7748"/></td>
                <td align="left">56 octets <xref target="RFC7748"/></td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-nist-artifacts">
            <name>NIST curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">NIST P-256</th>
                <th align="left">NIST P-384</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">31</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">65 octets of SEC1-encoded shared point</td>
                <td align="left">97 octets of SEC1-encoded shared point</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <table anchor="tab-ecdh-brainpool-artifacts">
            <name>Brainpool curves parameters and artifact lengths</name>
            <thead>
              <tr>
                <th align="left"> </th>
                <th align="left">brainpoolP256r1</th>
                <th align="left">brainpoolP384r1</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="left">Algorithm ID reference</td>
                <td align="left">33</td>
                <td align="left">34</td>
              </tr>
              <tr>
                <td align="left">Field size</td>
                <td align="left">32 octets</td>
                <td align="left">48 octets</td>
              </tr>
              <tr>
                <td align="left">ECC-KEM</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
                <td align="left">ecdhKem (<xref target="ecdh-kem"/>)</td>
              </tr>
              <tr>
                <td align="left">ECDH public key</td>
                <td align="left">65 octets of SEC1-encoded public point</td>
                <td align="left">97 octets of SEC1-encoded public point</td>
              </tr>
              <tr>
                <td align="left">ECDH secret key</td>
                <td align="left">32 octets big-endian encoded secret scalar</td>
                <td align="left">48 octets big-endian encoded secret scalar</td>
              </tr>
              <tr>
                <td align="left">ECDH ephemeral</td>
                <td align="left">65 octets of SEC1-encoded ephemeral point</td>
                <td align="left">97 octets of SEC1-encoded ephemeral point</td>
              </tr>
              <tr>
                <td align="left">ECDH share</td>
                <td align="left">65 octets of SEC1-encoded shared point</td>
                <td align="left">97 octets of SEC1-encoded shared point</td>
              </tr>
              <tr>
                <td align="left">Key share</td>
                <td align="left">32 octets</td>
                <td align="left">64 octets</td>
              </tr>
              <tr>
                <td align="left">Hash</td>
                <td align="left">SHA3-256</td>
                <td align="left">SHA3-512</td>
              </tr>
            </tbody>
          </table>
          <t>The SEC1 format for point encoding is defined in <xref target="sec1-format"/>.</t>
          <t>The various procedures to perform the operations of an ECC-based KEM are
defined in the following subsections. Specifically, each of these subsections
defines the instances of the following operations:</t>
          <artwork><![CDATA[
(eccCipherText, eccKeyShare) <- eccKem.encap(eccPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(eccKeyShare) <- eccKem.decap(eccPrivateKey, eccCipherText)
]]></artwork>
          <t>The placeholder <tt>eccKem</tt> has to be replaced with the specific ECC-KEM from the
row "ECC-KEM" of <xref target="tab-ecdh-cfrg-artifacts"/>, <xref target="tab-ecdh-nist-artifacts"/>, and
<xref target="tab-ecdh-brainpool-artifacts"/>.</t>
          <section anchor="x25519-kem">
            <name>X25519-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x25519kem</tt> are described
using the function <tt>X25519()</tt> and encodings defined in <xref target="RFC7748"/>. The
<tt>eccPrivateKey</tt> is denoted as <tt>r</tt>, the <tt>eccPublicKey</tt> as <tt>R</tt>, they are subject
to the equation <tt>R = X25519(r, U(P))</tt>. Here, <tt>U(P)</tt> denotes the u-coordinate of
the base point of Curve25519.</t>
            <t>The operation <tt>x25519Kem.encap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X25519(v,U(P))</tt> where <tt>v</tt>
is a random scalar</li>
              <li>Compute the shared coordinate <tt>X = X25519(v, R)</tt> where <tt>R</tt> is the public key
<tt>eccPublicKey</tt></li>
              <li>Set the output <tt>eccCipherText</tt> to <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-256(X || eccCipherText || eccPublicKey)</tt></li>
            </ol>
            <t>The operation <tt>x25519Kem.decap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared coordinate <tt>X = X25519(r, V)</tt>, where <tt>r</tt> is the
<tt>eccPrivateKey</tt> and <tt>V</tt> is the <tt>eccCipherText</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-256(X || eccCipherText || eccPublicKey)</tt></li>
            </ol>
          </section>
          <section anchor="x448-kem">
            <name>X448-KEM</name>
            <t>The encapsulation and decapsulation operations of <tt>x448kem</tt> are described using
the function <tt>X448()</tt> and encodings defined in <xref target="RFC7748"/>. The <tt>eccPrivateKey</tt>
is denoted as <tt>r</tt>, the <tt>eccPublicKey</tt> as <tt>R</tt>, they are subject to the equation
<tt>R = X25519(r, U(P))</tt>. Here, <tt>U(P)</tt> denotes the u-coordinate of the base point
of Curve448.</t>
            <t>The operation <tt>x448.encap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V</tt>} via <tt>V = X448(v,U(P))</tt> where <tt>v</tt>
is a random scalar</li>
              <li>Compute the shared coordinate <tt>X = X448(v, R)</tt> where <tt>R</tt> is the public key
<tt>eccPublicKey</tt></li>
              <li>Set the output <tt>eccCipherText</tt> to <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-512(X || eccCipherText || eccPublicKey)</tt></li>
            </ol>
            <t>The operation <tt>x448Kem.decap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared coordinate <tt>X = X448(r, V)</tt>, where <tt>r</tt> is the
<tt>eccPrivateKey</tt> and <tt>V</tt> is the <tt>eccCipherText</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>SHA3-512(X || eccCipherText || eccPublicKey)</tt></li>
            </ol>
          </section>
          <section anchor="ecdh-kem">
            <name>ECDH-KEM</name>
            <t>The operation <tt>ecdhKem.encap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Generate an ephemeral key pair {<tt>v</tt>, <tt>V=vG</tt>} as defined in
<xref target="SP800-186"/> or <xref target="RFC5639"/> where <tt>v</tt> is a random scalar</li>
              <li>Compute the shared point <tt>S = vR</tt>, where <tt>R</tt> is the component public key
<tt>eccPublicKey</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></li>
              <li>Extract the <tt>X</tt> coordinate from the SEC1 encoded point <tt>S = 04 || X || Y</tt>
as defined in section <xref target="sec1-format"/></li>
              <li>Set the output <tt>eccCipherText</tt> to the SEC1 encoding of <tt>V</tt></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>Hash(X || eccCipherText || eccPublicKey)</tt>, with <tt>Hash</tt>
chosen according to <xref target="tab-ecdh-nist-artifacts"/> or
<xref target="tab-ecdh-brainpool-artifacts"/></li>
            </ol>
            <t>The operation <tt>ecdhKem.decap()</tt> is defined as follows:</t>
            <ol spacing="normal" type="1"><li>Compute the shared Point <tt>S</tt> as <tt>rV</tt>, where <tt>r</tt> is the <tt>eccPrivateKey</tt> and
<tt>V</tt> is the <tt>eccCipherText</tt>, according to <xref target="SP800-186"/> or <xref target="RFC5639"/></li>
              <li>Extract the <tt>X</tt> coordinate from the SEC1 encoded point <tt>S = 04 || X || Y</tt>
as defined in section <xref target="sec1-format"/></li>
              <li>Set the output <tt>eccKeyShare</tt> to <tt>Hash(X || eccCipherText || eccPublicKey)</tt>, with <tt>Hash</tt>
chosen according to <xref target="tab-ecdh-nist-artifacts"/> or
<xref target="tab-ecdh-brainpool-artifacts"/></li>
            </ol>
          </section>
        </section>
        <section anchor="kyber-kem">
          <name>Kyber-KEM</name>
          <t>Kyber-KEM features the following operations:</t>
          <artwork><![CDATA[
(kyberCipherText, kyberKeyShare) <- kyberKem.encap(kyberPublicKey)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(kyberKeyShare) <- kyberKem.decap(kyberCipherText, kyberPrivateKey)
]]></artwork>
          <t>The above are the operations Kyber.CCAKEM.Enc() and Kyber.CCAKEM.Dec() defined
in <xref target="KYBER-Subm"/>.</t>
          <t>Kyber-KEM has the parameterization with the corresponding artifact lengths in
octets as given in <xref target="tab-kyber-artifacts"/>. All artifacts are encoded as
defined in <xref target="KYBER-Subm"/>.</t>
          <table anchor="tab-kyber-artifacts">
            <name>Kyber-KEM parameters artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Kyber-KEM</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Ciphertext</th>
                <th align="left">Key share</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">29, 31, 33</td>
                <td align="left">kyberKem768</td>
                <td align="left">1184</td>
                <td align="left">2400</td>
                <td align="left">1088</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">30, 32, 34</td>
                <td align="left">kyberKem1024</td>
                <td align="left">1568</td>
                <td align="left">3186</td>
                <td align="left">1568</td>
                <td align="left">32</td>
              </tr>
            </tbody>
          </table>
          <t>The placeholder <tt>kyberKem</tt> has to be replaced with the specific Kyber-KEM from
the column "Kyber-KEM" of <xref target="tab-kyber-artifacts"/>.</t>
          <t>The procedure to perform <tt>kyberKem.encap()</tt> is as follows:</t>
          <ol spacing="normal" type="1"><li>Extract the component public key <tt>kyberPublicKey</tt> that is part of the
recipient's composite public key</li>
            <li>Invoke <tt>(kyberCipherText, keyShare) &lt;- kyberKem.encap(kyberPublicKey)</tt></li>
            <li>Set <tt>kyberCipherText</tt> as the Kyber ciphertext</li>
            <li>Set <tt>keyShare</tt> as the Kyber symmetric key share</li>
          </ol>
          <t>The procedure to perform <tt>kyberKem.decap()</tt> is as follows:</t>
          <ol spacing="normal" type="1"><li>Invoke <tt>keyShare &lt;-  kyberKem.decap(kyberCipherText, kyberPrivateKey)</tt></li>
            <li>Set <tt>keyShare</tt> as the Kyber symmetric key</li>
          </ol>
        </section>
      </section>
      <section anchor="ecc-kyber">
        <name>Composite Encryption Schemes with Kyber</name>
        <t><xref target="kem-alg-specs"/> specifies the following Kyber + ECC composite public-key
encryption schemes:</t>
        <table anchor="tab-kyber-ecc-composite">
          <name>Kyber-ECC-composite Schemes</name>
          <thead>
            <tr>
              <th align="right">Algorithm ID reference</th>
              <th align="left">Kyber-KEM</th>
              <th align="left">ECC-KEM</th>
              <th align="left">ECDH-KEM curve</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">29</td>
              <td align="left">kyberKem768</td>
              <td align="left">x25519Kem</td>
              <td align="left">X25519</td>
            </tr>
            <tr>
              <td align="right">30</td>
              <td align="left">kyberKem1024</td>
              <td align="left">x448Kem</td>
              <td align="left">X448</td>
            </tr>
            <tr>
              <td align="right">31</td>
              <td align="left">kyberKem768</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-256</td>
            </tr>
            <tr>
              <td align="right">32</td>
              <td align="left">kyberKem1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">NIST P-384</td>
            </tr>
            <tr>
              <td align="right">33</td>
              <td align="left">kyberKem768</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP256r1</td>
            </tr>
            <tr>
              <td align="right">34</td>
              <td align="left">kyberKem1024</td>
              <td align="left">ecdhKem</td>
              <td align="left">brainpoolP384r1</td>
            </tr>
          </tbody>
        </table>
        <t>The Kyber + ECC composite public-key encryption schemes are built according to
the following principal design:</t>
        <ul spacing="normal">
          <li>The Kyber-KEM encapsulation algorithm is invoked to create a Kyber
ciphertext together with a Kyber symmetric key share.</li>
          <li>The encapsulation algorithm of an ECC-based KEM, namely one out of
X25519-KEM, X448-KEM, or ECDH-KEM is invoked to create an ECC ciphertext
together with an ECC symmetric key share.</li>
          <li>A Key-Encryption-Key (KEK) is computed as the output of a key combiner that
receives as input both of the above created symmetric key shares and the
protocol binding information.</li>
          <li>The session key for content encryption is then wrapped as described in
<xref target="RFC3394"/> using AES-256 as algorithm and the KEK as key.</li>
          <li>The PKESK package's algorithm-specific parts are made up of the Kyber
ciphertext, the ECC ciphertext, and the wrapped session key.</li>
        </ul>
        <section anchor="kem-fixed-info">
          <name>Fixed information</name>
          <t>For the composite KEM schemes defined in <xref target="kem-alg-specs"/> the following
procedure, justified in <xref target="sec-fixed-info"/>, MUST be used to derive a string to
use as binding between the KEK and the communication parties.</t>
          <artwork><![CDATA[
//   Input:
//   algID     - the algorithm ID encoded as octet

fixedInfo = algID
]]></artwork>
          <t>SHA3-256 MUST be used to hash the <tt>publicKey</tt> of the recipient.</t>
        </section>
        <section anchor="kem-key-combiner">
          <name>Key combiner</name>
          <t>For the composite KEM schemes defined in <xref target="kem-alg-specs"/> the following
procedure MUST be used to compute the KEK that wraps a session key. The
construction is a one-step key derivation function compliant to <xref target="SP800-56C"/>
Section 4, based on KMAC256 <xref target="SP800-185"/>. It is given by the following
algorithm.</t>
          <artwork><![CDATA[
//   multiKeyCombine(eccKeyShare, eccCipherText,
//                   kyberKeyShare, kyberCipherText,
//                   fixedInfo, oBits)
//
//   Input:
//   eccKeyShare     - the ECC key share encoded as an octet string
//   eccCipherText   - the ECC ciphertext encoded as an octet string
//   kyberKeyShare   - the Kyber key share encoded as an octet string
//   kyberCipherText - the Kyber ciphertext encoded as an octet string
//   fixedInfo       - the fixed information octet string
//   oBits           - the size of the output keying material in bits
//
//   Constants:
//   domSeparation       - the UTF-8 encoding of the string
//                         "OpenPGPCompositeKeyDerivationFunction"
//   counter             - the fixed 4 byte value 0x00000001
//   customizationString - the UTF-8 encoding of the string "KDF"

eccKemData = eccKeyShare || eccCipherText
kyberKemData = kyberKeyShare || kyberCipherText
encData = counter || eccKemData || kyberKemData || fixedInfo

MB = KMAC256(domSeparation, encData, oBits, customizationString)
]]></artwork>
          <t>Note that the values <tt>eccKeyShare</tt> defined in <xref target="ecc-kem"/> and <tt>kyberKeyShare</tt>
defined in <xref target="kyber-kem"/> already use the relative ciphertext in the
derivation. The ciphertext is by design included again in the key combiner to
provide a robust security proof.</t>
          <t>The value of <tt>domSeparation</tt> is the UTF-8 encoding of the string
"OpenPGPCompositeKeyDerivationFunction" and MUST be the following octet sequence:</t>
          <artwork><![CDATA[
domSeparation := 4F 70 65 6E 50 47 50 43 6F 6D 70 6F 73 69 74 65
                 4B 65 79 44 65 72 69 76 61 74 69 6F 6E 46 75 6E
                 63 74 69 6F 6E
]]></artwork>
          <t>The value of <tt>counter</tt> MUST be set to the following octet sequence:</t>
          <artwork><![CDATA[
counter :=  00 00 00 01
]]></artwork>
          <t>The value of <tt>fixedInfo</tt> MUST be set according to <xref target="kem-fixed-info"/>.</t>
          <t>The value of <tt>customizationString</tt> is the UTF-8 encoding of the string "KDF"
and MUST be set to the following octet sequence:</t>
          <artwork><![CDATA[
customizationString := 4B 44 46
]]></artwork>
        </section>
        <section anchor="ecc-kyber-generation">
          <name>Key generation procedure</name>
          <t>The implementation MUST independently generate the Kyber and the ECC component
keys. Kyber key generation follows the specification <xref target="KYBER-Subm"/> and the
artifacts are encoded as fixed-length octet strings. For ECC this is done
following the relative specification in <xref target="RFC7748"/>, <xref target="SP800-186"/>, or
<xref target="RFC5639"/>, and encoding the outputs as fixed-length octet strings in the
format specified in table <xref target="tab-ecdh-cfrg-artifacts"/>,
<xref target="tab-ecdh-nist-artifacts"/>, or <xref target="tab-ecdh-brainpool-artifacts"/>.</t>
        </section>
        <section anchor="ecc-kyber-encryption">
          <name>Encryption procedure</name>
          <t>The procedure to perform public-key encryption with a Kyber + ECC composite
scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>Take the recipient's authenticated public-key packet <tt>pkComposite</tt> and
<tt>sessionKey</tt> as input</li>
            <li>Parse the algorithm ID from <tt>pkComposite</tt></li>
            <li>Extract the <tt>eccPublicKey</tt> and <tt>kyberPublicKey</tt> component from the
algorithm specific data encoded in <tt>pkComposite</tt> with the format specified
in <xref target="kyber-ecc-key"/>.</li>
            <li>Instantiate the ECC-KEM <tt>eccKem.encap()</tt> and the Kyber-KEM
<tt>kyberKem.encap()</tt> depending on the algorithm ID according to
<xref target="tab-kyber-ecc-composite"/></li>
            <li>Compute <tt>(eccCipherText, eccKeyShare) := eccKem.encap(eccPublicKey)</tt></li>
            <li>Compute <tt>(kyberCipherText, kyberKeyShare) :=
kyberKem.encap(kyberPublicKey)</tt></li>
            <li>Compute <tt>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></li>
            <li>Compute <tt>KEK := multiKeyCombine(eccKeyShare, eccCipherText, kyberKeyShare, kyberCipherText, fixedInfo, oBits=256)</tt> as
defined in <xref target="kem-key-combiner"/></li>
            <li>Compute <tt>C := AESKeyWrap(KEK, sessionKey)</tt> with AES-256 as per <xref target="RFC3394"/>
that includes a 64 bit integrity check</li>
            <li>Output <tt>eccCipherText || kyberCipherText || len(C) || C</tt></li>
          </ol>
        </section>
        <section anchor="decryption-procedure">
          <name>Decryption procedure</name>
          <t>The procedure to perform public-key decryption with a Kyber + ECC composite
scheme is as follows:</t>
          <ol spacing="normal" type="1"><li>Take the matching PKESK and own secret key packet as input</li>
            <li>From the PKESK extract the algorithm ID and the <tt>encryptedKey</tt></li>
            <li>Check that the own and the extracted algorithm ID match</li>
            <li>Parse the <tt>eccSecretKey</tt> and <tt>kyberSecretKey</tt> from the algorithm specific
data of the own secret key encoded in the format specified in
<xref target="kyber-ecc-key"/></li>
            <li>Instantiate the ECC-KEM <tt>eccKem.decap()</tt> and the Kyber-KEM
<tt>kyberKem.decap()</tt> depending on the algorithm ID according to
<xref target="tab-kyber-ecc-composite"/></li>
            <li>Parse <tt>eccCipherText</tt>, <tt>kyberCipherText</tt>, and <tt>C</tt> from <tt>encryptedKey</tt>
encoded as <tt>eccCipherText || kyberCipherText || len(C) || C</tt> as specified
in <xref target="ecc-kyber-pkesk"/></li>
            <li>Compute <tt>(eccKeyShare) := eccKem.decap(eccCipherText, eccPrivateKey)</tt></li>
            <li>Compute <tt>(kyberKeyShare) := kyberKem.decap(kyberCipherText,
kyberPrivateKey)</tt></li>
            <li>Compute <tt>fixedInfo</tt> as specified in <xref target="kem-fixed-info"/></li>
            <li>Compute <tt>KEK := multiKeyCombine(eccKeyShare, eccCipherText, kyberKeyShare, kyberCipherText, fixedInfo, oBits=256)</tt>
as defined in <xref target="kem-key-combiner"/></li>
            <li>Compute <tt>sessionKey := AESKeyUnwrap(KEK, C)</tt>  with AES-256 as per
<xref target="RFC3394"/>, aborting if the 64 bit integrity check fails</li>
            <li>Output <tt>sessionKey</tt></li>
          </ol>
        </section>
      </section>
      <section anchor="packet-specifications">
        <name>Packet specifications</name>
        <section anchor="ecc-kyber-pkesk">
          <name>Public-Key Encrypted Session Key Packets (Tag 1)</name>
          <t>The algorithm-specific fields consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing an ECC ephemeral public key in the
format associated with the curve as specified in <xref target="ecc-kem"/>.</li>
            <li>A fixed-length octet string of the Kyber ciphertext, whose length depends on
the algorithm ID as specified in <xref target="tab-kyber-artifacts"/>.</li>
            <li>The one-octet algorithm identifier, if it was passed (in the case of a v3 PKESK packet).</li>
            <li>
              <t>A variable-length field containing the wrapped session key:  </t>
              <ul spacing="normal">
                <li>A one-octet size of the following field;</li>
                <li>The wrapped session key represented as an octet string, i.e.,
the output of the encryption procedure described in
<xref target="ecc-kyber-encryption"/>.</li>
              </ul>
            </li>
          </ul>
          <t>Note that unlike most public-key algorithms, in the case of a v3 PKESK packet, the symmetric algorithm identifier is not encrypted.
Instead, it is prepended to the encrypted session key in plaintext.
In this case, the symmetric algorithm used MUST be AES-128, AES-192 or AES-256 (algorithm ID 7, 8 or 9).</t>
        </section>
        <section anchor="kyber-ecc-key">
          <name>Key Material Packets</name>
          <t>The algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing an EC point public key, in the
point format associated with the curve specified in <xref target="ecc-kem"/>.</li>
            <li>A fixed-length octet string containing the Kyber public key, whose length
depends on the algorithm ID as specified in <xref target="tab-kyber-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific secret key is these two values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string of the encoded secret scalar, whose encoding and
length depend on the algorithm ID as specified in <xref target="ecc-kem"/>.</li>
            <li>A fixed-length octet string containing the Kyber secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-kyber-artifacts"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="composite-signature-schemes">
      <name>Composite Signature Schemes</name>
      <section anchor="building-blocks-1">
        <name>Building blocks</name>
        <section anchor="eddsa-signature">
          <name>EdDSA-Based signatures</name>
          <t>To sign and verify with EdDSA the following operations are defined:</t>
          <artwork><![CDATA[
(eddsaSignature) <- eddsa.sign(eddsaPrivateKey, dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- eddsa.verify(eddsaPublicKey, eddsaSignature, dataDigest)
]]></artwork>
          <t>The public and private keys, as well as the signature MUST be encoded according
to <xref target="RFC8032"/> as fixed-length octet strings. The following table describes the
EdDSA parameters and artifact lengths:</t>
          <table anchor="tab-eddsa-artifacts">
            <name>EdDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35</td>
                <td align="left">Ed25519</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">64</td>
              </tr>
              <tr>
                <td align="right">36</td>
                <td align="left">Ed448</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">57</td>
                <td align="left">114</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="ecdsa-signature">
          <name>ECDSA-Based signatures</name>
          <t>To sign and verify with ECDSA the following operations are defined:</t>
          <artwork><![CDATA[
(ecdsaSignatureR, ecdsaSignatureS) <- ecdsa.sign(ecdsaPrivateKey,
                                                 dataDigest)
]]></artwork>
          <t>and</t>
          <artwork><![CDATA[
(verified) <- ecdsa.verify(ecdsaPublicKey, ecdsaSignatureR,
                           ecdsaSignatureS, dataDigest)
]]></artwork>
          <t>The public keys MUST be encoded in SEC1 format as defined in section
<xref target="sec1-format"/>. The secret key, as well as both values <tt>R</tt> and <tt>S</tt> of the
signature MUST each be encoded as a big-endian integer in a fixed-length octet
string of the specified size.</t>
          <t>The following table describes the ECDSA parameters and artifact lengths:</t>
          <table anchor="tab-ecdsa-artifacts">
            <name>ECDSA parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Curve</th>
                <th align="left">Field size</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature value R</th>
                <th align="left">Signature value S</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">37</td>
                <td align="left">NIST P-256</td>
                <td align="left">32</td>
                <td align="left">65</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">38</td>
                <td align="left">NIST P-384</td>
                <td align="left">48</td>
                <td align="left">97</td>
                <td align="left">48</td>
                <td align="left">48</td>
                <td align="left">48</td>
              </tr>
              <tr>
                <td align="right">39</td>
                <td align="left">brainpoolP256r1</td>
                <td align="left">32</td>
                <td align="left">65</td>
                <td align="left">32</td>
                <td align="left">32</td>
                <td align="left">32</td>
              </tr>
              <tr>
                <td align="right">40</td>
                <td align="left">brainpoolP384r1</td>
                <td align="left">48</td>
                <td align="left">97</td>
                <td align="left">48</td>
                <td align="left">48</td>
                <td align="left">48</td>
              </tr>
            </tbody>
          </table>
        </section>
        <section anchor="dilithium-signature">
          <name>Dilithium signatures</name>
          <t>The procedure for Dilithium signature generation is the function <tt>Sign(sk, M)</tt>
given in Figure 4 in <xref target="DILITHIUM-Subm"/>, where <tt>sk</tt> is the Dilithium private key
and <tt>M</tt> is the data to be signed. OpenPGP does not use the optional randomized
signing given as a variant in the definition of this function, i.e. <tt>rho' :=
H(K || mu)</tt> is used. The signing function returns the Dilithium signature. That
is, to sign with Dilithium the following operation is defined:</t>
          <artwork><![CDATA[
(dilithiumSignature) <- dilithium.sign(dilithiumPrivateKey,
                                       dataDigest)
]]></artwork>
          <t>The procedure for Dilithium signature verification is the function <tt>Verify(pk,
M, sigma)</tt> given in Figure 4 in <xref target="DILITHIUM-Subm"/>, where <tt>pk</tt> is the Dilithium
public key, <tt>M</tt> is the data to be signed and <tt>sigma</tt> is the Dilithium
signature. That is, to verify with Dilithium the following operation is
defined:</t>
          <artwork><![CDATA[
(verified) <- dilithium.verify(dilithiumPublicKey, dataDigest,
                               dilithiumSignature)
]]></artwork>
          <t>Dilithium has the parameterization with the corresponding artifact lengths in
octets as given in <xref target="tab-dilithium-artifacts"/>. All artifacts are encoded as
defined in <xref target="DILITHIUM-Subm"/>.</t>
          <table anchor="tab-dilithium-artifacts">
            <name>Dilithium parameters and artifact lengths in octets</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Dilithium instance</th>
                <th align="left">Public key</th>
                <th align="left">Secret key</th>
                <th align="left">Signature value</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">35, 37, 39</td>
                <td align="left">Dilithium3</td>
                <td align="left">1952</td>
                <td align="left">4000</td>
                <td align="left">3293</td>
              </tr>
              <tr>
                <td align="right">36, 38, 40</td>
                <td align="left">Dilithium5</td>
                <td align="left">2592</td>
                <td align="left">4864</td>
                <td align="left">4595</td>
              </tr>
            </tbody>
          </table>
        </section>
      </section>
      <section anchor="ecc-dilithium">
        <name>Composite Signature Schemes with Dilithium</name>
        <section anchor="binding-hashes">
          <name>Binding hashes</name>
          <t>Composite Dilithium + ECC signatures MUST use SHA3-256 (hash algorithm ID 12)
or SHA3-512 (hash algorithm ID 14) as hashing algorithm. Signatures using other
hash algorithms MUST be considered invalid.</t>
          <t>An implementation MUST support SHA3-256 and SHOULD support SHA3-512, in
order to support the hash binding with Dilithium + ECC signatures.</t>
        </section>
        <section anchor="ecc-dilithium-generation">
          <name>Key generation procedure</name>
          <t>The implementation MUST independently generate the Dilithium and the ECC
component keys. Dilithium key generation follows the specification in
<xref target="DILITHIUM-Subm"/> and the artifacts are encoded as fixed-length octet strings as
defined in <xref target="dilithium-signature"/>. For ECC this is done following the relative
specification in <xref target="RFC7748"/>, <xref target="SP800-186"/>, or <xref target="RFC5639"/>, and encoding the
artifacts as specified in <xref target="eddsa-signature"/> or <xref target="ecdsa-signature"/> as
fixed-length octet strings.</t>
        </section>
        <section anchor="signature-generation">
          <name>Signature Generation</name>
          <t>To sign a message <tt>M</tt> with Dilithium + EdDSA the following sequence of
operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.2.4</li>
            <li>Create the EdDSA signature over <tt>dataDigest</tt> with <tt>eddsa.sign()</tt> from
<xref target="eddsa-signature"/></li>
            <li>Create the Dilithium signature over <tt>dataDigest</tt> with <tt>dilithium.sign()</tt>
from <xref target="dilithium-signature"/></li>
            <li>Encode the EdDSA and Dilithium signatures according to the packet
structure given in <xref target="ecc-dilithium-sig-packet"/>.</li>
          </ol>
          <t>To sign a message <tt>M</tt> with Dilithium + ECDSA the following sequence of
operations has to be performed:</t>
          <ol spacing="normal" type="1"><li>Generate <tt>dataDigest</tt> according to <xref target="I-D.ietf-openpgp-crypto-refresh"/>
Section 5.2.4</li>
            <li>Create the ECDSA signature over <tt>dataDigest</tt> with <tt>ecdsa.sign()</tt> from
<xref target="ecdsa-signature"/></li>
            <li>Create the Dilithium signature over <tt>dataDigest</tt> with <tt>dilithium.sign()</tt>
from <xref target="dilithium-signature"/></li>
            <li>Encode the ECDSA and Dilithium signatures according to the packet
structure given in <xref target="ecc-dilithium-sig-packet"/>.</li>
          </ol>
        </section>
        <section anchor="signature-verification">
          <name>Signature Verification</name>
          <t>To verify a Dilithium + EdDSA signature the following sequence of operations
has to be performed:</t>
          <ol spacing="normal" type="1"><li>Verify the EdDSA signature with <tt>eddsa.verify()</tt> from <xref target="eddsa-signature"/></li>
            <li>Verify the Dilithium signature with <tt>dilithium.verify()</tt> from
<xref target="dilithium-signature"/></li>
          </ol>
          <t>To verify a Dilithium + ECDSA signature the following sequence of operations
has to be performed:</t>
          <ol spacing="normal" type="1"><li>Verify the ECDSA signature with <tt>ecdsa.verify()</tt> from <xref target="ecdsa-signature"/></li>
            <li>Verify the Dilithium signature with <tt>dilithium.verify()</tt> from
<xref target="dilithium-signature"/></li>
          </ol>
          <t>As specified in <xref target="composite-signatures"/> an implementation MUST validate both
signatures, i.e. EdDSA/ECDSA and Dilithium, to state that a composite Dilithium
+ ECC signature is valid.</t>
        </section>
      </section>
      <section anchor="packet-specifications-1">
        <name>Packet Specifications</name>
        <section anchor="ecc-dilithium-sig-packet">
          <name>Signature Packet (Tag 2)</name>
          <t>The composite Dilithium + ECC schemes MUST be used only with v6 signatures, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v6 signature parameters for Dilithium + EdDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA signature, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</li>
            <li>A fixed-length octet string of the Dilithium signature value, whose length
depends on the algorithm ID as specified in <xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific v6 signature parameters for Dilithium + ECDSA signatures
consists of:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string of the big-endian encoded ECDSA value <tt>R</tt>, whose
length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string of the big-endian encoded ECDSA value <tt>S</tt>, whose
length depends on the algorithm ID as specified in <xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string of the Dilithium signature value, whose length
depends on the algorithm ID as specified in <xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
        </section>
        <section anchor="key-material-packets">
          <name>Key Material Packets</name>
          <t>The composite Dilithium + ECC schemes MUST be used only with v6 keys, as
defined in <xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key for Dilithium + EdDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA public key, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium public key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific private key for Dilithium + EdDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the EdDSA secret key, whose length
depends on the algorithm ID as specified in <xref target="tab-eddsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium secret key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific public key for Dilithium + ECDSA keys is this
series of values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the ECDSA public key in SEC1
format, as specified in section <xref target="sec1-format"/> and with length specified in
<xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium public key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
          <t>The algorithm-specific private key for Dilithium + ECDSA keys is this series of
values:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string representing the ECDSA secret key as a
big-endian encoded integer, whose length depends on the algorithm used as
specified in <xref target="tab-ecdsa-artifacts"/>.</li>
            <li>A fixed-length octet string containing the Dilithium secret key, whose
length depends on the algorithm ID as specified in
<xref target="tab-dilithium-artifacts"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="sphincs-1">
      <name>SPHINCS+</name>
      <section anchor="algo-sphincs">
        <name>The SPHINCS+ Algorithms</name>
        <t>The following table describes the SPHINCS+ parameters and artifact lengths:</t>
        <table anchor="sphincs-artifact-lengths">
          <name>SPHINCS+ parameters and artifact lengths in octets. The values equally apply to the parameter IDs of SPHINCS+-simple-SHA2 and SPHINCS+-simple-SHAKE.</name>
          <thead>
            <tr>
              <th align="right">Parameter ID reference</th>
              <th align="right">Parameter name suffix</th>
              <th align="left">SPHINCS+ public key</th>
              <th align="left">SPHINCS+ secret key</th>
              <th align="left">SPHINCS+ signature</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="right">1</td>
              <td align="right">128s</td>
              <td align="left">32</td>
              <td align="left">64</td>
              <td align="left">7856</td>
            </tr>
            <tr>
              <td align="right">2</td>
              <td align="right">128f</td>
              <td align="left">32</td>
              <td align="left">64</td>
              <td align="left">17088</td>
            </tr>
            <tr>
              <td align="right">3</td>
              <td align="right">192s</td>
              <td align="left">48</td>
              <td align="left">96</td>
              <td align="left">16224</td>
            </tr>
            <tr>
              <td align="right">4</td>
              <td align="right">192f</td>
              <td align="left">48</td>
              <td align="left">96</td>
              <td align="left">35664</td>
            </tr>
            <tr>
              <td align="right">5</td>
              <td align="right">256s</td>
              <td align="left">64</td>
              <td align="left">128</td>
              <td align="left">29792</td>
            </tr>
            <tr>
              <td align="right">6</td>
              <td align="right">256f</td>
              <td align="left">64</td>
              <td align="left">128</td>
              <td align="left">49856</td>
            </tr>
          </tbody>
        </table>
        <section anchor="binding-hashes-1">
          <name>Binding hashes</name>
          <t>SPHINCS+ signature packets MUST use the associated hash as specified in
<xref target="tab-sphincs-hash"/>. Signature packets using other hashes MUST be considered
invalid.</t>
          <table anchor="tab-sphincs-hash">
            <name>Binding between SPHINCS+ and signature hashes</name>
            <thead>
              <tr>
                <th align="right">Algorithm ID reference</th>
                <th align="left">Parameter ID reference</th>
                <th align="left">Hash function</th>
                <th align="left">Hash function ID reference</th>
              </tr>
            </thead>
            <tbody>
              <tr>
                <td align="right">41</td>
                <td align="left">1, 2</td>
                <td align="left">SHA-256</td>
                <td align="left">8</td>
              </tr>
              <tr>
                <td align="right">41</td>
                <td align="left">3, 4, 5, 6</td>
                <td align="left">SHA-512</td>
                <td align="left">10</td>
              </tr>
              <tr>
                <td align="right">42</td>
                <td align="left">1, 2</td>
                <td align="left">SHA3-256</td>
                <td align="left">12</td>
              </tr>
              <tr>
                <td align="right">42</td>
                <td align="left">3, 4, 5, 6</td>
                <td align="left">SHA3-512</td>
                <td align="left">14</td>
              </tr>
            </tbody>
          </table>
          <t>An implementation supporting a specific SPHINCS+ algorithm and parameter MUST
also support the matching hash algorithm.</t>
        </section>
        <section anchor="key-generation">
          <name>Key generation</name>
          <t>The SPHINCS+ key generation is performed according to the function
<tt>spx_keygen()</tt> specified in <xref target="SPHINCS-Subm"/>, Sec. 6.2 as Alg. 19. The private
and public key are encoded as defined in <xref target="SPHINCS-Subm"/>.</t>
        </section>
        <section anchor="signature-generation-1">
          <name>Signature Generation</name>
          <t>The procedure for SPHINCS+ signature generation is the function <tt>spx_sign(M,
SK)</tt> specified in <xref target="SPHINCS-Subm"/>, Sec. 6.4 as Alg. 20.  Here, <tt>M</tt> is the
<tt>dataDigest</tt> generated according to <xref target="I-D.ietf-openpgp-crypto-refresh"/> Section
5.2.4 and <tt>SK</tt> is the SPHINCS+ private key. The global variable <tt>RANDOMIZE</tt>
specified in Alg. 20 is to be considered as not set, i.e. the variable <tt>opt</tt>
shall be initialized with <tt>PK.seed</tt>. See also <xref target="sphincs-sec-cons"/>.</t>
          <t>An implementation MUST set the Parameter ID in the signature equal to the
issuing private key Parameter ID.</t>
        </section>
        <section anchor="signature-verification-1">
          <name>Signature Verification</name>
          <t>The procedure for SPHINCS+ signature verification is the function
<tt>spx_verify(M, SIG, PK)</tt> specified in <xref target="SPHINCS-Subm"/>, Sec. 6.5 as Alg. 21.
Here, <tt>M</tt> is the <tt>dataDigest</tt> generated according to
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.4, <tt>SIG</tt> is the signature, and
<tt>PK</tt> is the SPHINCS+ public key.</t>
          <t>An implementation MUST check that the Parameter ID in the signature and in the
key match when verifying.</t>
        </section>
      </section>
      <section anchor="packet-specifications-2">
        <name>Packet specifications</name>
        <section anchor="signature-packet-tag-2">
          <name>Signature Packet (Tag 2)</name>
          <t>The SPHINCS+ algorithms MUST be used only with v6 signatures, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/> Section 5.2.3.</t>
          <t>The algorithm-specific v6 Signature parameters consists of:</t>
          <ul spacing="normal">
            <li>A one-octet value specifying the SPHINCS+ parameter ID defined in
<xref target="sphincs-param-sha2"/> and <xref target="sphincs-param-shake"/>. The values <tt>0x00</tt> and
<tt>0xFF</tt> are reserved for future extensions.</li>
            <li>A fixed-length octet string of the SPHINCS+ signature value, whose length
depends on the parameter ID in the format specified in
<xref target="sphincs-artifact-lengths"/>.</li>
          </ul>
        </section>
        <section anchor="key-material-packets-1">
          <name>Key Material Packets</name>
          <t>The SPHINCS+ algorithms MUST be used only with v6 keys, as defined in
<xref target="I-D.ietf-openpgp-crypto-refresh"/>.</t>
          <t>The algorithm-specific public key is this series of values:</t>
          <ul spacing="normal">
            <li>A one-octet value specifying the SPHINCS+ parameter ID defined in
<xref target="sphincs-param-sha2"/> and <xref target="sphincs-param-shake"/>. The values <tt>0x00</tt> and
<tt>0xFF</tt> are reserved for future extensions.</li>
            <li>A fixed-length octet string containing the SPHINCS+ public key, whose length
depends on the parameter ID as specified in <xref target="sphincs-artifact-lengths"/>.</li>
          </ul>
          <t>The algorithm-specific private key is this value:</t>
          <ul spacing="normal">
            <li>A fixed-length octet string containing the SPHINCS+ secret key, whose length
depends on the parameter ID as specified in <xref target="tab-ecdsa-artifacts"/>.</li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="migration-considerations">
      <name>Migration Considerations</name>
      <t>The post-quantum KEM algorithms defined in <xref target="kem-alg-specs"/> and the signature
algorithms defined in <xref target="sig-alg-specs"/> are a set of new public key algorithms
that extend the algorithm selection of <xref target="I-D.ietf-openpgp-crypto-refresh"/>.
During the transition period, the post-quantum algorithms will not be supported
by all clients. Therefore various migration considerations must be taken into
account, in particular backwards compatibility to existing implementations that
have not yet been updated to support the post-quantum algorithms.</t>
      <section anchor="key-preference">
        <name>Key preference</name>
        <t>Implementations SHOULD prefer PQ(/T) keys when multiple options are available.</t>
        <t>For instance, if encrypting for a recipient for which both a valid PQ/T and a
valid ECC certificate are available, the implementation SHOULD choose the PQ/T
certificate. In case a certificate has both a PQ/T and an ECC
encryption-capable valid subkey, the PQ/T subkey SHOULD be preferred.</t>
        <t>An implementation MAY sign with both a PQ(/T) and an ECC key using multiple
signatures over the same data as described in <xref target="multiple-signatures"/>.
Signing only with PQ(/T) key material is not backwards compatible.</t>
        <t>Note that the confidentiality of a message is not post-quantum secure when
encrypting to multiple recipients if at least one recipient does not support
PQ/T encryption schemes. An implementation SHOULD NOT abort the encryption
process in this case to allow for a smooth transition to post-quantum
cryptography.</t>
      </section>
      <section anchor="key-generation-strategies">
        <name>Key generation strategies</name>
        <t>It is REQUIRED to generate fresh secrets when generating PQ(/T) keys. Reusing
key material from existing ECC keys in PQ(/T) keys does not provide backwards
compatibility, and the fingerprint will differ.</t>
        <t>An OpenPGP (v6) certificate is composed of a certification-capable primary key
and one or more subkeys for signature, encryption, and authentication.
Two migration strategies are recommended:</t>
        <ol spacing="normal" type="1"><li>Generate two independent certificates, one for PQ(/T)-capable
implementations, and one for legacy implementations. Implementations not
understanding PQ(/T) certificates can use the legacy certificate, while
PQ(/T)-capable implementations will prefer the newer certificate. This allows
having an older v4 or v6 ECC certificate for compatibility and a v6 PQ(/T)
certificate, at a greater complexity in key distribution.</li>
          <li>Attach PQ(/T) encryption and signature subkeys to an existing v6 ECC
certificate. Implementations understanding PQ(/T) will be able to parse and use
the subkeys, while PQ(/T)-incapable implementations can gracefully ignore them.
This simplifies key distribution, as only one certificate needs to be
communicated and verified, but leaves the primary key vulnerable to quantum
computer attacks.</li>
        </ol>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <section anchor="hashing-in-ecc-kem">
        <name>Hashing in ECC-KEM</name>
        <t>Our construction of the ECC-KEMs, in particular the inclusion of
<tt>eccCipherText</tt> in the final hashing step in encapsulation and decapsulation
that produces the <tt>eccKeyShare</tt>, is standard and known as hashed ElGamal key
encapsulation, a hashed variant of ElGamal encryption. It ensures IND-CCA2
security in the random oracle model under some Diffie-Hellman intractability
assumptions <xref target="CS03"/>. The additional inclusion of <tt>eccPublicKey</tt> follows the
security advice in Section 6.1 of <xref target="RFC7748"/>.</t>
      </section>
      <section anchor="sec-key-combiner">
        <name>Key combiner</name>
        <t>For the key combination in <xref target="kem-key-combiner"/> this specification limits
itself to the use of KMAC. The sponge construction used by KMAC was proven to
be indifferentiable from a random oracle <xref target="BDPA08"/>. This means, that in
contrast to SHA2, which uses a Merkle-Damgard construction, no HMAC-based
construction is required for key combination. Except for a domain separation it
is sufficient to simply process the concatenation of any number of key shares
when using a sponge-based construction like KMAC. The construction using KMAC
ensures a standardized domain separation. In this case, the processed message
is then the concatenation of any number of key shares.</t>
        <t>More precisely, for a given capacity <tt>c</tt> the indifferentiability proof shows
that assuming there are no weaknesses found in the Keccak permutation, an
attacker has to make an expected number of <tt>2^(c/2)</tt> calls to the permutation
to tell KMAC from a random oracle. For a random oracle, a difference in only a
single bit gives an unrelated, uniformly random output. Hence, to be able to
distinguish a key <tt>K</tt>, derived from shared keys <tt>K1</tt> and <tt>K2</tt> (and ciphertexts
<tt>C1</tt> and <tt>C2</tt>) as</t>
        <artwork><![CDATA[
K = KMAC(domainSeparation, counter || K1 || C1 || K2 || C2 || fixedInfo,
         outputBits, customization)
]]></artwork>
        <t>from a random bit string, an adversary has to know (or correctly guess) both
key shares <tt>K1</tt> and <tt>K2</tt>, entirely.</t>
        <t>The proposed construction in <xref target="kem-key-combiner"/> preserves IND-CCA2 of any of
its ingredient KEMs, i.e. the newly formed combined KEM is IND-CCA2 secure as
long as at least one of the ingredient KEMs is. Indeed, the above stated
indifferentiability from a random oracle qualifies Keccak as a split-key
pseudorandom function as defined in <xref target="GHP18"/>. That is, Keccak behaves like a
random function if at least one input shared secret is picked uniformly at
random. Our construction can thus be seen as an instantiation of the IND-CCA2
preserving Example 3 in Figure 1 of <xref target="GHP18"/>, up to some reordering of input
shared secrets and ciphertexts. In the random oracle setting, the reordering
does not influence the arguments in <xref target="GHP18"/>.</t>
      </section>
      <section anchor="sec-fixed-info">
        <name>Domain separation and binding</name>
        <t>The <tt>domSeparation</tt> information defined in <xref target="kem-key-combiner"/> provides the
domain separation for the key combiner construction. This ensures that the
input keying material is used to generate a KEK for a specific purpose or
context.</t>
        <t>The <tt>fixedInfo</tt> defined in <xref target="kem-fixed-info"/> binds the derived KEK to the
chosen algorithm and communication parties. The algorithm ID identifies
univocally the algorithm, the parameters for its instantiation, and the length
of all artifacts, including the derived key.</t>
        <t>This is in line with the Recommendation for ECC in section 5.5 of
<xref target="SP800-56A"/>. Other fields included in the recommendation are not relevant
for the OpenPGP protocol, since the sender is not required to have a key of
their own, there are no pre-shared secrets, and all the other parameters are
univocally defined by the algorithm ID.</t>
        <t>Furthermore, we do not require the recipients public key into the key combiner
as the public key material is already included in the component key derivation
functions.
Given two KEMs which we assume to be multi-user secure, we combine their outputs
using a KEM-combiner:</t>
        <artwork><![CDATA[
K = H(K1, C1, K2, C2), C = (C1, C2)
]]></artwork>
        <t>Our aim is to preserve multi-user security. A common approach to this is to add
the public key into the key derivation for K. However, it turns out that this is
not necessary here. To break security of the combined scheme in the multi-user
setting, the adversary has to distinguish a set of challenge keys</t>
        <t>K<em>_u = H(K1</em>_u, C1<em>_u, K2</em>_u, C2*_u)</t>
        <t>for users u in some set from random, also given ciphertexts <tt>C*_u = (C1*_u,
C2*_u)</tt>.
For each of these K* it holds that if the adversary never makes a query</t>
        <artwork><![CDATA[
H(K1*_u, C1*_u, K2*_u, C2*_u)
]]></artwork>
        <t>they have a zero advantage over guessing.</t>
        <t>The only multi-user advantage that the adversary could gain therefore consists
of queries to H that are meaningful for two different users u1 != u2 and their
associated public keys.
This is only the case if</t>
        <artwork><![CDATA[
(c1*_u1, c2*_u1) = (c1*_u2, c2*_u2)
]]></artwork>
        <t>as the ciphertext values decide for which challenge the query is meaningful.
This means that a ciphertext collision is needed between challenges.
Assuming that the randomness used in the generation of the two challenges is
uncorrelated, this is negligible.</t>
        <t>In consequence, the ciphertexts already work sufficiently well as
domain-separator.</t>
      </section>
      <section anchor="sphincs-sec-cons">
        <name>SPHINCS+</name>
        <t>The original specification of SPHINCS+ <xref target="SPHINCS-Subm"/> prescribes an optional
randomized hashing. This is not used in this specification, as OpenPGP v6
signatures already provide a salted hash of the appropriate size.</t>
      </section>
      <section anchor="binding-hashes-in-signatures-with-signature-algorithms">
        <name>Binding hashes in signatures with signature algorithms</name>
        <t>In order not to extend the attack surface, we bind the hash algorithm used for
message digestion to the hash algorithm used internally by the signature
algorithm. Dilithium internally uses a SHAKE256 digest, therefore we require
SHA3 in the Dilithium + ECC signature packet. In the case of SPHINCS+ the
internal hash algorithm varies based on the algorithm and parameter ID.</t>
      </section>
    </section>
    <section anchor="additional-considerations">
      <name>Additional considerations</name>
      <section anchor="performance-considerations">
        <name>Performance Considerations for SPHINCS+</name>
        <t>This specification introduces both Dilithium + ECC as well as SPHINCS+ as
PQ(/T) signature schemes.</t>
        <t>Generally, it can be said that Dilithium + ECC provides a performance in terms
of execution time and space requirements that is close to that of traditional
ECC signature schemes. Implementers may want to offer SPHINCS+ for applications
where a higher degree of trust in the signature scheme is required. However,
SPHINCS+ has performance characteristics in terms of execution time of the
signature generation as well as space requirements for the signature that can
be, depending on the parameter choice, far greater than those of traditional or
Dilithium + ECC signature schemes.</t>
        <t>Pertaining to the execution time, the particularly costly operation in SPHINCS+
is the signature generation. In order to achieve short signature generation
times, one of the parameter sets with the name ending in the letter "f" for
"fast" should be chosen. This comes at the expense of a larger signature size.</t>
        <t>In order to minimize the space requirements of a SPHINCS+ signature, a
parameter set ending in "s" for "small" should be chosen. This comes at the
expense of a larger signature generation time.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>IANA will add the following registries to the <tt>Pretty Good Privacy (PGP)</tt>
registry group at https://www.iana.org/assignments/pgp-parameters:</t>
      <ul spacing="normal">
        <li>
          <t>Registry name: <tt>SPHINCS+-simple-SHA2 parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
Values defined in this document, <xref target="sphincs-param-sha2"/>.</t>
        </li>
        <li>
          <t>Registry name: <tt>SPHINCS+-simple-SHAKE parameters</tt>  </t>
          <t>
Registration procedure: SPECIFICATION REQUIRED <xref target="RFC8126"/>  </t>
          <t>
Values defined in this document, <xref target="sphincs-param-shake"/>.</t>
        </li>
      </ul>
      <t>Furthermore IANA will add the algorithm IDs defined in <xref target="kem-alg-specs"/> and
<xref target="sig-alg-specs"/> to the  registry <tt>Public Key Algorithms</tt>.</t>
    </section>
    <section anchor="contributors">
      <name>Contributors</name>
      <t>Stephan Ehlen (BSI)<br/>
Carl-Daniel Hailfinger (BSI)<br/>
Andreas Huelsing (TU Eindhoven)<br/>
Johannes Roth (MTG AG)</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC3394">
          <front>
            <title>Advanced Encryption Standard (AES) Key Wrap Algorithm</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="September" year="2002"/>
          </front>
          <seriesInfo name="RFC" value="3394"/>
          <seriesInfo name="DOI" value="10.17487/RFC3394"/>
        </reference>
        <reference anchor="RFC8126">
          <front>
            <title>Guidelines for Writing an IANA Considerations Section in RFCs</title>
            <author fullname="M. Cotton" initials="M." surname="Cotton"/>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <author fullname="T. Narten" initials="T." surname="Narten"/>
            <date month="June" year="2017"/>
            <abstract>
              <t>Many protocols make use of points of extensibility that use constants to identify various protocol parameters. To ensure that the values in these fields do not have conflicting uses and to promote interoperability, their allocations are often coordinated by a central record keeper. For IETF protocols, that role is filled by the Internet Assigned Numbers Authority (IANA).</t>
              <t>To make assignments in a given registry prudently, guidance describing the conditions under which new values should be assigned, as well as when and how modifications to existing values can be made, is needed. This document defines a framework for the documentation of these guidelines by specification authors, in order to assure that the provided guidance for the IANA Considerations is clear and addresses the various issues that are likely in the operation of a registry.</t>
              <t>This is the third edition of this document; it obsoletes RFC 5226.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="26"/>
          <seriesInfo name="RFC" value="8126"/>
          <seriesInfo name="DOI" value="10.17487/RFC8126"/>
        </reference>
        <reference anchor="I-D.ietf-openpgp-crypto-refresh">
          <front>
            <title>OpenPGP</title>
            <author fullname="Paul Wouters" initials="P." surname="Wouters">
              <organization>Aiven</organization>
            </author>
            <author fullname="Daniel Huigens" initials="D." surname="Huigens">
              <organization>Proton AG</organization>
            </author>
            <author fullname="Justus Winter" initials="J." surname="Winter">
              <organization>Sequoia-PGP</organization>
            </author>
            <author fullname="Niibe Yutaka" initials="N." surname="Yutaka">
              <organization>FSIJ</organization>
            </author>
            <date day="21" month="June" year="2023"/>
            <abstract>
              <t>   This document specifies the message formats used in OpenPGP.  OpenPGP
   provides encryption with public-key or symmetric cryptographic
   algorithms, digital signatures, compression and key management.

   This document is maintained in order to publish all necessary
   information needed to develop interoperable applications based on the
   OpenPGP format.  It is not a step-by-step cookbook for writing an
   application.  It describes only the format and methods needed to
   read, check, generate, and write conforming packets crossing any
   network.  It does not deal with storage and implementation questions.
   It does, however, discuss implementation issues necessary to avoid
   security flaws.

   This document obsoletes: RFC 4880 (OpenPGP), RFC 5581 (Camellia in
   OpenPGP) and RFC 6637 (Elliptic Curves in OpenPGP).

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-openpgp-crypto-refresh-10"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="RFC5639">
          <front>
            <title>Elliptic Curve Cryptography (ECC) Brainpool Standard Curves and Curve Generation</title>
            <author fullname="M. Lochter" initials="M." surname="Lochter"/>
            <author fullname="J. Merkle" initials="J." surname="Merkle"/>
            <date month="March" year="2010"/>
            <abstract>
              <t>This memo proposes several elliptic curve domain parameters over finite prime fields for use in cryptographic applications. The domain parameters are consistent with the relevant international standards, and can be used in X.509 certificates and certificate revocation lists (CRLs), for Internet Key Exchange (IKE), Transport Layer Security (TLS), XML signatures, and all applications or protocols based on the cryptographic message syntax (CMS). This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5639"/>
          <seriesInfo name="DOI" value="10.17487/RFC5639"/>
        </reference>
        <reference anchor="NIST-PQC" target="https://csrc.nist.gov/projects/post-quantum-cryptography/post-quantum-cryptography-standardization">
          <front>
            <title>Post-Quantum Cryptography Standardization</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="Y." surname="Liu" fullname="Yi-Kai Liu">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
        </reference>
        <reference anchor="NISTIR-8413" target="https://doi.org/10.6028/NIST.IR.8413-upd1">
          <front>
            <title>Status Report on the Third Round of the NIST Post-Quantum Cryptography Standardization Process</title>
            <author initials="G." surname="Alagic" fullname="Gorjan Alagic">
              <organization/>
            </author>
            <author initials="D." surname="Apon" fullname="Daniel Apon">
              <organization/>
            </author>
            <author initials="D." surname="Cooper" fullname="David Cooper">
              <organization/>
            </author>
            <author initials="Q." surname="Dang" fullname="Quynh Dang">
              <organization/>
            </author>
            <author initials="T." surname="Dang" fullname="Thinh Dang">
              <organization/>
            </author>
            <author initials="J." surname="Kelsey" fullname="John Kelsay">
              <organization/>
            </author>
            <author initials="J." surname="Lichtinger" fullname="Jacob Lichtinger">
              <organization/>
            </author>
            <author initials="C." surname="Miller" fullname="Carl Miller">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="R." surname="Peralta" fullname="Rene Peralta">
              <organization/>
            </author>
            <author initials="R." surname="Perlner" fullname="Ray Perlner">
              <organization/>
            </author>
            <author initials="A." surname="Robinson" fullname="Angela Robinson">
              <organization/>
            </author>
            <author initials="D." surname="Smith-Tone" fullname="Daniel Smith-Tone">
              <organization/>
            </author>
            <author initials="Y." surname="Liu" fullname="Yi-Kai Liu">
              <organization/>
            </author>
            <date year="2022" month="September"/>
          </front>
          <seriesInfo name="NIST IR 8413" value=""/>
        </reference>
        <reference anchor="SP800-56C" target="https://doi.org/10.6028/NIST.SP.800-56Cr2">
          <front>
            <title>Recommendation for Key-Derivation Methods in Key-Establishment Schemes</title>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2020" month="August"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-56C Rev. 2" value=""/>
        </reference>
        <reference anchor="SP800-185" target="https://doi.org/10.6028/NIST.SP.800-185">
          <front>
            <title>SHA-3 Derived Functions: cSHAKE, KMAC, TupleHash, and ParallelHash</title>
            <author initials="J." surname="Kelsey" fullname="John Kelsey">
              <organization/>
            </author>
            <author initials="S." surname="Chang" fullname="Shu-jen Chang">
              <organization/>
            </author>
            <author initials="R." surname="Perlner" fullname="Ray Perlner">
              <organization/>
            </author>
            <date year="2016" month="December"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-185" value=""/>
        </reference>
        <reference anchor="SP800-56A" target="https://doi.org/10.6028/NIST.SP.800-56Ar3">
          <front>
            <title>Recommendation for Pair-Wise Key-Establishment Schemes Using Discrete Logarithm Cryptography</title>
            <author initials="E." surname="Barker" fullname="Elaine Barker">
              <organization/>
            </author>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="A." surname="Roginsky" fullname="Allen Roginsky">
              <organization/>
            </author>
            <author initials="A." surname="Vassilev" fullname="Apostol Vassilev">
              <organization/>
            </author>
            <author initials="R." surname="Davis" fullname="Richard Davis">
              <organization/>
            </author>
            <date year="2018" month="April"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-56A Rev. 3" value=""/>
        </reference>
        <reference anchor="SP800-186" target="https://doi.org/10.6028/NIST.SP.800-186">
          <front>
            <title>Recommendations for Discrete Logarithm-Based Cryptography:  Elliptic Curve Domain Parameters</title>
            <author initials="L." surname="Chen" fullname="Lily Chen">
              <organization/>
            </author>
            <author initials="D." surname="Moody" fullname="Dustin Moody">
              <organization/>
            </author>
            <author initials="A." surname="Regenscheid" fullname="Andrew Regenscheid">
              <organization/>
            </author>
            <author initials="K." surname="Randall" fullname="Karen Randall">
              <organization/>
            </author>
            <date year="2023" month="February"/>
          </front>
          <seriesInfo name="NIST Special Publication 800-186" value=""/>
        </reference>
        <reference anchor="SEC1" target="https://secg.org/sec1-v2.pdf">
          <front>
            <title>Standards for Efficient Cryptography 1 (SEC 1)</title>
            <author>
              <organization>Standards for Efficient Cryptography Group</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
        <reference anchor="KYBER-Subm">
          <front>
            <title>CRYSTALS-Kyber (version 3.02) - Submission to round 3 of the NIST post-quantum project</title>
            <author initials="R." surname="Avanzi">
              <organization/>
            </author>
            <author initials="J." surname="Bos">
              <organization/>
            </author>
            <author initials="L." surname="Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky">
              <organization/>
            </author>
            <author initials="J. M." surname="Schanck">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehle">
              <organization/>
            </author>
            <date year="2021" month="August" day="04"/>
          </front>
        </reference>
        <reference anchor="DILITHIUM-Subm">
          <front>
            <title>CRYSTALS-Dilithium - Algorithm Specifications and Supporting Documentation (Version 3.1)</title>
            <author initials="L." surname="Ducas">
              <organization/>
            </author>
            <author initials="E." surname="Kiltz">
              <organization/>
            </author>
            <author initials="T." surname="Lepoint">
              <organization/>
            </author>
            <author initials="V." surname="Lyubashevsky">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="G." surname="Seiler">
              <organization/>
            </author>
            <author initials="D." surname="Stehle">
              <organization/>
            </author>
            <date year="2021" month="February" day="08"/>
          </front>
        </reference>
        <reference anchor="SPHINCS-Subm">
          <front>
            <title>SPHINCS+ - Submission to the 3rd round of the NIST post-quantum project. v3.1</title>
            <author initials="J." surname="Aumasson">
              <organization/>
            </author>
            <author initials="D. J." surname="Bernstein">
              <organization/>
            </author>
            <author initials="W." surname="Beullens">
              <organization/>
            </author>
            <author initials="C." surname="Dobraunig">
              <organization/>
            </author>
            <author initials="M." surname="Eichlseder">
              <organization/>
            </author>
            <author initials="S." surname="Fluhrer">
              <organization/>
            </author>
            <author initials="S." surname="Gazdag">
              <organization/>
            </author>
            <author initials="A." surname="Huelsing">
              <organization/>
            </author>
            <author initials="P." surname="Kampanakis">
              <organization/>
            </author>
            <author initials="S." surname="Koelb">
              <organization/>
            </author>
            <author initials="T." surname="Lange">
              <organization/>
            </author>
            <author initials="M. M." surname="Lauridsen">
              <organization/>
            </author>
            <author initials="F." surname="Mendel">
              <organization/>
            </author>
            <author initials="R." surname="Niederhagen">
              <organization/>
            </author>
            <author initials="C." surname="Rechberger">
              <organization/>
            </author>
            <author initials="J." surname="Rijneveld">
              <organization/>
            </author>
            <author initials="P." surname="Schwabe">
              <organization/>
            </author>
            <author initials="B." surname="Westerbaan">
              <organization/>
            </author>
            <date year="2021" month="June" day="10"/>
          </front>
        </reference>
        <reference anchor="draft-driscoll-pqt-hybrid-terminology" target="https://datatracker.ietf.org/doc/html/draft-driscoll-pqt-hybrid-terminology">
          <front>
            <title>Terminology for Post-Quantum Traditional Hybrid Schemes</title>
            <author initials="F." surname="Driscoll" fullname="Florence Driscoll">
              <organization/>
            </author>
            <date year="2023" month="March"/>
          </front>
        </reference>
        <reference anchor="GHP18" target="https://doi.org/10.1007/978-3-319-76578-5_7">
          <front>
            <title>KEM Combiners</title>
            <author initials="F." surname="Giacon" fullname="Federico Giacon">
              <organization/>
            </author>
            <author initials="F." surname="Heuer" fullname="Felix Heuer">
              <organization/>
            </author>
            <author initials="B." surname="Poettering" fullname="Bertram Poettering">
              <organization/>
            </author>
            <date year="2018"/>
          </front>
        </reference>
        <reference anchor="BDPA08" target="https://doi.org/10.1007/978-3-540-78967-3_11">
          <front>
            <title>On the Indifferentiability of the Sponge Construction</title>
            <author initials="G." surname="Bertoni" fullname="Guido Bertoni">
              <organization/>
            </author>
            <author initials="J." surname="Daemen" fullname="Joan Daemen">
              <organization/>
            </author>
            <author initials="M." surname="Peters" fullname="Michael Peters">
              <organization/>
            </author>
            <author initials="G." surname="Assche" fullname="Gilles van Assche">
              <organization/>
            </author>
            <date year="2008"/>
          </front>
        </reference>
        <reference anchor="CS03" target="https://doi.org/10.1137/S0097539702403773">
          <front>
            <title>Design and Analysis of Practical Public-Key Encryption Schemes Secure against Adaptive Chosen Ciphertext Attack</title>
            <author initials="R." surname="Cramer" fullname="Ronald Cramer">
              <organization/>
            </author>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization/>
            </author>
            <date year="2003"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1659?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Thanks to Daniel Huigens and Evangelos Karatsiolis for the early review and
feedback on this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3fbRrLg9/4VWPnDSHNJWqIelr03e0aWZFujKFEkJZls
bvYSJFskRiDAAKAUxfZ/33r0GwBJ2c7M7J7xSWwJQL+q613V1d1uV1RJlcpX
0cZlXlbd7xZxVi1m0XHxOK/ySRHPp49RkkXfzmV2+fZyQ8TDYSHv8fPvjr0X
o7iSk7x4fAVPb3Mhxvkoi2fQ8biIb6vuw6IsU1l0c/h+Ppl357+Outt9US6G
s6QskzyrHufw8dnpzRsB3e+KuJDxq6iUI/GQF3eTIl/MX0XfyAp/i36Ev5Js
Er3Fx+JOPsLTMbTOKllksuqe4JjiXmYL+UpEkWr941v4mcfxO4iiWZykryI1
ub8ksrrt5cUEXsTFaAqrnVbVvHz1/Dl+h4+Se9nTXz3HB8+HRf5Qyueqi+cb
0LaQ89xpO0mq6WLYG+Wz5w4UnjN8nCcbQsSLapoXMPUudBMBRMtX0XUvOs8X
ZTJOSnrI0L2u4vsiL/1XMKlX0evrM/pllC+yCvflrSxmcfZIDyUvuOTWvTvV
+i/DMukNF9m4N5be4G96MFIhs9/vpDP4mzi9y/0XNPTFzdvo6O3K0W+xea9U
zf8yqybhsEe96EdGHGfUoyLPvMc05mWRV/A8HPb6Ial+l0UaZ2N36Bj6+IvC
yV5SCZHlML0KtvWVgO+u3hy/eLF3qH8+3N7t6593d1/umec7/QP6+ax7Quhg
tnFE9NMt5G0hyyl8g0QRjLB/sPuSfv7m7PqmC/T0imZYxcVEVq8ijTajshj1
sqSsepP8/vm8yP8uR1X5fI7k+iuTqxqOybX9TRe2OxvHxTj5HSaSZzwck387
9V83NDL4SX+66l+1aV/3ouOpzMxD3rWvk/TRfR40OulFF3k+fgxanSzKCriM
+ypo+FMPul4EzX5KuudxYl6MgTdBX3IkZ0NZRP3tnQMN97Or7uHezm4z6Md5
QgS+s9072O4fPscGvbOrHrboLubjHReCAKdqUUZXQPRFFQEqVlMZ3UyTYhxd
ATaOo/yWHmEn64Mb8Xoky3I12N/2oqM0niSjABZv8+Lvcea/qwP/aJ6HO3YS
Z4lM3Tf1Zsc5YHxRa3ifjP1XQcvvetj7JGj33eIxm7ovglY3ja0AxEtb/RX4
pkxLGaLWX/NpRm/iFsz6K2LWaAr4N6kt8a/xKB/WXwc9HANSJ2laa30cF6n/
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
lKmLMJo5b3QbJ2mJ0+hb/uuoRqr+GHEsv6IuM916RTJY7LXyjeJTbltGmzfx
JNrZ8lRIxkGVQFMPBFBtf3UJfEkHlF6paEyr8ozJCnSnMa1chXWcU1U2LUAp
2QA1c99CmY+S2BQHI+cy1TSv45nxU/RWTsiNXXhBigdMt1IZMIoJYQV6Ck7V
uFBtBm3pFCrMgq5nnoYT3uNyRwldqcl3DSPyxHjrRLSZ+LcIxdH9rhOskdWW
XiqeSkIrRK+Wb2BQZc60odMQeWELFXuwk3Pdi9YAox7/p/r8prk3u9GNXlEu
OsYcJYjJVVO3MpKjG4TRrsjjl+6lJz3Xs7XI6NLSWV5Wrk5hayV1olWw5SiW
jfQ17RlqHVluInZ4BxPKQhmP9VVGAA+yxc2FhbbanQs4mAzVAkQs7JkKUji3
9mlQRER7I5Dz7PQPO/zDyz4alZobbXpo+6ITHeLbl1tOWOdCO441Z9AJgVrS
t/IDl3rLSBW+ohtgAKjsXPwUBqGSM23vHYc58LuVLOLT+UNAOMwn3Lm4fEKQ
Fq9ZxefwiRYQO3oau6pKvrl9Xeha+qqfrNVLMR4RZYp7LHDNZX0ugO06/ygA
N9aN1PlBfrG3oVvsbYwVyF/7t/xR0bcxXiJjHiGV5KoeIkCN7ud6VNcEYhet
WbTuzaPmcCb2bSbJRyvxUQ/757fu0UpU7k+SiSwrL5VW33PntOdpqR60Ed2J
/PGCDslgY/zHlc15YKom2nFu1VbhKQ1YzZyMzqz1djw3aO9EXeEZvPGAxs42
LRb4mAgDd0XBCC9NbK0WtQxY3u51MmD53hzMNHKqGyzLhDWAX5lH9il5r7te
UWbz54O5zcCrFbTsl4M9vMmgrTMud/ch2n/hPG7/ZWdnT1dTbCOw0doEdvxk
Ahu5CH+FRob74FqdZrYkN/JJrjlQsurPWnQ6cul0FNBpMO1V0whW1U7YSMw1
kgUScA/NN56KEOFJeZXdZLm5wyEoqUoHHa+UJ+Na55yIgHnQofehH7V3q0WQ
4ST5xqcGJiJ8CWilBF1uxqtfyloUWj2JtazTos5aRk9lLZaMnspiVDzsquHZ
9XpprJ/GhpY9w1tNmv7U68KFDGnf+aWNbznP8NKTpQM5t544xTupJof9xXtT
r/GJz/BOlOaB6peifN6K9tpyf+t3pnzeitija0ple5za3Lzic2vP0YtJjg3N
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
6NKNPQsBAA==

-->

</rfc>
