<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bradleylundberg-cfrg-arkg-10" category="info" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="ARKG">The Asynchronous Remote Key Generation (ARKG) algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-bradleylundberg-cfrg-arkg-10"/>
    <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="2026" month="February" day="27"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>KDF</keyword>
    <abstract>
      <?line 153?>

<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 170?>

<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="ASIACCS_SteWil24"/></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="CCS_FGKLMN20"/> <xref target="Wilson2023"/> <xref target="AC_BreCleFis24"/>.
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 between the functions
<tt>ARKG-Derive-Seed</tt>, <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt>.</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="Wilson2023"/>, consisting of:
            </t>
            <ul spacing="normal">
              <li>
                <t>Function <tt>BL-Generate-Keypair() -&gt; (pk, sk)</tt>: Generate 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="Wilson2023"/> 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="ASIACCS_SteWil24"/> 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 with <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt>.</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 with <tt>ARKG-Derive-Private-Key</tt>.</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="CCS_FGKLMN20"/> <xref target="Wilson2023"/>.
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="CCS_FGKLMN20"/> <xref target="ASIACCS_SteWil24"/>.
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="CCS_FGKLMN20"/> -
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="RFC9864"/> 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="RFC9864"/> 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="RFC9864"/> 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">ESP512-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-52 (ESP512)</td>
              <td align="left">ESP512 <xref target="RFC9864"/> using private key derived by ARKG-P521 (<xref target="ARKG-P521"/>).</td>
            </tr>
            <tr>
              <td align="left">ESP512-split-ARKG</td>
              <td align="left">TBD</td>
              <td align="left">-52 (ESP512)</td>
              <td align="left">ESP512-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, ESP512-ARKG, ESP512-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, ESP512-ARKG, ESP512-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="RFC9864"/>, <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="RFC9864"/>, <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: ESP512-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP512 using private key derived by ARKG-P521</t>
              </li>
              <li>
                <t>Reference: <xref target="RFC9864"/>, <xref target="cose-algs-arkg"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP512-split-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD</t>
              </li>
              <li>
                <t>Description: ESP512-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, ESP512-ARKG, ESP512-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, ESP512-ARKG, ESP512-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 Stebila et al. <xref target="ASIACCS_SteWil24"/> 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="CCS_FGKLMN20"/>,
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="CCS_FGKLMN20"/>:
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="CCS_FGKLMN20"/>,
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="CCS_FGKLMN20"/>.
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>
    <section anchor="impl-status">
      <name>Implementation Status</name>
      <t>This section is to be removed from the specification by the RFC Editor before publication as an RFC.</t>
      <t>There are currently two known implementations using features defined by this specification:</t>
      <ul spacing="normal">
        <li>
          <t><eref target="https://github.com/wwWallet">wwWallet</eref>, an EU Digital Identity pilot project.
wwWallet was entered into the
<eref target="https://www.sprind.org/en/actions/challenges/eudi-wallet-prototypes">"EUDI Wallet Prototypes" competition held by SprinD GmbH</eref>,
and a branch of the wallet was submitted in the competition.
The competition entry implements ARKG
for efficiently generating single-use hardware-bound holder binding keys.  </t>
          <t>
The <eref target="https://github.com/gunet/funke-s3a-wallet-frontend/blob/stage-3/src/services/keystore.ts">implementation</eref>
uses the <tt>COSE_Key_Ref</tt> data structure defined in version 01 of <xref target="I-D.lundberg-cose-split-algs"/>
in order to send ARKG inputs to a WebAuthn authenticator,
and uses the placeholder value for ESP256-split-ARKG defined in <xref target="cose-algs-arkg"/>
to negotiate creation and usage of ARKG-derived keys for signing operations.
Work to update the implementation to instead use <tt>COSE_Sign_Args</tt>
as defined in version 05 of <xref target="I-D.lundberg-cose-split-algs"/> is ongoing.</t>
        </li>
        <li>
          <t><eref target="https://www.yubico.com/">Yubico</eref>, a hardware security key vendor,
has produced limited-availability prototypes of their YubiKey product
with an ARKG implementation interoperable with wwWallet.
The YubiKey implementation uses the <tt>COSE_Sign_Args</tt> data structure defined in version 05 of <xref target="I-D.lundberg-cose-split-algs"/>
to receive ARKG inputs from a WebAuthn Relying Party,
and uses the placeholder value for ESP256-split-ARKG defined in <xref target="cose-algs-arkg"/>
to negotiate creation and usage of ARKG-derived keys for signing operations.</t>
        </li>
      </ul>
      <t><xref target="tbl-impl-status-matrix"/> summarizes implementation status for individual features.</t>
      <table anchor="tbl-impl-status-matrix">
        <name>Implementation status of individual features.</name>
        <thead>
          <tr>
            <th align="left">Feature</th>
            <th align="left">Implementations</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">ARKG-P256</td>
            <td align="left">wwWallet, Yubico</td>
          </tr>
          <tr>
            <td align="left">ARKG-P384</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ARKG-P521</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ARKG-P256k</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ESP256-ARKG</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ESP256-split-ARKG</td>
            <td align="left">wwWallet, Yubico</td>
          </tr>
          <tr>
            <td align="left">ESP384-ARKG</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ESP384-split-ARKG</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ESP512-ARKG</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ESP512-split-ARKG</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">ES256K-ARKG</td>
            <td align="left">-</td>
          </tr>
          <tr>
            <td align="left">
              <tt>COSE_Sign_Args</tt></td>
            <td align="left">wwWallet, Yubico</td>
          </tr>
        </tbody>
      </table>
      <section anchor="impl-status-dependencies">
        <name>Related Internet-Drafts</name>
        <t>Parts of this specification depend upon definitions from <xref target="I-D.lundberg-cose-split-algs"/>:</t>
        <ul spacing="normal">
          <li>
            <t>The algorithm identifiers ESP256-split-ARKG, ESP384-split-ARKG and ESP512-split-ARKG defined in <xref target="cose-algs-arkg"/>
depend respectively on the algorithm identifiers ESP256-split, ESP384-split and ESP512-split defined in <xref target="I-D.lundberg-cose-split-algs"/>.</t>
          </li>
          <li>
            <t>The ARKG-specific <tt>COSE_Sign_Args</tt> parameter definitions in <xref target="cose-sign-args-arkg"/>
depend on <xref target="I-D.lundberg-cose-split-algs"/> for the definition of the <tt>COSE_Sign_Args</tt> structure.</t>
          </li>
        </ul>
      </section>
      <section anchor="impl-status-future-work">
        <name>Future Work</name>
        <t>Hierarchical Deterministic Keys (HDK) <xref target="I-D.dijkhuis-cfrg-hdkeys"/> is a possible application of ARKG
which has identified a limitation in the present construction,
as discussed in <eref target="https://github.com/sander/hierarchical-deterministic-keys/issues/94">HDK GitHub issue #94</eref>.
ARKG can be used recursively - for example, ARKG-P256 can be used to derive P-256 keys that are themselves used as ARKG seeds -
but then requires one invocation of <tt>ARKG-Derive-Private-Key</tt> per layer of recursion
in order to derive higher-layer private keys.
This can be an issue if the base ARKG private seed is hardware-bound,
since it would require multiple calls to the secure hardware device,
especially if each of those calls requires a user gesture for authorization.
Therefore a modified ARKG construction has been proposed,
along with a <eref target="https://github.com/Yubico/arkg-rfc/blob/pqarkg-h/pqarkg-h-security/pqarkg-h.pdf">draft for a potential security proof</eref>,
which enables multiple layers of recursive ARKG to be condensed into a single invocation of <tt>ARKG-Derive-Private-Key</tt>.
We would have liked to use this modified construction in this specification,
but have not been able to get the potential proof appropriately peer reviewed in a timely manner,
so prototypes have moved forward with the present construction.
The modified construction may be revisited in the future if there is demand for applications,
in which case new algorithm identifiers and such can be defined for the modified construction.</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.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="23" month="February" year="2026"/>
            <abstract>
              <t>   This specification defines COSE algorithm identifiers for negotiating
   how to split a signature algorithm between two cooperating parties.
   Typically the first party hashes the data to be signed and the second
   party finishes the signature over the hashed data.  This is a common
   technique, useful for example when the signing private key is held in
   a smart card or similar hardware component with limited processing
   power and communication bandwidth.  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-05"/>
        </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="RFC9864">
          <front>
            <title>Fully-Specified Algorithms for JSON Object Signing and Encryption (JOSE) and CBOR Object Signing and Encryption (COSE)</title>
            <author fullname="M.B. Jones" initials="M.B." surname="Jones"/>
            <author fullname="O. Steele" initials="O." surname="Steele"/>
            <date month="October" 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.</t>
              <t>This specification updates RFCs 7518, 8037, and 9053. It deprecates polymorphic algorithms defined by RFCs 8037 and 9053 and provides fully-specified replacements for them. It adds to the instructions to designated experts in RFCs 7518 and 9053.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9864"/>
          <seriesInfo name="DOI" value="10.17487/RFC9864"/>
        </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="I-D.dijkhuis-cfrg-hdkeys">
          <front>
            <title>Hierarchical Deterministic Keys</title>
            <author fullname="Sander Dijkhuis" initials="S." surname="Dijkhuis">
              <organization>Cleverbase</organization>
            </author>
            <date day="19" month="January" year="2025"/>
            <abstract>
              <t>   Hierarchical Deterministic Keys enables managing large sets of keys
   bound to a secure cryptographic device that protects a single key.
   This enables the development of secure digital identity wallets
   providing many one-time-use public keys.  Some instantiations can be
   implemented in such a way that the secure cryptographic device does
   not need to support key blinding, enabling the use of devices that
   already are widely deployed.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-dijkhuis-cfrg-hdkeys-06"/>
        </reference>
        <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="AC_BreCleFis24" target="https://eprint.iacr.org/2023/1275">
          <front>
            <title>Post-Quantum Asynchronous Remote Key Generation for FIDO2 Account Recovery. ASIACRYPT '24</title>
            <author initials="J." surname="Brendel" fullname="Jacqueline Brendel">
              <organization/>
            </author>
            <author initials="S." surname="Clermont" fullname="Sebastian Clermont">
              <organization/>
            </author>
            <author initials="M." surname="Fischlin" fullname="Marc Fischlin">
              <organization>Technische Universität Darmstadt</organization>
            </author>
            <date year="2023"/>
          </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="CCS_FGKLMN20" 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="EUROSP_FryGarMan23" 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="ASIACCS_SteWil24" target="https://eprint.iacr.org/2024/678">
          <front>
            <title>Quantum-Safe Account Recovery for WebAuthn. ASIACCS '24</title>
            <author initials="D." surname="Stebila" fullname="Douglas Stebila">
              <organization/>
            </author>
            <author initials="S. M." surname="Wilson" fullname="Spencer MacLaren Wilson">
              <organization>University of Waterloo</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Wilson2023" 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 1348?>

<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 numbered="false" anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>ARKG was first proposed under this name by Frymann et al. <xref target="CCS_FGKLMN20"/>,
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="CCS_FGKLMN20"/> 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 Brendel et al. <xref target="AC_BreCleFis24"/>, Frymann et al. <xref target="EUROSP_FryGarMan23"/> and Wilson <xref target="Wilson2023"/>.</t>
      <t>This document adopts the construction proposed by Wilson <xref target="Wilson2023"/>,
modified by the inclusion of a MAC in the key handles as done in the original construction by Frymann et al. <xref target="CCS_FGKLMN20"/>.
The construction by Wilson <xref target="Wilson2023"/> was later refined by Stebila et al. <xref target="ASIACCS_SteWil24"/>,
but this revision replaced the "key blinding scheme" component with a "key-blinding signature scheme" component
which is not one-for-one compatible with the construction in the present revision of this specification.</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 numbered="false" anchor="document-history">
      <name>Document History</name>
      <t>-10</t>
      <ul spacing="normal">
        <li>
          <t>Fixed <tt>tau</tt> misspelled as <tt>tau'</tt> in body of <tt>BL-Blind-Private-Key</tt>
in section "Using elliptic curve addition for key blinding".</t>
        </li>
        <li>
          <t>Fixed definitions and references misspelling ESP512 as ESP521.</t>
        </li>
        <li>
          <t>Minor editorial clarifications.</t>
        </li>
        <li>
          <t>Updated informative references to research papers and changed citation style for the same.</t>
        </li>
        <li>
          <t>Made "Acknowledgements" and "Document History" sections un-numbered.</t>
        </li>
        <li>
          <t>Added Implementation Status section.</t>
        </li>
      </ul>
      <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:
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
PjnCHYrqPuGAKrf9Hd8S50HKaDDTaep4+OHAG3gyIh6rICLpnmFebGmaVeYZ
KbKClMcVnRNmJvD9WkauOUbvPRFBlKrOSIshfXwiq5D0VUmRT1IbVFnV4py+
1NVKHig9gqrMTRItQdYLJdmIrhZatKn2EqulWNt7zmubm5E3s0h04gWC09Cm
Pj5RH/s8hFmdNmeuYsdvkRE3jmhF6n1jFPy+p2La10Eg1ex1AVStOPD/ngXl
4jszYmvQjfju432itGRlSjJSS+jzsrnS/+tYZ1P5xaiusLgR0b3NqWF6yCW8
PetXeR/a9CmWmOK/9LeEAhFj/E4S9HsQ5TqChUIRoLGRnylTZuKEp3SoT8PT
WEfnby+AAdAIqxEZFbsSh+9Zfdze4LC0ntp4Uahpa2owzlOdKyNFaa4z5jFV
USbtoDtdZhKZQL7SL4tW+PBpRyoNzvqiyi9ono0QmiY7aLGClsnTfXbUPA4k
1QlxF6QXdP4jtD549fiw//yp0PckbutDogZ8W+RpApWzTufuMJCgj716IP31
yZ719GTr1fbOyvKa6voDCAb81q7JPeuV/mO+Zzn6jxei1vULE5crFKpb8w8L
LKEteb94tfmdXq9OwwJ/7h2oPosDlP7BegqM6p6o73qhhCZsLFNjjUy9X7Rc
WSvR96PXCwf/fbVocR4Rr66WVS4TrO+/0DroBX5M+HdP7jT8fFHNF4JGqCNl
RzUe2jvC4dq2nOpeqAf1hj7TlWLx2cv9Q1IQMcYLZAZaLKo4jmG51FbKxyc6
mIxS2SlV9x5nhhEm1tnhTq8ReYdV5tIkaltOUviLkDmVOIwTXonUwxdNH9Vn
yEbCAaUkyvg3PGO7F/gexvQUVJdeFOSQ2Fy1/YBBN0zI48OjZ7XH9P5RrD5B
1NIfRKJpUmqUUZf1+z1VOuPeIEJZNa6je+Wbo43++brBM9hGJJCbhQtwd+nt
+AjhrbultufLALbN/MFQcgp8VVq0KlJBcWCG5CdxaqZCfUJ/FP8QctgJeihS
18FuRAOk6rDQEMvY5OFlpHBb3a0ixUZ4u36+EsuwUz9qJC7U7WXygjAjW1O9
T8mRxq0CbKdHLOGdrOz+noZ59vzohL7Csu7vV/SiF7VqI/Th2tgUdFDnFA9E
4vHJ262/7FhZnXwcJwWYpJfZpbSMVZbJHR5vFwXAffkXqey9eX120dFDs6lm
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
nhvzxbehvxYc6LilCCF1JbsouCCuxYCZpPyGYaVb8pSJUlorwrFo6eH766Bp
It8QhbUv9+2qF3d/vbwTAkr+6rf+vO8z/AVjU13N2qsbCPep6Yc1xN7OqrzZ
MXn6zioz3TEZ1s4qp9hp7MafJI2owmtY0n4tXZBQpqKetTf514e/UYjvwQl0
ui6VT4MShu7Krr1TMwdT44pYxXr1lfYNmV7vj/t3ea++zbrLF03WV8uR6UlH
5tTwDTbGJk3wQW9h4+c7o31d73W11RalmsqjUcyGtYxLiTvyUTCRylpmKm2K
y1DK2hm3Lf2Ws013PJ2Mp9Nh7Ex85vthzIb+JHJsP7CZP3LqBB3bn4zjcOxN
oyCMWBC6U4+FQ380dV0nYlMHvUrc9sPRxLHHPg/xCRuP4piFwdT2vcicV+hO
/DFnU3tkx5HvRswdjePRaDJ0+cgbTqaxHdp2FE4msTu1o9HIDkdDBv8N7XAy
8kbodFzFEubnNohyDU1KT2V9eDyosMLlDcebV0vo+uv9cV7tOkOX2XAC++kB
RJv4BQi/DMU1XtEH9UWodZ3hyHeGrh+gPw6dV7bnekNv5PKxDxa5N/Zdezwa
DUfwaRSP3bGnHVvWuapMcYjiM+KFrlaonnwSIaHUmtYk7GgsH5htKYJ0pSF+
+6nWKvCEDQVLCbyRYk07Y1lFHCpZ+I0VlgUkpeVIA240u92o7/d6h88H+Pg9
XbCK4q0+2aBIBbLz9oShctY2VMa0BU05t3rQTS0O2UKUb094uWf9x7vr6m5L
9rBjNarz/8d7euENpyrdIQytjpEaB+WfdE3OKA9pr/RWMWid1RL9Z8GlMcA9
WFWtJRYVemHGa/AploHQQn+TugGc2xG4hE0q+1MnsmtWYc11Jl+M4K+ZCixt
Yy7uF8xl3W0rX08x+7Vf5JsSSt3v43adPC5qbrsOp+saJC2N+gSoG1Bozo1x
MXdOKWYiHHod1gzv9wrGxCtYwZdjzXICsD0F0MoenoLztVOgENmfawpggD48
Bfdrp0Bhkz/XFNBcfXgO3jegpOufYQ6GJdCaxCq80kf3OIO+Dar2qex8O6hr
k+OhBUBX37oJSYX8C6d1r+HwjeaqbLHHrBC6yB7nSfu5V6hpND4S9scvRtcM
fonFUIbvYyaEzsTH+eR+7sVoWuiPhP3xi9E1g19iMbSb4ZHM6/lj3ZFd60H+
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
FlXMev8PCkVCRm0UAQA=

-->

</rfc>
