<?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-bradleylundberg-cfrg-arkg-09" category="info" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.29.0 -->
  <front>
    <title abbrev="ARKG">The Asynchronous Remote Key Generation (ARKG) algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-bradleylundberg-cfrg-arkg-09"/>
    <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 fullname="John Bradley">
      <organization>Yubico</organization>
      <address>
        <email>ve7jtb@ve7jtb.com</email>
      </address>
    </author>
    <date year="2025" month="July" day="07"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>KDF</keyword>
    <abstract>
      <?line 142?>

<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.</t>
      <t>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>
    <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-bradleylundberg-cfrg-arkg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/Yubico/arkg-rfc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 159?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Asynchronous Remote Key Generation (ARKG) introduces a mechanism
to generate public keys without access to the corresponding private keys.
Such a mechanism is useful for many scenarios when a new public key is needed
but the private key holder is not available to perform the key generation.
This may occur when private keys are stored in a hardware security device,
which may be unavailable or locked at the time a new public key is needed.</t>
      <t>Some motivating use cases of ARKG include:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Single-use asymmetric keys</strong>:
Envisioned for the European Union's digital identity framework,
which is set to use single-use asymmetric keys to prevent colluding verifiers from using public keys as correlation handles.
Each digital identity credential would thus be issued with a single-use proof-of-possession key,
used only once to present the credential to a verifier.
ARKG empowers both online and offline usage scenarios:
for offline scenarios, ARKG enables pre-generation of public keys for single-use credentials
without needing to access the hardware security device that holds the private keys.
For online scenarios, ARKG gives the credential issuer assurance
that all derived private keys are bound to the same secure hardware element.
In both cases, application performance may be improved
since public keys can be generated in a general-purpose execution environment instead of a secure enclave.</t>
        </li>
        <li>
          <t><strong>Enhanced forward secrecy</strong>:
The use of ARKG can facilitate forward secrecy in certain contexts.
For instance, <eref target="https://www.rfc-editor.org/rfc/rfc9052.html#name-direct-key-agreement">section 8.5.4 of RFC 9052</eref> notes that
"Since COSE is designed for a store-and-forward environment rather than an online environment,
[...] forward secrecy (see <xref target="RFC4949"/>) is not achievable. A static key will always be used for the receiver of the COSE object."
As opposed to workarounds like exchanging a large number of keys in advance,
ARKG enables the the sender to generate ephemeral recipient public keys on demand.</t>
        </li>
        <li>
          <t><strong>Backup key generation</strong>:
For example, the W3C Web Authentication API [WebAuthn] (WebAuthn) generates a new key pair for each account on each web site.
ARKG could allow for simultaneously generating a backup public key when registering a new public key.
A primary authenticator could generate both a key pair for itself and a public key for a paired backup authenticator.
The backup authenticator only needs to be paired with the primary authenticator once,
and can then be safely stored until it is needed.</t>
        </li>
      </ul>
      <t>ARKG consists of three procedures:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Initialization</strong>:
The <em>delegating party</em> generates a <em>seed pair</em> and discloses the <em>public seed</em> to a <em>subordinate party</em>,
while securely retaining the <em>private seed</em>.</t>
        </li>
        <li>
          <t><strong>Public key generation</strong>:
The subordinate party uses the public seed to autonomously generate a new public key
along with a unique <em>key handle</em> for the public key.
This can be repeated any number of times.</t>
        </li>
        <li>
          <t><strong>Private key derivation</strong>:
The delegating party uses a key handle and the private seed
to derive the private key corresponding to the public key generated along with the key handle.
This can be repeated with any number of key handles.</t>
        </li>
      </ul>
      <t>Notably, ARKG can be built entirely using established cryptographic primitives.
The required primitives are a public key blinding scheme and a key encapsulation mechanism (KEM),
which may in turn use a key derivation function (KDF) and a message authentication code (MAC) scheme.
Both conventional primitives and quantum-resistant alternatives exist that meet these requirements. <xref target="Wilson"/></t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="notation">
        <name>Notation</name>
        <t>The following notation is used throughout this document:</t>
        <ul spacing="normal">
          <li>
            <t>The symbol <tt>||</tt> represents octet string concatenation.</t>
          </li>
          <li>
            <t>Literal text strings and octet strings are denoted
using the CDDL syntax defined in <xref section="3.1" sectionFormat="of" target="RFC8610"/>.</t>
          </li>
          <li>
            <t>Elliptic curve operations are written in additive notation:
<tt>+</tt> denotes point addition, i.e., the curve group operation;
<tt>*</tt> denotes point multiplication, i.e., repeated point addition;
and <tt>+</tt> also denotes scalar addition modulo the curve order.
<tt>*</tt> has higher precedence than <tt>+</tt>, i.e., <tt>a + b * C</tt> is equivalent to <tt>a + (b * C)</tt>.</t>
          </li>
          <li>
            <t><tt>LEN(x)</tt> is the length, in octets, of the octet string <tt>x</tt>.</t>
          </li>
          <li>
            <t>The function <tt>I2OSP</tt> converts a nonnegative integer into an octet string as defined in <xref section="4.1" sectionFormat="of" target="RFC8017"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="arkg">
      <name>The Asynchronous Remote Key Generation (ARKG) algorithm</name>
      <t>The ARKG algorithm consists of three functions, each performed by one of two participants:
the <em>delegating party</em> or the <em>subordinate party</em>.
The delegating party generates an ARKG <em>seed pair</em> and emits the <em>public seed</em> to the subordinate party
while keeping the <em>private seed</em> secret.
The subordinate party can then use the public seed to generate derived public keys and <em>key handles</em>,
and the delegating party can use the private seed and a key handle to derive the corresponding private key.</t>
      <t>This construction of ARKG is fully deterministic, extracting input entropy as explicit parameters,
as opposed to the internal random sampling typically used in the academic literature <xref target="Frymann2020"/> <xref target="Wilson"/> <xref target="Clermont"/>.
Implementations <bcp14>MAY</bcp14> choose to instead implement the <tt>ARKG-Derive-Seed</tt> and <tt>KEM-Encaps</tt> functions
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
      <t>The following subsections define the abstract instance parameters used to construct the three ARKG functions,
followed by the definitions of the three ARKG functions.</t>
      <section anchor="arkg-params">
        <name>Instance parameters</name>
        <t>ARKG is composed of a suite of other algorithms.
The parameters of an ARKG instance are:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: An asymmetric key blinding scheme <xref target="Wilson"/>, consisting of:
            </t>
            <ul spacing="normal">
              <li>
                <t>Function <tt>BL-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a blinding key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of a blinding public key <tt>pk</tt> and a blinding private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-PRF(ikm_tau, ctx) -&gt; tau</tt>: Derive a pseudorandom blinding factor.      </t>
                <t>
Input consists of input entropy <tt>ikm_tau</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the blinding factor <tt>tau</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-Blind-Public-Key(pk, tau) -&gt; pk_tau</tt>: Deterministically compute a blinded public key.      </t>
                <t>
Input consists of a blinding public key <tt>pk</tt>,
and a blinding factor <tt>tau</tt>.      </t>
                <t>
Output consists of the blinded public key <tt>pk_tau</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-Blind-Private-Key(sk, tau) -&gt; sk_tau</tt>: Deterministically compute a blinded private key.      </t>
                <t>
Input consists of a blinding private key <tt>sk</tt>,
and the blinding factor <tt>tau</tt>.      </t>
                <t>
Output consists of the blinded private key <tt>sk_tau</tt>.</t>
              </li>
            </ul>
            <t>
<tt>ikm</tt> is an opaque octet string of a suitable length as defined by the ARKG instance.
<tt>ikm_tau</tt> is an opaque octet string generated as the <tt>k</tt> output of <tt>KEM-Encaps</tt> and <tt>KEM-Decaps</tt>.
<tt>ctx</tt> is an opaque octet string of arbitrary length.  </t>
            <t>
The representations of <tt>pk</tt> and <tt>pk_tau</tt> are defined by the protocol that invokes ARKG.
The representations of <tt>sk</tt>, <tt>tau</tt> and <tt>sk_tau</tt> are undefined implementation details.  </t>
            <t>
See <xref target="Wilson"/> for definitions of security properties required of the key blinding scheme <tt>BL</tt>.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: A key encapsulation mechanism <xref target="Shoup"/>, consisting of the functions:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>KEM-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a key encapsulation key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of public key <tt>pk</tt> and private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>KEM-Encaps(pk, ikm, ctx) -&gt; (k, c)</tt>: Derive a key encapsulation.      </t>
                <t>
Input consists of an encapsulation public key <tt>pk</tt>,
input entropy <tt>ikm</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of a shared secret <tt>k</tt> and an encapsulation ciphertext <tt>c</tt>.</t>
              </li>
              <li>
                <t><tt>KEM-Decaps(sk, c, ctx) -&gt; k</tt>: Decapsulate a shared secret.      </t>
                <t>
Input consists of encapsulation private key <tt>sk</tt>, encapsulation ciphertext <tt>c</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the shared secret <tt>k</tt> on success, or an error otherwise.</t>
              </li>
            </ul>
            <t>
<tt>ikm</tt> is an opaque octet string of a suitable length as defined by the ARKG instance.
<tt>k</tt>, <tt>c</tt> and <tt>ctx</tt> are opaque octet strings of arbitrary length.
The representation of <tt>pk</tt> is defined by the protocol that invokes ARKG.
The representation of <tt>sk</tt> is an undefined implementation detail.  </t>
            <t>
The KEM <bcp14>MUST</bcp14> guarantee integrity of the ciphertext,
meaning that knowledge of the public key <tt>pk</tt> and the domain separation parameter <tt>ctx</tt>
is required in order to create any ciphertext <tt>c</tt> that can be successfully decapsulated by the corresponding private key <tt>sk</tt>.
<xref target="hmac-kem"/> describes a general formula for how any KEM can be adapted to include this guarantee.
<xref target="design-rationale-mac"/> discusses the reasons for this requirement.  </t>
            <t>
See <xref target="Wilson"/> for definitions of additional security properties required of the key encapsulation mechanism <tt>KEM</tt>.</t>
          </li>
        </ul>
        <t>A concrete ARKG instantiation <bcp14>MUST</bcp14> specify the instantiation
of each of the above functions.</t>
        <t>The output keys of the <tt>BL</tt> scheme are also the output keys of the ARKG instance as a whole.
For example, if <tt>BL-Blind-Public-Key</tt> and <tt>BL-Blind-Private-Key</tt> output ECDSA keys,
then the ARKG instance will also output ECDSA keys.</t>
        <t>We denote a concrete ARKG instance by the pattern <tt>ARKG-NAME</tt>,
substituting for <tt>NAME</tt> some description of the chosen instantiation for <tt>BL</tt> and <tt>KEM</tt>.
Note that this pattern cannot in general be unambiguously parsed;
implementations <bcp14>MUST NOT</bcp14> attempt to construct an ARKG instance by parsing such a pattern string.
Concrete ARKG instances <bcp14>MUST</bcp14> always be identified by lookup in a registry of fully specified ARKG instances.
This is to prevent usage of algorithm combinations that may be incompatible or insecure.</t>
      </section>
      <section anchor="the-function-arkg-derive-seed">
        <name>The function ARKG-Derive-Seed</name>
        <t>This function is performed by the delegating party.
The delegating party derives the ARKG seed pair <tt>(pk, sk)</tt>
and keeps the private seed <tt>sk</tt> secret, while the public seed <tt>pk</tt> is provided to the subordinate party.
The subordinate party will then be able to derive public keys on behalf of the delegating party.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Seed(ikm_bl, ikm_kem) -> (pk, sk)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        ikm_bl    Input keying material entropy for BL.
        ikm_kem   Input keying material entropy for KEM.

    Output:
        (pk, sk)  An ARKG seed pair with public seed pk
                    and private seed sk.

    The output (pk, sk) is calculated as follows:

    (pk_bl,  sk_bl)  = BL-Derive-Key-Pair(ikm_bl)
    (pk_kem, sk_kem) = KEM-Derive-Key-Pair(ikm_kem)
    pk = (pk_bl, pk_kem)
    sk = (sk_bl, sk_kem)
]]></sourcecode>
        <section anchor="nondeterministic-variants">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Seed</tt>, <tt>KEM-Derive-Key-Pair</tt> and <tt>BL-Derive-Key-Pair</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
        </section>
      </section>
      <section anchor="the-function-arkg-derive-public-key">
        <name>The function ARKG-Derive-Public-Key</name>
        <t>This function is performed by the subordinate party, which holds the ARKG public seed <tt>pk = (pk_bl, pk_kem)</tt>.
The resulting public key <tt>pk'</tt> can be provided to external parties to use in asymmetric cryptography protocols,
and the resulting key handle <tt>kh</tt> can be used by the delegating party to derive the private key corresponding to <tt>pk'</tt>.</t>
        <t>This function may be invoked any number of times with the same public seed,
using different <tt>ikm</tt> or <tt>ctx</tt> arguments,
in order to generate any number of public keys.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Public-Key((pk_bl, pk_kem), ikm, ctx) -> (pk', kh)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        pk_bl     A key blinding public key.
        pk_kem    A key encapsulation public key.
        ikm       Input entropy for KEM encapsulation.
        ctx       An octet string of length at most 64,
                    containing optional context and
                    application specific information
                    (can be a zero-length string).

    Output:
        pk'       A blinded public key.
        kh        A key handle for deriving the blinded
                    private key sk' corresponding to pk'.

    The output (pk', kh) is calculated as follows:

    if LEN(ctx) > 64:
        Abort with an error.

    ctx'    = I2OSP(LEN(ctx), 1) || ctx
    ctx_bl  = 'ARKG-Derive-Key-BL.'  || ctx'
    ctx_kem = 'ARKG-Derive-Key-KEM.' || ctx'

    (ikm_tau, c) = KEM-Encaps(pk_kem, ikm, ctx_kem)
    tau = BL-PRF(ikm_tau, ctx_bl)
    pk' = BL-Blind-Public-Key(pk_bl, tau)

    kh = c
]]></sourcecode>
        <t>If this procedure aborts due to an error,
the procedure can safely be retried with the same <tt>(pk_bl, pk_kem)</tt> and <tt>ctx</tt> arguments but a new <tt>ikm</tt> argument.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
        <section anchor="nondeterministic-variants-1">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Public-Key</tt> and <tt>KEM-Encaps</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameter
and sampling random entropy internally;
this choice does not affect interoperability.</t>
          <t><tt>BL-PRF</tt> and <tt>BL-Blind-Public-Key</tt> must always be deterministic
for compatibility with <tt>ARKG-Derive-Private-Key</tt>.</t>
        </section>
      </section>
      <section anchor="the-function-arkg-derive-private-key">
        <name>The function ARKG-Derive-Private-Key</name>
        <t>This function is performed by the delegating party, which holds the ARKG private seed <tt>(sk_bl, sk_kem)</tt>.
The resulting private key <tt>sk'</tt> can be used in asymmetric cryptography protocols
to prove possession of <tt>sk'</tt> to an external party that has the corresponding public key.</t>
        <t>This function may be invoked any number of times with the same private seed,
in order to derive the same or different private keys any number of times.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Private-Key((sk_bl, sk_kem), kh, ctx) -> sk'
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        sk_bl     A key blinding private key.
        sk_kem    A key encapsulation private key.
        kh        A key handle output from ARKG-Derive-Public-Key.
        ctx       An octet string of length at most 64,
                    containing optional context and
                    application specific information
                    (can be a zero-length string).

    Output:
        sk'       A blinded private key.

    The output sk' is calculated as follows:

    if LEN(ctx) > 64:
        Abort with an error.

    ctx'    = I2OSP(LEN(ctx), 1) || ctx
    ctx_bl  = 'ARKG-Derive-Key-BL.'  || ctx'
    ctx_kem = 'ARKG-Derive-Key-KEM.' || ctx'

    ikm_tau = KEM-Decaps(sk_kem, kh, ctx_kem)
    If decapsulation failed:
        Abort with an error.

    tau = BL-PRF(ikm_tau, ctx_bl)
    sk' = BL-Blind-Private-Key(sk_bl, tau)
]]></sourcecode>
        <t>Errors in this procedure are typically unrecoverable.
For example, <tt>KEM-Decaps</tt> may fail to decapsulate the KEM ciphertext <tt>kh</tt> if it fails an integrity check.
ARKG instantiations <bcp14>SHOULD</bcp14> be chosen in a way that such errors are impossible
if <tt>kh</tt> was generated by an honest and correct implementation of <tt>ARKG-Derive-Public-Key</tt>.
Incorrect or malicious implementations of <tt>ARKG-Derive-Public-Key</tt> do not degrade the security
of an honest and correct implementation of <tt>ARKG-Derive-Private-Key</tt>.
See also <xref target="design-rationale-mac"/>.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
      </section>
      <section anchor="long-ctx">
        <name>Using <tt>ctx</tt> values longer than 64 bytes</name>
        <t>The <tt>ctx</tt> parameter of <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt>
is limited to a length of at most 64 bytes.
This is because this value needs to be communicated from the <em>subordinate party</em> to the <em>delegating party</em>
to use the same argument value in both functions,
therefore it is necessary in some contexts to limit the size of this parameter
in order to limit the size of overall protocol messages.</t>
        <t>If applications require <tt>ctx</tt> values longer than 64 bytes,
implementors <bcp14>MAY</bcp14> use techniques such as that described in <xref section="5.3.3" sectionFormat="of" target="RFC9380"/>.
Precise procedure definitions are left as an application-specific implementation detail.</t>
      </section>
    </section>
    <section anchor="generic-formulae">
      <name>Generic ARKG instantiations</name>
      <t>This section defines generic formulae for instantiating the individual ARKG parameters,
which can be used to define concrete ARKG instantiations.</t>
      <section anchor="blinding-ec">
        <name>Using elliptic curve addition for key blinding</name>
        <t>Instantiations of ARKG whose output keys are elliptic curve keys
can use elliptic curve addition as the key blinding scheme <tt>BL</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>BL</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: An elliptic curve.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation tag.</t>
          </li>
        </ul>
        <t>Then the <tt>BL</tt> parameter of ARKG may be instantiated as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>N</tt> is the order of <tt>G</tt>.</t>
          </li>
          <li>
            <t>The function <tt>hash_to_field</tt> is defined in <xref section="5" sectionFormat="of" target="RFC9380"/>.</t>
          </li>
        </ul>
        <sourcecode type="pseudocode"><![CDATA[
BL-Derive-Key-Pair(ikm) -> (pk, sk)

    DST_bl_sk = 'ARKG-BL-EC-KG.' || DST_ext
    sk = hash_to_field(ikm, 1) with the parameters:
        DST: DST_bl_sk
        F: GF(N), the scalar field
           of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk = sk * G


BL-PRF(ikm_tau, ctx) -> tau

    DST_tau = 'ARKG-BL-EC.' || DST_ext || ctx
    tau = hash_to_field(ikm_tau, 1) with the parameters:
        DST: DST_tau
        F: GF(N), the scalar field
           of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite


BL-Blind-Public-Key(pk, tau) -> pk_tau

    pk_tau = pk + tau * G


BL-Blind-Private-Key(sk, tau) -> sk_tau

    sk_tau_tmp = sk + tau'
    If sk_tau_tmp = 0, abort with an error.
    sk_tau = sk_tau_tmp
]]></sourcecode>
      </section>
      <section anchor="hmac-kem">
        <name>Using HMAC to adapt a KEM without ciphertext integrity</name>
        <t>Not all key encapsulation mechanisms guarantee ciphertext integrity,
meaning that a valid KEM ciphertext can be created only with knowledge of the KEM public key.
This section defines a general formula for adapting any KEM to guarantee ciphertext integrity
by prepending a MAC to the KEM ciphertext.</t>
        <t>For example, ECDH does not guarantee ciphertext integrity - any elliptic curve point is a valid ECDH ciphertext
and can be successfully decapsulated using any elliptic curve private scalar.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: A key encapsulation mechanism as described for the <tt>KEM</tt> parameter in <xref target="arkg-params"/>,
except <tt>Sub-Kem</tt> <bcp14>MAY</bcp14> ignore the <tt>ctx</tt> parameter and <bcp14>MAY</bcp14> not guarantee ciphertext integrity.
<tt>Sub-Kem</tt> defines the functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated using <tt>Sub-Kem</tt>,
HMAC <xref target="RFC2104"/> and HKDF <xref target="RFC5869"/> as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>L</tt> is the output length of <tt>Hash</tt> in octets.</t>
          </li>
          <li>
            <t><tt>LEFT(X, n)</tt> is the first <tt>n</tt> bytes of the byte array <tt>X</tt>.</t>
          </li>
          <li>
            <t><tt>DROP_LEFT(X, n)</tt> is the byte array <tt>X</tt> without the first <tt>n</tt> bytes.</t>
          </li>
        </ul>
        <t>We truncate the HMAC output to 128 bits (16 octets)
because as described in <xref target="design-rationale-mac"/>,
ARKG needs ciphertext integrity only to ensure correctness, not for security.
Extendable-output functions used as the <tt>Hash</tt> parameter <bcp14>SHOULD</bcp14> still be instantiated
with an output length appropriate for the desired security level,
in order to not leak information about the <tt>Sub-Kem</tt> shared secret key.</t>
        <sourcecode type="pseudocode"><![CDATA[
KEM-Derive-Key-Pair(ikm) -> (pk, sk)

    (pk, sk) = Sub-Kem-Derive-Key-Pair(ikm)


KEM-Encaps(pk, ikm, ctx) -> (k, c)

    ctx_sub = 'ARKG-KEM-HMAC.' || DST_ext || ctx
    (k', c') = Sub-Kem-Encaps(pk, ikm, ctx_sub)

    prk = HKDF-Extract with the arguments:
        Hash: Hash
        salt: not set
        IKM: k'

    info_mk = 'ARKG-KEM-HMAC-mac.' || DST_ext || ctx
    mk = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: info_mk
        L: L
    t = HMAC-Hash-128(K=mk, text=c')

    info_k = 'ARKG-KEM-HMAC-shared.' || DST_ext || ctx
    k = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: info_k
        L: The length of k' in octets.
    c = t || c'


KEM-Decaps(sk, c, ctx) -> k

    t = LEFT(c, 16)
    c' = DROP_LEFT(c, 16)
    ctx_sub = 'ARKG-KEM-HMAC.' || DST_ext || ctx
    k' = Sub-Kem-Decaps(sk, c', ctx_sub)

    prk = HKDF-Extract with the arguments:
        Hash: Hash
        salt: not set
        IKM: k'

    mk = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: 'ARKG-KEM-HMAC-mac.' || DST_ext || ctx
        L: L

    t' = HMAC-Hash-128(K=mk, text=c')
    If t = t':
        k = HKDF-Expand with the arguments:
            Hash: Hash
            PRK: prk
            info: 'ARKG-KEM-HMAC-shared.' || DST_ext || ctx
            L: The length of k' in octets.
    Else:
        Abort with an error.
]]></sourcecode>
        <t>In concrete instances where <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> ignore the <tt>ctx</tt> parameter,
implementations <bcp14>MAY</bcp14> eliminate the parameter and omit the computation of <tt>ctx_sub</tt>.</t>
      </section>
      <section anchor="kem-ecdh">
        <name>Using ECDH as the KEM</name>
        <t>Instantiations of ARKG can use ECDH <xref target="RFC6090"/> as the key encapsulation mechanism <tt>KEM</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: an elliptic curve valid for use with ECDH <xref target="RFC6090"/>.</t>
          </li>
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The above parameters define the following intermediate value:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DST_aug</tt>: <tt>'ARKG-ECDH.' || DST_ext</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: <tt>Hash</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>DST_aug</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Elliptic-Curve-Point-to-Octet-String</tt> and <tt>Octet-String-to-Elliptic-Curve-Point</tt>
are the conversion routines defined in sections 2.3.3 and 2.3.4 of <xref target="SEC1"/>,
without point compression.</t>
              </li>
              <li>
                <t><tt>ECDH(pk, sk)</tt> represents the compact output of ECDH <xref target="RFC6090"/>
using public key (curve point) <tt>pk</tt> and private key (exponent) <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
              </li>
              <li>
                <t><tt>N</tt> is the order of <tt>G</tt>.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    DST_kem_sk = 'ARKG-KEM-ECDH-KG.' || DST_aug
    sk = hash_to_field(ikm, 1) with the parameters:
        DST: DST_kem_sk
        F: GF(N), the scalar field
          of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk = sk * G


Sub-Kem-Encaps(pk, ikm, ctx) -> (k, c)

    (pk', sk') = Sub-Kem-Derive-Key-Pair(ikm)

    k = ECDH(pk, sk')
    c = Elliptic-Curve-Point-to-Octet-String(pk')


Sub-Kem-Decaps(sk, c, ctx) -> k

    pk' = Octet-String-to-Elliptic-Curve-Point(c)
    k = ECDH(pk', sk)
]]></sourcecode>
          </li>
        </ul>
        <t>Note: This instance intentionally ignores the <tt>ctx</tt> parameter of <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
      </section>
      <section anchor="kem-x25519-x448">
        <name>Using X25519 or X448 as the KEM</name>
        <t>Instantiations of ARKG can use X25519 or X448 <xref target="RFC7748"/> as the key encapsulation mechanism <tt>KEM</tt>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DH-Function</tt>: the function X25519 or the function X448 <xref target="RFC7748"/>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: SHA-512 [FIPS 180-4] if <tt>DH-Function</tt> is X25519,
or SHAKE256 [FIPS 202] with output length 64 octets if <tt>DH-Function</tt> is X448.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>'ARKG-ECDHX.' || DST_ext</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>G</tt> is the octet string <tt>h'0900000000000000 0000000000000000 0000000000000000 0000000000000000'</tt>
if <tt>DH-Function</tt> is X25519,
or the octet string <tt>h'0500000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000'</tt>
if <tt>DH-Function</tt> is X448.      </t>
                <t>
These are the little-endian encodings of the integers 9 and 5,
which is the u-coordinate of the generator point of the respective curve group.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = ikm
    pk = DH-Function(sk, G)


Sub-Kem-Encaps(pk, ikm, ctx) -> (k, c)

    (pk', sk') = Sub-Kem-Derive-Key-Pair(ikm)

    k = DH-Function(sk', pk)
    c = pk'


Sub-Kem-Decaps(sk, c, ctx) -> k

    k = DH-Function(sk, c)
]]></sourcecode>
          </li>
        </ul>
        <t>Note: This instance intentionally ignores the <tt>ctx</tt> parameter of <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
      </section>
      <section anchor="blinding-kem-same-key">
        <name>Using the same key for both key blinding and KEM</name>
        <t>When an ARKG instance uses the same type of key for both the key blinding and the KEM -
for example, if elliptic curve arithmetic is used for key blinding as described in <xref target="blinding-ec"/>
and ECDH is used as the KEM as described in <xref target="kem-ecdh"/> <xref target="Frymann2020"/> -
then the two keys <bcp14>MAY</bcp14> be the same key.
Representations of such an ARKG seed <bcp14>MAY</bcp14> allow for omitting the second copy of the constituent key,
but such representations <bcp14>MUST</bcp14> clearly identify that the single constituent key is to be used
both as the key blinding key and the KEM key.</t>
      </section>
    </section>
    <section anchor="concrete-arkg-instantiations">
      <name>Concrete ARKG instantiations</name>
      <t>This section defines an initial set of concrete ARKG instantiations.</t>
      <t>TODO: IANA registry? COSE/JOSE?</t>
      <section anchor="ARKG-P256">
        <name>ARKG-P256</name>
        <t>The identifier <tt>ARKG-P256</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P384">
        <name>ARKG-P384</name>
        <t>The identifier <tt>ARKG-P384</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-384 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 384 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P521">
        <name>ARKG-P521</name>
        <t>The identifier <tt>ARKG-P521</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-512 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 512 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P256k">
        <name>ARKG-P256k</name>
        <t>The identifier <tt>ARKG-P256k</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
    </section>
    <section anchor="cose">
      <name>COSE bindings</name>
      <t>This section proposes additions to COSE <xref target="RFC9052"/> to support ARKG use cases.
These consist of a new key type to represent ARKG public seeds,
algorithm identifiers for signing using an ARKG-derived private key,
and new <tt>COSE_Sign_Args</tt> <xref target="I-D.lundberg-cose-split-algs"/> algorithm parameters for ARKG.</t>
      <section anchor="cose-arkg-pub-seed">
        <name>COSE key type: ARKG public seed</name>
        <t>An ARKG public seed is represented as a COSE_Key structure <xref target="RFC9052"/>
with <tt>kty</tt> value TBD (placeholder value -65537).
<xref target="tbl-arkg-pub-params"/> defines key type parameters <tt>pkbl</tt> (-1) and <tt>pkkem</tt> (-2) for the <tt>BL</tt> and <tt>KEM</tt> public key, respectively,
as well as key type parameter <tt>dkalg</tt> (-3), representing the algorithm that derived public and private keys are to be used with.</t>
        <table anchor="tbl-arkg-pub-params">
          <name>COSE key type parameters for the ARKG-pub key type.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Value type</th>
              <th align="left">Required?</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">pkbl</td>
              <td align="left">-1</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">BL key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">pkkem</td>
              <td align="left">-2</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">KEM key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">dkalg</td>
              <td align="left">-3</td>
              <td align="left">int / tstr</td>
              <td align="left">Optional</td>
              <td align="left">
                <tt>alg</tt> parameter of public and private keys derived from this ARKG public seed</td>
            </tr>
          </tbody>
        </table>
        <t>When <tt>dkalg</tt> (-3) is present in an ARKG public seed,
the <tt>alg</tt> (3) parameter of public keys derived using <tt>ARKG-Derive-Public-Key</tt> with that seed
<bcp14>SHOULD</bcp14> be set to the <tt>dkalg</tt> (-3) value of the seed.</t>
        <t>The <tt>alg</tt> (3) parameter, when present,
identifies the ARKG instance this public seed is to be used with.
An initial set of COSE algorithm identifiers for this purpose is defined in <xref target="cose-algs-arkg"/>.</t>
        <t>The following CDDL <xref target="RFC8610"/> example represents an <tt>ARKG-P256</tt> public seed
restricted to generating derived keys for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65537,   ; kty: ARKG-pub (placeholder value)
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65700,   ; alg: ARKG-P256 (placeholder value)

  -1: {        ; BL public key
    1: 2,      ; kty: EC2
    -1: 1,     ; crv: P256
    -2: h'69380FC1C3B09652134FEEFBA61776F9
          7AF875CE46CA20252C4165102966EBC5',
    -3: h'8B515831462CCB0BD55CBA04BFD50DA6
          3FAF18BD845433622DAF97C06A10D0F1',
  },

  -2: {        ; KEM public key
    1: 2,      ; kty: EC2
    -1: 1,     ; crv: P256
    -2: h'5C099BEC31FAA581D14E208250D3FFDA
          9EC7F543043008BC84967A8D875B5D78',
    -3: h'539D57429FCB1C138DA29010A155DCA1
          4566A8F55AC2F1780810C49D4ED72D58',
  },

  -3: -9       ; Derived key algorithm: ESP256
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a6013a0001000002582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d2033a000100a320a40102200121582069380fc1c3b096
  52134feefba61776f97af875ce46ca20252c4165102966ebc52258208b515831
  462ccb0bd55cba04bfd50da63faf18bd845433622daf97c06a10d0f121a40102
  20012158205c099bec31faa581d14e208250d3ffda9ec7f543043008bc84967a
  8d875b5d78225820539d57429fcb1c138da29010a155dca14566a8f55ac2f178
  0810c49d4ed72d582228'
]]></artwork>
      </section>
      <section anchor="cose-algs-arkg">
        <name>COSE algorithms</name>
        <t>This section defines COSE algorithm identifiers <xref target="RFC9052"/> for ARKG instances,
and for signature algorithms combined with using a signing private key derived using ARKG.</t>
        <t><xref target="tbl-cose-algs-arkg"/> defines algorithm identifiers to represent ARKG instances.</t>
        <table anchor="tbl-cose-algs-arkg">
          <name>COSE algorithm identifiers for ARKG instances.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ARKG-P256</td>
              <td align="left">TBD (placeholder -65700)</td>
              <td align="left">The ARKG instance <tt>ARKG-P256</tt> defined in <xref target="ARKG-P256"/>.</td>
            </tr>
            <tr>
              <td align="left">ARKG-P384</td>
              <td align="left">TBD (placeholder -65701)</td>
              <td align="left">The ARKG instance <tt>ARKG-P384</tt> defined in <xref target="ARKG-P384"/>.</td>
            </tr>
            <tr>
              <td align="left">ARKG-P521</td>
              <td align="left">TBD (placeholder -65702)</td>
              <td align="left">The ARKG instance <tt>ARKG-P521</tt> defined in <xref target="ARKG-P521"/>.</td>
            </tr>
            <tr>
              <td align="left">ARKG-P256k</td>
              <td align="left">TBD (placeholder -65703)</td>
              <td align="left">The ARKG instance <tt>ARKG-P256k</tt> defined in <xref target="ARKG-P256k"/>.</td>
            </tr>
          </tbody>
        </table>
        <t><xref target="tbl-cose-algs-arkg-sign"/> defines algorithm identifiers to represent signing algorithms.
These <bcp14>MAY</bcp14> be used to negotiate algorithm selection between a <em>digester</em> and <em>signer</em>
as described in <xref section="2" sectionFormat="of" target="I-D.lundberg-cose-split-algs"/>,
and in key representations exchanged between such <em>digesters</em> and <em>signers</em>,
but <bcp14>SHOULD NOT</bcp14> appear in COSE structures consumed by signature verifiers.
COSE structures consumed by signature verifiers <bcp14>SHOULD</bcp14> instead use the corresponding algorithm identifier
listed in the "verification algorithm" column.</t>
        <table anchor="tbl-cose-algs-arkg-sign">
          <name>COSE algorithms for signing with an ARKG-derived key.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Verification algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ESP256-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-9 (ESP256)</td>
              <td align="left">ESP256 <xref target="I-D.jose-fully-spec-algs"/> using private key derived by ARKG-P256 (<xref target="ARKG-P256"/>).</td>
            </tr>
            <tr>
              <td align="left">ESP256-split-ARKG</td>
              <td align="left">TBD (placeholder -65539)</td>
              <td align="left">-9 (ESP256)</td>
              <td align="left">ESP256-split <xref target="I-D.lundberg-cose-split-algs"/> using private key derived by ARKG-P256 (<xref target="ARKG-P256"/>).</td>
            </tr>
            <tr>
              <td align="left">ESP384-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-51 (ESP384)</td>
              <td align="left">ESP384 <xref target="I-D.jose-fully-spec-algs"/> using private key derived by ARKG-P384 (<xref target="ARKG-P384"/>).</td>
            </tr>
            <tr>
              <td align="left">ESP384-split-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-51 (ESP384)</td>
              <td align="left">ESP384-split <xref target="I-D.lundberg-cose-split-algs"/> using private key derived by ARKG-P384 (<xref target="ARKG-P384"/>).</td>
            </tr>
            <tr>
              <td align="left">ESP521-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-52 (ESP521)</td>
              <td align="left">ESP521 <xref target="I-D.jose-fully-spec-algs"/> using private key derived by ARKG-P521 (<xref target="ARKG-P521"/>).</td>
            </tr>
            <tr>
              <td align="left">ESP521-split-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-52 (ESP521)</td>
              <td align="left">ESP521-split <xref target="I-D.lundberg-cose-split-algs"/> using private key derived by ARKG-P521 (<xref target="ARKG-P521"/>).</td>
            </tr>
            <tr>
              <td align="left">ES256K-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-47 (ES256K)</td>
              <td align="left">ES256K <xref target="RFC8812"/> using private key derived by ARKG-P256k (<xref target="ARKG-P256k"/>).</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="cose-sign-args-arkg">
        <name>COSE signing arguments</name>
        <t>This section defines ARKG-specific parameters for the <tt>COSE_Sign_Args</tt> structure <xref target="I-D.lundberg-cose-split-algs"/>.
These consist of the parameters -1 and -2 respectively
for the <tt>kh</tt> and <tt>ctx</tt> parameters of <tt>ARKG-Derive-Private-Key</tt>.
<xref target="tbl-cose-args-arkg"/> defines these algorithm parameters for <tt>COSE_Sign_args</tt>.
<tt>kh</tt> and <tt>ctx</tt> are both <bcp14>REQUIRED</bcp14> for all the relevant <tt>alg</tt> values.</t>
        <table anchor="tbl-cose-args-arkg">
          <name>Algorithm parameters for COSE_Sign_Args.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Type</th>
              <th align="left">Required?</th>
              <th align="left">Algorithm</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">kh</td>
              <td align="left">-1</td>
              <td align="left">bstr</td>
              <td align="left">Required</td>
              <td align="left">ESP256-ARKG, ESP256-split-ARKG, ESP384-ARKG, ESP384-split-ARKG, ESP521-ARKG, ESP521-split-ARKG, ES256K-ARKG</td>
              <td align="left">
                <tt>kh</tt> argument to <tt>ARKG-Derive-Private-Key</tt>.</td>
            </tr>
            <tr>
              <td align="left">ctx</td>
              <td align="left">-2</td>
              <td align="left">bstr</td>
              <td align="left">Required</td>
              <td align="left">ESP256-ARKG, ESP256-split-ARKG, ESP384-ARKG, ESP384-split-ARKG, ESP521-ARKG, ESP521-split-ARKG, ES256K-ARKG</td>
              <td align="left">
                <tt>ctx</tt> argument to <tt>ARKG-Derive-Private-Key</tt>.</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL example conveys the <tt>kh</tt> and <tt>ctx</tt> arguments for signing data
using the ESP256-split algorithm <xref target="I-D.lundberg-cose-split-algs"/>
and a key derived using <tt>ARKG-P256</tt>:</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>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a3033a0001000220585127987995f184a44cfa548d104b0a461d0487fc739dbc
  dabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea906
  0fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361215641524b
  472d503235362e7465737420766563746f7273'
]]></artwork>
      </section>
    </section>
    <section anchor="Security">
      <name>Security Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="Privacy">
      <name>Privacy Considerations</name>
      <t>TODO</t>
    </section>
    <section anchor="IANA">
      <name>IANA Considerations</name>
      <section anchor="cose-key-types-registrations">
        <name>COSE Key Types Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Types" registry <xref target="IANA.cose"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Name: ARKG-pub
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65537)</t>
              </li>
              <li>
                <t>Description: ARKG public seed</t>
              </li>
              <li>
                <t>Capabilities: [kty(-65537), pk_bl, pk_kem]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-arkg-pub-seed"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="cose-key-type-parameters-registrations">
        <name>COSE Key Type Parameters Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Type Parameters" registry <xref target="IANA.cose"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Key Type: TBD (ARKG-pub, placeholder -65537)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: pk_bl</t>
              </li>
              <li>
                <t>Label: -1</t>
              </li>
              <li>
                <t>CBOR Type: COSE_Key</t>
              </li>
              <li>
                <t>Description: ARKG key blinding public key</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-arkg-pub-seed"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Key Type: TBD (ARKG-pub, placeholder -65537)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: pk_kem</t>
              </li>
              <li>
                <t>Label: -2</t>
              </li>
              <li>
                <t>CBOR Type: COSE_Key</t>
              </li>
              <li>
                <t>Description: ARKG key encapsulation public key</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-arkg-pub-seed"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="cose-algorithms-registrations">
        <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: ARKG-P256
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65700)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp256r1</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ARKG-P384
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65701)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp384r1</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ARKG-P521
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65702)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp521r1</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ARKG-P256k
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65703)</t>
              </li>
              <li>
                <t>Description: ARKG using ECDH and additive blinding on secp256k1</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP256-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP256 using private key derived by ARKG-P256</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.jose-fully-spec-algs"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP256-split-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (placeholder -65539)</t>
              </li>
              <li>
                <t>Description: ESP256-split using private key derived by ARKG-P256</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-split-algs"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP384-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP384 using private key derived by ARKG-P384</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.jose-fully-spec-algs"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP384-split-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP384-split using private key derived by ARKG-P384</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-split-algs"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP521-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP521 using private key derived by ARKG-P521</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.jose-fully-spec-algs"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP521-split-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP521-split using private key derived by ARKG-P521</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-split-algs"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP256K-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP256K using private key derived by ARKG-P256k</t>
              </li>
              <li>
                <t>Reference: <xref target="RFC8812"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="cose-signing-arguments-algorithm-parameters-registrations">
        <name>COSE Signing Arguments Algorithm Parameters Registrations</name>
        <t>This section registers the following values
in the IANA "COSE Signing Arguments Algorithm Parameters" registry <xref target="I-D.lundberg-cose-split-algs"/> (TODO):</t>
        <ul spacing="normal">
          <li>
            <t>Name: kh
            </t>
            <ul spacing="normal">
              <li>
                <t>Label: -1</t>
              </li>
              <li>
                <t>Type: bstr</t>
              </li>
              <li>
                <t>Required: yes</t>
              </li>
              <li>
                <t>Algorithm: ESP256-ARKG, ESP256-split-ARKG, ESP384-ARKG, ESP384-split-ARKG, ESP521-ARKG, ESP521-split-ARKG, ES256K-ARKG</t>
              </li>
              <li>
                <t>Description: <tt>kh</tt> argument to <tt>ARKG-Derive-Private-Key</tt>.</t>
              </li>
              <li>
                <t>Capabilities: [alg(-65539, TBD)]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-sign-args-arkg"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ctx
            </t>
            <ul spacing="normal">
              <li>
                <t>Label: -2</t>
              </li>
              <li>
                <t>Type: bstr</t>
              </li>
              <li>
                <t>Required: yes</t>
              </li>
              <li>
                <t>Algorithm: ESP256-ARKG, ESP256-split-ARKG, ESP384-ARKG, ESP384-split-ARKG, ESP521-ARKG, ESP521-split-ARKG, ES256K-ARKG</t>
              </li>
              <li>
                <t>Description: <tt>ctx</tt> argument to <tt>ARKG-Derive-Private-Key</tt>.</t>
              </li>
              <li>
                <t>Capabilities: [alg(-65539, TBD)]</t>
              </li>
              <li>
                <t>Change Controller: IETF</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-sign-args-arkg"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="design-rationale">
      <name>Design rationale</name>
      <section anchor="design-rationale-mac">
        <name>Using a MAC</name>
        <t>The ARKG construction by Wilson <xref target="Wilson"/> omits the MAC and instead encodes application context in the PRF labels,
arguing that this leads to invalid keys/signatures in cases that would have a bad MAC.
We choose to keep the MAC from the construction by Frymann et al. <xref target="Frymann2020"/>,
but allow it to be omitted in case the chosen KEM already guarantees ciphertext integrity.</t>
        <t>The reason for this is to ensure that the delegating party can distinguish key handles that belong to its ARKG seed.
For example, this is important for applications using the W3C Web Authentication API [WebAuthn],
which do not know beforehand which authenticators are connected and available.
Instead, authentication requests may include references to several eligible authenticators,
and the one to use is chosen opportunistically by the WebAuthn client depending on which are available at the time.
Consider using ARKG in such a scenario to sign some data with a derived private key:
a user may have several authenticators and thus several ARKG seeds,
so the signing request might include several well-formed ARKG key handles,
but only one of them belongs to the ARKG seed of the authenticator that is currently connected.
Without an integrity check,
choosing the wrong key handle might cause the <tt>ARKG-Derive-Private-Key</tt> procedure to silently derive the wrong key
instead of returning an explicit error, which would in turn lead to an invalid signature or similar final output.
This would make it difficult or impossible to diagnose the root cause of the issue and present actionable user feedback.
For this reason, we require the KEM to guarantee ciphertext integrity
so that <tt>ARKG-Derive-Private-Key</tt> can fail early if the key handle belongs to a different ARKG seed.</t>
        <t>It is straightforward to see that adding the MAC to the construction by Wilson
does not weaken the security properties defined by Frymann et al. <xref target="Frymann2020"/>:
the construction by Frymann et al. can be reduced to the ARKG construction in this document
by instantiating <tt>BL</tt> as described in <xref target="blinding-ec"/>
and <tt>KEM</tt> as described in <xref target="kem-ecdh"/>.
The use of hash_to_field in <xref target="blinding-ec"/> corresponds to the KDF<sub>1</sub> parameter in <xref target="Frymann2020"/>,
and the use of HMAC and HKDF in <xref target="hmac-kem"/> corresponds to the MAC and KDF<sub>2</sub> parameters in <xref target="Frymann2020"/>.
Hence if one can break PK-unlinkability or SK-security of the ARKG construction in this document,
one can also break the same property of the construction by Frymann et al.</t>
      </section>
      <section anchor="implementation-status">
        <name>Implementation Status</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.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="I-D.lundberg-cose-split-algs">
          <front>
            <title>Split signing algorithms for COSE</title>
            <author fullname="Emil Lundberg" initials="E." surname="Lundberg">
              <organization>Yubico</organization>
            </author>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <date day="7" month="July" year="2025"/>
            <abstract>
              <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>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-02"/>
        </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>
          </front>
        </reference>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC6090">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <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="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </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="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="RFC8812">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) and JSON Object Signing and Encryption (JOSE) Registrations for Web Authentication (WebAuthn) Algorithms</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>The W3C Web Authentication (WebAuthn) specification and the FIDO Alliance FIDO2 Client to Authenticator Protocol (CTAP) specification use CBOR Object Signing and Encryption (COSE) algorithm identifiers. This specification registers the following algorithms (which are used by WebAuthn and CTAP implementations) in the IANA "COSE Algorithms" registry: RSASSA-PKCS1-v1_5 using SHA-256, SHA-384, SHA-512, and SHA-1; and Elliptic Curve Digital Signature Algorithm (ECDSA) using the secp256k1 curve and SHA-256. It registers the secp256k1 elliptic curve in the IANA "COSE Elliptic Curves" registry. Also, for use with JSON Object Signing and Encryption (JOSE), it registers the algorithm ECDSA using the secp256k1 curve and SHA-256 in the IANA "JSON Web Signature and Encryption Algorithms" registry and the secp256k1 elliptic curve in the IANA "JSON Web Key Elliptic Curve" registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8812"/>
          <seriesInfo name="DOI" value="10.17487/RFC8812"/>
        </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="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="SEC1" target="http://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="SEC2" target="http://www.secg.org/sec2-v2.pdf">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2010"/>
          </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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BIP32" target="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki">
          <front>
            <title>BIP 32 Hierarchical Deterministic Wallets</title>
            <author initials="P." surname="Wuille" fullname="Pieter Wuille">
              <organization/>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="Clermont" target="https://www.cryptoplexity.informatik.tu-darmstadt.de/media/crypt/teaching_1/theses_1/Sebastian_Clermont_Thesis.pdf">
          <front>
            <title>Post Quantum Asynchronous Remote Key Generation. Master's thesis</title>
            <author initials="S. A." surname="Clermont" fullname="Sebastian A. Clermont">
              <organization>Technische Universität Darmstadt</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="WebAuthn-Recovery" target="https://github.com/Yubico/webauthn-recovery-extension">
          <front>
            <title>WebAuthn recovery extension: Asynchronous delegated key generation without shared secrets. GitHub</title>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="Frymann2020" target="https://eprint.iacr.org/2020/1004">
          <front>
            <title>Asynchronous Remote Key Generation: An Analysis of Yubico's Proposal for W3C WebAuthn. CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="F." surname="Kiefer" fullname="Franziskus Kiefer">
              <organization/>
            </author>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Frymann2023" target="https://eprint.iacr.org/2023/419">
          <front>
            <title>Asynchronous Remote Key Generation for Post-Quantum Cryptosystems from Lattices. 2023 IEEE 8th European Symposium on Security and Privacy</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Shoup" target="https://www.shoup.net/papers/iso-2.pdf">
          <front>
            <title>A Proposal for an ISO Standard for Public Key Encryption (version 2.0)</title>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization>IBM Zurich Research Lab</organization>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="Wilson" target="http://hdl.handle.net/10012/19316">
          <front>
            <title>Post-Quantum Account Recovery for Passwordless Authentication. Master's thesis</title>
            <author initials="S. M." surname="Wilson" fullname="Spencer MacLaren Wilson">
              <organization>University of Waterloo,</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1261?>

<section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>ARKG was first proposed under this name by Frymann et al. <xref target="Frymann2020"/>,
who analyzed a proposed extension to W3C Web Authentication by Lundberg and Nilsson <xref target="WebAuthn-Recovery"/>,
which was in turn inspired by a similar construction by Wuille <xref target="BIP32"/> used to create privacy-preserving Bitcoin addresses.
Frymann et al. <xref target="Frymann2020"/> generalized the constructions by Lundberg, Nilsson and Wuille
from elliptic curves to any discrete logarithm (DL) problem,
and also proved the security of arbitrary asymmetric protocols composed with ARKG.
Further generalizations to include quantum-resistant instantiations
were developed independently by Clermont <xref target="Clermont"/>, Frymann et al. <xref target="Frymann2023"/> and Wilson <xref target="Wilson"/>.</t>
      <t>This document adopts the construction proposed by Wilson <xref target="Wilson"/>,
modified by the inclusion of a MAC in the key handles as done in the original construction by Frymann et al. <xref target="Frymann2020"/>.</t>
      <t>The authors would like to thank all of these authors for their research and development work that led to the creation of this document.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section lists test vectors for validating implementations.</t>
      <t>Test vectors are listed in CDDL <xref target="RFC8610"/> syntax
using variable names defined in <xref target="arkg"/> and <xref target="generic-formulae"/>.
Elliptic curve points are encoded using the <tt>Elliptic-Curve-Point-to-Octet-String</tt> procedure
defined in section 2.3.3 of <xref target="SEC1"/>, without point compression.</t>
      <section anchor="arkg-p256">
        <name>ARKG-P256</name>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx         = 'ARKG-P256.test vectors'
ikm_bl      = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem     = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm         = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed:
DST_bl_sk   = h'41524b472d424c2d45432d4b472e41524b472d50323536'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
pk_bl       = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
                  65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem      = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
                  dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl       = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem      = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key:
ctx_bl      = h'41524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
ctx_kem     = h'41524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
ctx_sub     = h'41524b472d4b454d2d484d41432e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
k_prime     = h'fa027ebc49603a2a41052479f6e9f6d046175df2f00cecb403f53ffcd1cc698f'
c_prime     = h'0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
info_mk     = h'41524b472d4b454d2d484d41432d6d61632e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
mk          = h'796c615d19ca0044df0a22d64ba8d5367dca18da32b871a3e255db0af7eb53c9'
t           = h'27987995f184a44cfa548d104b0a461d'
info_k      = h'41524b472d4b454d2d484d41432d7368617265642e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
k           = h'cf5e8ddbb8078a6a0144d4412f22f89407ecee30ec128ce07836af9fc51c05d0'
c           = h'27987995f184a44cfa548d104b0a461d0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
ikm_tau     = h'cf5e8ddbb8078a6a0144d4412f22f89407ecee30ec128ce07836af9fc51c05d0'
DST_tau     = h'41524b472d424c2d45432e41524b472d5032353641524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
tau         = 0x9e042fde2e12c1f4002054a8feac60088cc893b4838423c26a20af686c8c16e3
pk_prime    = h'04572a111ce5cfd2a67d56a0f7c684184b16ccd212490dc9c5b579df749647d107
                  dac2a1b197cc10d2376559ad6df6bc107318d5cfb90def9f4a1f5347e086c2cd'
kh          = h'27987995f184a44cfa548d104b0a461d0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'

; Derive-Private-Key:
sk_prime    = 0x775d7fe9a6dfba43ce671cb38afca3d272c4d14aff97bd67559eb500a092e5e7
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx         = 'ARKG-P256.test vectors'
ikm_bl      = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem     = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm         = h'a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf'

; Derive-Seed:
DST_bl_sk   = h'41524b472d424c2d45432d4b472e41524b472d50323536'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
pk_bl       = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
                  65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem      = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
                  dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl       = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem      = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key:
ctx_bl      = h'41524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
ctx_kem     = h'41524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
ctx_sub     = h'41524b472d4b454d2d484d41432e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
k_prime     = h'38c79546fc4a144ae2068ff0b515fc9af032b8255a78a829e71be47676a63117'
c_prime     = h'0457fd1e438280c127dd55a6138d1baf0a35e3e9671f7e42d8345f47374afa83247a078fa2196cd69497aed59ef92c05cb6b03d306ec24f2f4ff2db09cd95d1b11'
info_mk     = h'41524b472d4b454d2d484d41432d6d61632e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
mk          = h'0806abac4c1d205c3a8826cd178fbf7f91741268e3ca73634035efd76085d2a9'
t           = h'b7507a82771776fbac41a18d94e19a7e'
info_k      = h'41524b472d4b454d2d484d41432d7368617265642e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
k           = h'dcdd95c742ddf25b8a95f3d76326cb3593b7860bb3e04c5e5b25cc15ce1e5c84'
c           = h'b7507a82771776fbac41a18d94e19a7e0457fd1e438280c127dd55a6138d1baf0a35e3e9671f7e42d8345f47374afa83247a078fa2196cd69497aed59ef92c05cb6b03d306ec24f2f4ff2db09cd95d1b11'
ikm_tau     = h'dcdd95c742ddf25b8a95f3d76326cb3593b7860bb3e04c5e5b25cc15ce1e5c84'
DST_tau     = h'41524b472d424c2d45432e41524b472d5032353641524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
tau         = 0x88cf9464b041a52cf2b837281afc67302ec9cb32da1fe515381b79c0d0c92322
pk_prime    = h'04ea7d962c9f44ffe8b18f1058a471f394ef81b674948eefc1865b5c021cf858f5
                  77f9632b84220e4a1444a20b9430b86731c37e4dcb285eda38d76bf758918d86'
kh          = h'b7507a82771776fbac41a18d94e19a7e0457fd1e438280c127dd55a6138d1baf0a35e3e9671f7e42d8345f47374afa83247a078fa2196cd69497aed59ef92c05cb6b03d306ec24f2f4ff2db09cd95d1b11'

; Derive-Private-Key:
sk_prime    = 0x6228e470290e9d7cc0feff32a74caafa14c608c956337eba23997f5904cff226
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx         = 'ARKG-P256.test vectors.0'
ikm_bl      = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem     = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm         = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed:
DST_bl_sk   = h'41524b472d424c2d45432d4b472e41524b472d50323536'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
pk_bl       = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
                  65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem      = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
                  dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl       = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem      = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key:
ctx_bl      = h'41524b472d4465726976652d4b65792d424c2e1841524b472d503235362e7465737420766563746f72732e30'
ctx_kem     = h'41524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
ctx_sub     = h'41524b472d4b454d2d484d41432e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
k_prime     = h'fa027ebc49603a2a41052479f6e9f6d046175df2f00cecb403f53ffcd1cc698f'
c_prime     = h'0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
info_mk     = h'41524b472d4b454d2d484d41432d6d61632e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
mk          = h'd342e45f224a7278f11cf1468922c8879f4529125181d4159e4bf9ee69842f04'
t           = h'81c4e65b552e52350b49864b98b87d51'
info_k      = h'41524b472d4b454d2d484d41432d7368617265642e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
k           = h'cde7e271f8da72e5fd2557de362420ddb170dce520362131670eb1080823a113'
c           = h'81c4e65b552e52350b49864b98b87d510487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
ikm_tau     = h'cde7e271f8da72e5fd2557de362420ddb170dce520362131670eb1080823a113'
DST_tau     = h'41524b472d424c2d45432e41524b472d5032353641524b472d4465726976652d4b65792d424c2e1841524b472d503235362e7465737420766563746f72732e30'
tau         = 0x513ea417b6cdc3536178fa81da36b4e5ecdc142c2d46a52e05257f21794e3789
pk_prime    = h'04b79b65d6bbb419ff97006a1bd52e3f4ad53042173992423e06e52987a037cb61
                  dd82b126b162e4e7e8dc5c9fd86e82769d402a1968c7c547ef53ae4f96e10b0e'
kh          = h'81c4e65b552e52350b49864b98b87d510487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'

; Derive-Private-Key:
sk_prime    = 0x2a97f4232f9abba32fbfc28c6686f8afd2d851c2a95a3ed2f0a384b9ad55068d
]]></sourcecode>
      </section>
      <section anchor="other-instances">
        <name>Other instances</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>-09</t>
      <ul spacing="normal">
        <li>
          <t>Fixed <tt>hash_to_field</tt> argument <tt>ikm_tau</tt> misnamed as <tt>tau</tt>
in section "Using elliptic curve addition for key blinding".</t>
        </li>
        <li>
          <t>Updated to match draft -02 of <xref target="I-D.lundberg-cose-split-algs"/>.
          </t>
          <ul spacing="normal">
            <li>
              <t>COSE algorithm identifier definitions for ARKG instances moved
from section "COSE key type: ARKG public seed" to new section "COSE algorithms".</t>
            </li>
            <li>
              <t>Added COSE algorithm identifier definitions for signature algorithms with key derived using ARKG.</t>
            </li>
            <li>
              <t>COSE key type <tt>Ref-ARKG-Derived</tt> deleted in favour of new <tt>COSE_Sign_Args</tt> algorithm parameters.</t>
            </li>
            <li>
              <t>Section "COSE key reference type: ARKG derived private key" replaced
with "COSE signing arguments".</t>
            </li>
            <li>
              <t>Added section "COSE Signing Arguments Algorithm Parameters Registrations"</t>
            </li>
          </ul>
        </li>
      </ul>
      <t>-08</t>
      <ul spacing="normal">
        <li>
          <t>Fixed incorrectly swapped <tt>ikm_bl</tt> and <tt>ikm_kem</tt> arguments in <tt>ARKG-Derive-Seed</tt> definition.</t>
        </li>
        <li>
          <t>Extracted parameter function <tt>BL-PRF</tt> and modified signatures
of <tt>BL-Blind-Public-Key</tt> and <tt>BL-Blind-Private-Key</tt> accordingly.
This is an editorial refactorization; overall operation of concrete ARKG instances is unchanged.</t>
        </li>
        <li>
          <t>Removed three redundant sets of ARKG-P256 test vectors.</t>
        </li>
        <li>
          <t>Added intermediate values to ARKG-P256 test vectors.</t>
        </li>
        <li>
          <t>Changed second set of ARKG-P256 test vectors to use a 32-byte <tt>ikm</tt> instead of <tt>h'00'</tt>.</t>
        </li>
        <li>
          <t>Clarified in sections "Using HMAC to adapt a KEM without ciphertext integrity", "Using ECDH as the KEM"
and "Using X25519 or X448 as the KEM" that <tt>ctx_sub</tt> is intentionally ignored in those instances.</t>
        </li>
      </ul>
      <t>-07</t>
      <ul spacing="normal">
        <li>
          <t>Fixed hash_to_field DST in <tt>Sub-Kem-Derive-Key-Pair</tt> in section "Using ECDH as the KEM"
to agree with test vectors.</t>
        </li>
      </ul>
      <t>-06</t>
      <ul spacing="normal">
        <li>
          <t>Changed DST construction in section "Using ECDH as the KEM" to include the "ARKG-ECDH." prefix everywhere in the formula.
Previously the prefix was added in the argument to the "Using HMAC to adapt a KEM without ciphertext integrity" formula
but not in the Sub-Kem functions defined in "Using ECDH as the KEM".</t>
        </li>
      </ul>
      <t>-05</t>
      <ul spacing="normal">
        <li>
          <t>Deleted concrete instances <tt>ARKG-curve25519ADD-X25519</tt>, <tt>ARKG-curve448ADD-X448</tt>,
<tt>ARKG-edwards25519ADD-X25519</tt> and <tt>ARKG-edwards448ADD-X448</tt>
since implementations with a non-prime order generator, including EdDSA,
are incompatible with the additive blinding scheme defined in section "Using elliptic curve addition for key blinding".</t>
        </li>
        <li>
          <t>Remodeled procedures to be fully deterministic:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>BL-Generate-Keypair()</tt> replaced with <tt>BL-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>KEM-Generate-Keypair()</tt> replaced with <tt>KEM-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>ARKG-Generate-Seed()</tt> replaced with <tt>ARKG-Derive-Seed(ikm_bl, ikm_kem)</tt>.</t>
            </li>
            <li>
              <t>Parameter <tt>ikm</tt> added to <tt>ARKG-Derive-Public-Key</tt>.</t>
            </li>
            <li>
              <t>Instance parameter <tt>hash-to-crv-suite</tt> added to generic formula "Using ECDH as the KEM",
affecting concrete instances <tt>ARKG-P256ADD-ECDH</tt>, <tt>ARKG-P384ADD-ECDH</tt>, <tt>ARKG-P521ADD-ECDH</tt> and <tt>ARKG-P256kADD-ECDH</tt>.</t>
            </li>
            <li>
              <t>Section "Deterministic key generation" deleted.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Flipped order of <tt>(pk_bl, pk_kem)</tt> and <tt>(sk_bl, sk_kem)</tt> parameter and return value tuples
for consistent ordering between BL and KEM throughout document.</t>
        </li>
        <li>
          <t><tt>info</tt> parameter renamed to <tt>ctx</tt>.</t>
        </li>
        <li>
          <t><tt>ctx</tt> length limited to at most 64 bytes.</t>
        </li>
        <li>
          <t>Encoding of <tt>ctx</tt> in <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt> now embeds the length of <tt>ctx</tt>.</t>
        </li>
        <li>
          <t>Renamed concrete instances and corresponding <tt>DST_ext</tt> values:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>ARKG-P256ADD-ECDH</tt> to <tt>ARKG-P256</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P384ADD-ECDH</tt> to <tt>ARKG-P384</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P521ADD-ECDH</tt> to <tt>ARKG-P521</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P256kADD-ECDH</tt> to <tt>ARKG-P256k</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t>Added ARKG-P256 test vectors.</t>
        </li>
      </ul>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>Extracted COSE_Key_Ref definition and COSE algorithm registrations to draft-lundberg-cose-two-party-signing-algs.</t>
        </li>
        <li>
          <t>Redefined alg (3) parameter and added dkalg (-3) in ARKG-pub COSE_Key.</t>
        </li>
        <li>
          <t>Defined alg (3) and inst (-3) parameters of Ref-ARKG-derived COSE key type.</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Renamed section "Using HMAC to adapt a KEM without {integrity protection =&gt; ciphertext integrity}".</t>
        </li>
        <li>
          <t>Fixed info argument to HMAC in section "Using HMAC to adapt a KEM without ciphertext integrity".</t>
        </li>
        <li>
          <t>Added reference to Shoup for definition of key encapsulation mechanism.</t>
        </li>
        <li>
          <t>Added CDDL definition of COSE_Key_Ref.</t>
        </li>
        <li>
          <t>Editorial fixes to references.</t>
        </li>
        <li>
          <t>Renamed proposed COSE Key Types.</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Rewritten introduction.</t>
        </li>
        <li>
          <t>Renamed ARKG-Derive-Secret-Key to ARKG-Derive-Private-Key.</t>
        </li>
        <li>
          <t>Overhauled EC instantiations to use hash_to_field and account for non-prime order curve key generation.</t>
        </li>
        <li>
          <t>Eliminated top-level MAC and KDF instance parameters.</t>
        </li>
        <li>
          <t>Added info parameter to instance parameter functions.</t>
        </li>
        <li>
          <t>Added requirement of KEM ciphertext integrity and generic formula for augmenting any KEM using HMAC.</t>
        </li>
        <li>
          <t>Added curve/edwards25519/448 instances.</t>
        </li>
        <li>
          <t>Added proposal for COSE bindings and key reference types.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial Fixes to formatting and references.</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial Version</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Dain Nilsson">
        <organization>Yubico</organization>
        <address>
      </address>
      </contact>
      <contact fullname="Peter Altmann">
        <organization>Agency for Digital Government</organization>
        <address>
          <postal>
            <country>SE</country>
          </postal>
        </address>
      </contact>
      <contact initials="M. B." surname="Jones" fullname="Michael B. Jones">
        <organization>Self-Issued Consulting</organization>
        <address>
          <postal>
            <country>United States</country>
          </postal>
          <uri>https://self-issued.info/</uri>
        </address>
      </contact>
      <contact fullname="Sander Dijkhuis">
        <organization>Cleverbase</organization>
        <address>
          <postal>
            <country>NL</country>
          </postal>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963bcOJLmfz4FVz5nJfUo07wnU9XVPbq6NL6O5e7qWY+P
BJKgxFYmmU0yJatdnmfZH/MkOy+2EQGABJlMSb5VVc+UTpWVSoJAIBCI+CIQ
AEajkVHVLE/O2KzI+a5Zl0tuZIuSPlW1Y1lTyzGMOqtn8PTNJTf3qts8viyL
vFhW5ms+L2puPuW35hOe85LVWZGbW3uvnz7ZNtnsoiiz+nJusCgq+fWuuYEP
NowZyy92TZ4bMas5lLndNbM8LQwjKeKczaGhpGRpPYpKlsz47WyZJxEvL0Zx
Cv+w8upiZE2NahnNs6qC9urbBbxycvTm2DQfQatVAS1lecIXHP7J640dc4Mn
WQ3EsBn+cbK3D7+KEj69fnO8YeTLOdS/ayRAzq4RF3nF82pZSW4A3a7BSs52
VfmbAmgoi+UCvjkobxd1YR4X5XK+YVzxW3iY7BrmyHx6eGxc83wJVZrmcHHT
FLRvvOYVZ2V8aT7BcvjgAhi3jODRvy2jLC4eU7fLNN4wDIMt68sC6B2ZZYHD
IjoHL6XL2Uww8GiezcxnknHwpCgvWJ79ncZn1xR1wtdVXXJe75pP/us/r2f8
goEomI4DD+KshlE5rYv46rKYzfGbYpnXOFSnR/AXn7NsBi1DM//M5zBC44ob
QFBLwb8Ul7m5L0ZwPQGynms++Wsd/bP4NY6LuYHDUJdZtKxFT9uKD1mWmy+y
WVUV+bqKOy+84jUvzb1ZPWf56ht7FzyPb80UxOEwA66zmfmkuOZlPgfR6fW7
U+3zLL5kfGbuj6GvOa+gbJaD0Dwfa9902zrls3R0UlVLnpgHIGbLWZ3lODzL
Mts1L+t6Ue0+flxhqYxKjXFePNap+FOe1fD2aQ2yWnUJOoV5zLEXf726XGar
rR/MOPQrYjBSWoUvnhlGXpRzKHRNonoyOhz/taj4CGu+HVULHo9gKkPP8ImY
mRmv01GvUJZmPBk1k76SVbWzF4tXi1lWr1TXLVPfFKMFK2uoNrvIgUFUHqvb
e7E3xiJI5uvjA8e2PPnRm3pT+dEPA/UxAO0lP04mXig/hpY9aT66jvoY2Kps
GNrq26nlNx/dkAqcHh3Y+BsmLysvcPbgwMG43dzcwCyIL8bAdhjE2B5dO+NF
klJZNWfx8wgHBsaDlzUI69xUs58ekhIyUfGKNoTm3YRWTRvm9WyWLeAt82BZ
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

-->

</rfc>
