<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-lundberg-cose-two-party-signing-algs-02" category="std" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="Split signing algorithms for COSE">Split signing algorithms for COSE</title>
    <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-02"/>
    <author fullname="Emil Lundberg" role="editor">
      <organization>Yubico</organization>
      <address>
        <postal>
          <street>Gävlegatan 22</street>
          <city>Stockholm</city>
          <country>SE</country>
        </postal>
        <email>emil@emlun.se</email>
      </address>
    </author>
    <author initials="M. B." surname="Jones" fullname="Michael B. Jones">
      <organization>Self-Issued Consulting</organization>
      <address>
        <postal>
          <country>United States</country>
        </postal>
        <email>michael_b_jones@hotmail.com</email>
        <uri>https://self-issued.info/</uri>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>Security</area>
    <workgroup>COSE</workgroup>
    <keyword>COSE</keyword>
    <keyword>Signing</keyword>
    <keyword>Algorithms</keyword>
    <keyword>Split algorithms</keyword>
    <keyword>Split signing</keyword>
    <abstract>
      <?line 92?>

<t>This specification defines COSE algorithm identifiers used when one signing operation
is split between two cooperating parties.
When performing split signing,
the first party typically hashes the data to be signed
and the second party signs the hashed data computed by the first party.
This can be useful when communication with the party holding the signing private key
occurs over a limited-bandwidth channel, such as NFC or Bluetooth Low Energy (BLE),
in which it is infeasible to send the complete set of data to be signed.
The resulting signatures are identical in structure to those computed by a single party,
and can be verified using the same verification algorithm
without additional steps to preprocess the signed data.</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-lundberg-cose-two-party-signing-algs/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        COSE Working Group mailing list (<eref target="mailto:cose@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cose/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cose/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/YubicoLabs/cose-two-party-signing-algs-rfc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 106?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>CBOR Object Signing and Encryption (COSE) <xref target="RFC9052"/>
algorithm identifiers are used to specify the cryptographic operations
used to create cryptographic data structures,
but do not record internal details of how the cryptography was performed,
since those details are typically irrelevant for the recipient.
The algorithm identifiers defined by this specification facilitate
splitting a signing operation between two cooperating parties,
by specifying the division of responsibilities between the two parties.
The resulting signature can be verified by the same verification algorithm
as if it had been created by a single party,
so this division of responsibilities is an implementation detail of the signer.
Verifiers therefore do not use these split algorithm identifiers,
and instead use the corresponding non-split algorithm identifier
which identifies the same verification algorithm as the split algorithm identifier would.</t>
      <t>A primary use case for this is splitting a signature operation between a software application
and a discrete hardware security module (HSM) holding the private key.
In particular, since the data link between them may have limited bandwidth,
it may not be practical to send the entire original message to the HSM.
Instead, since most signature algorithms begin with digesting the message
into a fixed-length intermediate input, this initial digest can be computed by the software application
while the HSM computes the rest of the signature algorithm on the digest.</t>
      <t>Since different signature algorithms digest the message in different ways
and at different stages of the algorithm,
there is no one generally-applicable way to define such a division point
for every possible signature algorithm.
Therefore, this specification defines algorithm identifiers encoding,
for a specific set of signature algorithms,
which steps of the signature algorithm are performed by the <em>digester</em> (e.g., software application)
and which are performed by the <em>signer</em> (e.g., HSM).
In general, the <em>signer</em> holds exclusive control of the signing private key.</t>
      <t>Note that these algorithm identifiers do not define new "pre-hashed" variants of the base signature algorithm,
nor an intermediate "hash envelope" data structure, such as that defined in <xref target="I-D.COSE-Hash-Envelope"/>.
Rather, these identifiers correspond to existing signature algorithms
that would typically be executed by a single party,
but split into two stages.
The resulting signatures are identical to those computed by a single party,
and can be verified using the same verification algorithms
without additional special steps to process the signed data.</t>
      <t>However some signature algorithms,
such as PureEdDSA <xref target="RFC8032"/>,
cannot be split in this way and therefore cannot be assigned split signing algorithm identifiers.
However, if such a signature algorithm defines a "pre-hashed" variant,
such as Ed25519ph <xref target="RFC8032"/>,
that "pre-hashed" algorithm can also be assigned a split signing algorithm identifier,
enabling the hashing step to be performed by the <em>digester</em>
and the signing step to be executed by the <em>signer</em>.</t>
      <section anchor="requirements-notation-and-conventions">
        <name>Requirements Notation and Conventions</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" in this document are to be interpreted as described in BCP 14 <xref target="RFC8174">RFC2119</xref> when, and only when, they appear in all capitals, as shown here.</t>
      </section>
    </section>
    <section anchor="split-signing-algorithms">
      <name>Split Signing Algorithms</name>
      <t>This section defines divisions of signing algorithm steps between a <em>digester</em> and a <em>signer</em>
in a split signing protocol,
and assigns algorithm identifiers to these algorithm divisions.
The <em>digester</em> performs the first part of the split algorithm and does not have access to the signing private key,
while the <em>signer</em> performs the second part of the split algorithm and has access to the signing private key.
For signing algorithms that format the message to insert domain separation tags,
as described in <xref section="2.2.5" sectionFormat="of" target="RFC9380"/>,
this message formatting is also performed by the <em>signer</em>.</t>
      <t>The algorithm identifiers defined in this specification
MAY appear in COSE structures used internally between the <em>digester</em> and the <em>signer</em> in a split signing protocol,
but SHOULD NOT appear in COSE structures consumed by signature verifiers.
COSE structures consumed by signature verifiers
SHOULD instead use the corresponding conventional algorithm identifiers for the verification algorithm.
These are listed in the "Verification algorithm" column in the tables defining split signing algorithm identifiers.</t>
      <section anchor="ecdsa-split">
        <name>ECDSA</name>
        <t>ECDSA <xref target="FIPS-186-5"/> split signing uses the following division between the <em>digester</em> and the <em>signer</em>
of the steps of the ECDSA signature generation algorithm <xref target="FIPS-186-5"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The signing procedure is defined in Section 6.4.1 of <xref target="FIPS-186-5"/>.</t>
          </li>
          <li>
            <t>The <em>digester</em> performs Step 1 of the signing procedure - hashing the message, producing the value <em>H</em>.</t>
          </li>
          <li>
            <t>The message input to the <em>signer</em> is the value <em>H</em> defined in the signing procedure.</t>
          </li>
          <li>
            <t>The <em>signer</em> resumes the signing procedure from Step 2.</t>
          </li>
        </ul>
        <t>The following algorithm identifiers are defined:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">COSE Value</th>
              <th align="left">Verification algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ESP256-split</td>
              <td align="left">TBD</td>
              <td align="left">ESP256</td>
              <td align="left">ESP256 <xref target="I-D.jose-fully-spec-algs"/> split signing as defined here</td>
            </tr>
            <tr>
              <td align="left">ESP384-split</td>
              <td align="left">TBD</td>
              <td align="left">ESP384</td>
              <td align="left">ESP384 <xref target="I-D.jose-fully-spec-algs"/> split signing as defined here</td>
            </tr>
            <tr>
              <td align="left">ESP512-split</td>
              <td align="left">TBD</td>
              <td align="left">ESP512</td>
              <td align="left">ESP512 <xref target="I-D.jose-fully-spec-algs"/> split signing as defined here</td>
            </tr>
          </tbody>
        </table>
        <t>Note: This is distinct from the similarly named Split-ECDSA (SECDSA) <xref target="SECDSA"/>,
although SECDSA can be implemented using this split procedure as a component.</t>
      </section>
      <section anchor="eddsa-split">
        <name>HashEdDSA</name>
        <t>Split HashEdDSA <xref target="RFC8032"/> uses the following division between the <em>digester</em> and the <em>signer</em>
of the steps of the HashEdDSA signing algorithm <xref target="RFC8032"/>:</t>
        <ul spacing="normal">
          <li>
            <t>HashEdDSA is a combination of the EdDSA signing procedure and the PureEdDSA signing procedure.
The EdDSA signing procedure is defined in the first paragraph of <xref section="3.3" sectionFormat="of" target="RFC8032"/>.
The PureEdDSA signing procedure is defined in the second paragraph of <xref section="3.3" sectionFormat="of" target="RFC8032"/>.</t>
          </li>
          <li>
            <t>The <em>digester</em> computes the value <tt>PH(M)</tt> defined in the EdDSA signing procedure.</t>
          </li>
          <li>
            <t>The message input to the <em>signer</em> is the value <tt>PH(M)</tt> defined in the EdDSA signing procedure.
This value is represented as <tt>M</tt> in the PureEdDSA signing procedure.</t>
          </li>
          <li>
            <t>The <em>signer</em> executes the PureEdDSA signing procedure,
where the value denoted <tt>M</tt> in the PureEdDSA signing procedure
takes the value denoted <tt>PH(M)</tt> in the EdDSA signing procedure.</t>
          </li>
        </ul>
        <t>PureEdDSA <xref target="RFC8032"/> cannot be divided in this way
since such a division would require that the <em>digester</em> has access to the private key.</t>
        <t>The following algorithm identifiers are defined:</t>
        <table>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">COSE Value</th>
              <th align="left">Verification algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">Ed25519ph-split</td>
              <td align="left">TBD</td>
              <td align="left">Ed25519ph</td>
              <td align="left">Ed25519ph <xref target="I-D.jose-fully-spec-algs"/> split signing as defined here (NOTE: Ed25519ph not yet registered)</td>
            </tr>
            <tr>
              <td align="left">Ed448ph-split</td>
              <td align="left">TBD</td>
              <td align="left">Ed448ph</td>
              <td align="left">Ed448ph <xref target="I-D.jose-fully-spec-algs"/> split signing as defined here (NOTE: Ed448ph not yet registered)</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="cose-sign-args">
      <name>COSE Signing Arguments</name>
      <t>While many signature algorithms take the private key and data to be signed as the only two parameters,
some signature algorithms have additional parameters that must also be set.
For example,
to sign using a key derived by ARKG <xref target="I-D.bradleylundberg-ARKG"/>,
two additional arguments <tt>kh</tt> and <tt>info</tt> are needed in <tt>ARKG-Derive-Private-Key</tt> to derive the signing private key.</t>
      <t>While such additional arguments are simple to provide to the API of the signing procedure in a single-party context,
in a split signing context these additional arguments also need to be conveyed from the <em>digester</em> to the <em>signer</em>.
For this purpose, we define a new COSE structure <tt>COSE_Sign_Args</tt> for "COSE signing arguments".
This enables defining a unified, algorithm-agnostic protocol between the <em>digester</em> and the <em>signer</em>,
rather than requiring a distinct protocol for each signature algorithm for the sake of conveying algorithm-specific parameters.</t>
      <t><tt>COSE_Sign_Args</tt> is built on a CBOR map.
The set of common parameters that can appear in a <tt>COSE_Sign_Args</tt>
can be found in the IANA "COSE Signing Arguments Common Parameters" registry (TODO).
Additional parameters defined for specific signing algorithms
can be found in the IANA "COSE Signing Arguments Algorithm Parameters" registry (TODO).</t>
      <t>The CDDL grammar describing <tt>COSE_Sign_Args</tt>, using the CDDL fragment defined in <xref section="1.5" sectionFormat="of" target="RFC9052"/>, is:</t>
      <sourcecode type="cddl"><![CDATA[
COSE_Sign_Args = {
    3 ^ => tstr / int,  ; alg
    * label => values,
}
]]></sourcecode>
      <section anchor="cose-sign-args-common">
        <name>COSE Signing Arguments Common Parameters</name>
        <t>This document defines a set of common parameters for a COSE Signing Arguments object.
<xref target="tbl-cose-sign-args-common"/> provides a summary of the parameters defined in this section.</t>
        <table anchor="tbl-cose-sign-args-common">
          <name>Common parameters of the COSE_Sign_Args structure.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">CBOR Type</th>
              <th align="left">Value Registry</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">alg</td>
              <td align="left">3</td>
              <td align="left">tstr / int</td>
              <td align="left">COSE Algorithms</td>
              <td align="left">Signing algorithm to use</td>
            </tr>
          </tbody>
        </table>
        <ul spacing="normal">
          <li>
            <t>alg: This parameter identifies the signing algorithm the additional arguments apply to.
The signer MUST verify that this algorithm matches any key usage restrictions set on the key to be used.
If the algorithms do not match, then the signature operation MUST be aborted with an error.</t>
          </li>
        </ul>
        <t>Definitions of COSE algorithms MAY define additional algorithm-specific parameters for <tt>COSE_Sign_Args</tt>.</t>
        <t>The following CDDL example conveys additional arguments for signing data
using the ESP256-split algorithm (see <xref target="ecdsa-split"/>)
and a key derived using <tt>ARKG-P256</tt> <xref target="I-D.bradleylundberg-ARKG"/>:</t>
        <sourcecode type="cddl"><![CDATA[
{
  3: -65539,   ; alg: ESP256-split with ARKG-P256 (placeholder value)

               ; ARKG-P256 key handle
               ; (HMAC-SHA-256-128 followed by
                  SEC1 uncompressed ECDH public key)
  -1: h'27987995f184a44cfa548d104b0a461d
        0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043de
          c2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361',

               ; info argument to ARKG-Derive-Private-Key
  -2: 'ARKG-P256.test vectors',
}
]]></sourcecode>
      </section>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <section anchor="cose-alg-reg">
        <name>COSE Algorithms Registrations</name>
        <t>This section registers the following values in the IANA "COSE Algorithms" registry <xref target="IANA.COSE"/>:</t>
        <ul spacing="normal">
          <li>
            <t>Name: ESP256-split
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested Assignment -300)</t>
              </li>
              <li>
                <t>Description: ESP256 <xref target="I-D.jose-fully-spec-algs"/> split signing</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="ecdsa-split"/> of this specification</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP384-split
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested Assignment -301)</t>
              </li>
              <li>
                <t>Description: ESP384 <xref target="I-D.jose-fully-spec-algs"/> split signing</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="ecdsa-split"/> of this specification</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP512-split
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested Assignment -302)</t>
              </li>
              <li>
                <t>Description: ESP512 <xref target="I-D.jose-fully-spec-algs"/> split signing</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="ecdsa-split"/> of this specification</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ed25519ph-split
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested Assignment -303)</t>
              </li>
              <li>
                <t>Description: Ed25519ph <xref target="I-D.jose-fully-spec-algs"/> split signing</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="eddsa-split"/> of this specification</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ed448ph-split
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested Assignment -304)</t>
              </li>
              <li>
                <t>Description: Ed448ph <xref target="I-D.jose-fully-spec-algs"/> split signing</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="eddsa-split"/> of this specification</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="cose-signing-arguments-common-parameters-registry">
        <name>COSE Signing Arguments Common Parameters Registry</name>
        <t>TODO</t>
      </section>
      <section anchor="cose-signing-arguments-algorithm-parameters-registry">
        <name>COSE Signing Arguments Algorithm Parameters Registry</name>
        <t>TODO</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.bradleylundberg-ARKG">
          <front>
            <title>The Asynchronous Remote Key Generation (ARKG) algorithm</title>
            <author fullname="Emil Lundberg" initials="E." surname="Lundberg">
              <organization>Yubico</organization>
            </author>
            <author fullname="John Bradley" initials="J." surname="Bradley">
              <organization>Yubico</organization>
            </author>
            <date day="29" month="April" year="2025"/>
            <abstract>
              <t>   Asynchronous Remote Key Generation (ARKG) is an abstract algorithm
   that enables delegation of asymmetric public key generation without
   giving access to the corresponding private keys.  This capability
   enables a variety of applications: a user agent can generate
   pseudonymous public keys to prevent tracking; a message sender can
   generate ephemeral recipient public keys to enhance forward secrecy;
   two paired authentication devices can each have their own private
   keys while each can register public keys on behalf of the other.

   This document provides three main contributions: a specification of
   the generic ARKG algorithm using abstract primitives; a set of
   formulae for instantiating the abstract primitives using concrete
   primitives; and an initial set of fully specified concrete ARKG
   instances.  We expect that additional instances will be defined in
   the future.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-bradleylundberg-cfrg-arkg-08"/>
        </reference>
        <reference anchor="I-D.jose-fully-spec-algs">
          <front>
            <title>Fully-Specified Algorithms for JOSE and COSE</title>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <date day="11" month="May" year="2025"/>
            <abstract>
              <t>   This specification refers to cryptographic algorithm identifiers that
   fully specify the cryptographic operations to be performed, including
   any curve, key derivation function (KDF), and hash functions, as
   being "fully specified".  It refers to cryptographic algorithm
   identifiers that require additional information beyond the algorithm
   identifier to determine the cryptographic operations to be performed
   as being "polymorphic".  This specification creates fully-specified
   algorithm identifiers for registered JSON Object Signing and
   Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)
   polymorphic algorithm identifiers, enabling applications to use only
   fully-specified algorithm identifiers.  It deprecates those
   polymorphic algorithm identifiers.

   This specification updates RFC 7518, RFC 8037, and RFC 9053.  It
   deprecates polymorphic algorithms defined by RFC 8037 and RFC 9053
   and provides fully-specified replacements for them.  It adds to the
   instructions to designated experts in RFC 7518 and RFC 9053.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jose-fully-specified-algorithms-13"/>
        </reference>
        <reference anchor="IANA.COSE" target="https://www.iana.org/assignments/cose/">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="SEC1" target="https://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009" month="May"/>
          </front>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="FIPS-204" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.204.pdf">
          <front>
            <title>Module-Lattice-Based Digital Signature Standard</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2024" month="August"/>
          </front>
        </reference>
        <reference anchor="FIPS-186-5" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-5.pdf">
          <front>
            <title>Digital Signature Standard (DSS)</title>
            <author>
              <organization>National Institute of Standards and Technology</organization>
            </author>
            <date year="2023" month="February"/>
          </front>
        </reference>
        <reference anchor="I-D.COSE-Hash-Envelope">
          <front>
            <title>COSE Hash Envelope</title>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <author fullname="Steve Lasker" initials="S." surname="Lasker">
              <organization>DataTrails</organization>
            </author>
            <author fullname="Henk Birkholz" initials="H." surname="Birkholz">
              <organization>Fraunhofer SIT</organization>
            </author>
            <date day="28" month="March" year="2025"/>
            <abstract>
              <t>   This document defines new COSE header parameters for signaling a
   payload as an output of a hash function.  This mechanism enables
   faster validation as access to the original payload is not required
   for signature validation.  Additionally, hints of the detached
   payload's content format and availability are defined providing
   references to optional discovery mechanisms that can help to find
   original payload content.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-cose-hash-envelope-05"/>
        </reference>
        <reference anchor="RFC9380">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
        <reference anchor="SECDSA" target="https://eprint.iacr.org/2021/910">
          <front>
            <title>SECDSA: Mobile signing and authentication under classical "sole control"</title>
            <author fullname="Eric Verheul">
              <organization/>
            </author>
            <date year="2021" month="July"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 358?>

<section numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Renamed document from "COSE Algorithms for Two-Party Signing" to "Split signing algorithms for COSE"
and updated introduction and terminology accordingly.</t>
        </li>
        <li>
          <t>Dropped definitions for HashML-DSA, as split variants of ML-DSA are being actively discussed in other IETF groups.</t>
        </li>
        <li>
          <t>Changed "Base algorithm" heading in definition tables to "Verification algorithm".</t>
        </li>
        <li>
          <t>Remodeled COSE_Key_Ref as COSE_Sign_Args.
          </t>
          <ul spacing="normal">
            <li>
              <t>Dropped definitions of reference types for COSE Key Types registry.</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Added IANA registration requests for algorithms defined.</t>
        </li>
        <li>
          <t>Updated references and other editorial tweaks.</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial individual draft</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
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
JeUwpk59hveV8fMw5/8BxBAcKs49AAA=

-->

</rfc>
