<?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.27 (Ruby 3.3.6) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bradleylundberg-cfrg-arkg-06" category="info" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.1 -->
  <front>
    <title abbrev="ARKG">The Asynchronous Remote Key Generation (ARKG) algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-bradleylundberg-cfrg-arkg-06"/>
    <author fullname="Emil Lundberg" role="editor">
      <organization>Yubico</organization>
      <address>
        <postal>
          <street>Gävlegatan 22</street>
          <city>Stockholm</city>
          <country>SE</country>
        </postal>
        <email>emil@emlun.se</email>
      </address>
    </author>
    <author fullname="John Bradley">
      <organization>Yubico</organization>
      <address>
        <email>ve7jtb@ve7jtb.com</email>
      </address>
    </author>
    <date year="2025" month="April" day="16"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>KDF</keyword>
    <abstract>
      <?line 142?>

<t>Asynchronous Remote Key Generation (ARKG) is an abstract algorithm
that enables delegation of asymmetric public key generation without giving access to the corresponding private keys.
This capability enables a variety of applications:
a user agent can generate pseudonymous public keys to prevent tracking;
a message sender can generate ephemeral recipient public keys to enhance forward secrecy;
two paired authentication devices can each have their own private keys while each can register public keys on behalf of the other.</t>
      <t>This document provides three main contributions:
a specification of the generic ARKG algorithm using abstract primitives;
a set of formulae for instantiating the abstract primitives using concrete primitives;
and an initial set of fully specified concrete ARKG instances.
We expect that additional instances will be defined in the future.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-bradleylundberg-cfrg-arkg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/Yubico/arkg-rfc"/>.</t>
    </note>
  </front>
  <middle>
    <?line 159?>

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

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

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

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

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

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

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

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

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

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

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

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

    kh = c
]]></sourcecode>
        <t>If this procedure aborts due to an error,
the procedure can safely be retried with the same <tt>(pk_bl, pk_kem)</tt> and <tt>ctx</tt> arguments but a new <tt>ikm</tt> argument.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
        <section anchor="nondeterministic-variants-1">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Public-Key</tt> and <tt>KEM-Encaps</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameter
and sampling random entropy internally;
this choice does not affect interoperability.</t>
          <t><tt>BL-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'

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

    sk' = BL-Blind-Private-Key(sk_bl, tau, ctx_bl)
]]></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-arkg-instantiations">
      <name>Generic ARKG instantiations</name>
      <t>This section defines generic formulae for instantiating the individual ARKG parameters,
which can be used to define concrete ARKG instantiations.</t>
      <section anchor="blinding-ec">
        <name>Using elliptic curve addition for key blinding</name>
        <t>Instantiations of ARKG whose output keys are elliptic curve keys
can use elliptic curve addition as the key blinding scheme <tt>BL</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>BL</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: An elliptic curve.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation tag.</t>
          </li>
        </ul>
        <t>Then the <tt>BL</tt> parameter of ARKG may be instantiated as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>N</tt> is the order of <tt>G</tt>.</t>
          </li>
          <li>
            <t>The function <tt>hash_to_field</tt> is defined in <xref section="5" sectionFormat="of" target="RFC9380"/>.</t>
          </li>
        </ul>
        <sourcecode type="pseudocode"><![CDATA[
BL-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = hash_to_field(ikm, 1) with the parameters:
        DST: 'ARKG-BL-EC-KG.' || DST_ext
        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-Blind-Public-Key(pk, tau, ctx) -> pk_tau

    tau' = hash_to_field(tau, 1) with the parameters:
        DST: 'ARKG-BL-EC.' || DST_ext || ctx
        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_tau = pk + tau' * G


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

    tau' = hash_to_field(tau, 1) with the parameters:
        DST: 'ARKG-BL-EC.' || DST_ext || ctx
        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

    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'

    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')

    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.
    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>
      </section>
      <section anchor="kem-ecdh">
        <name>Using ECDH as the KEM</name>
        <t>Instantiations of ARKG can use ECDH <xref target="RFC6090"/> as the key encapsulation mechanism <tt>KEM</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: an elliptic curve valid for use with ECDH <xref target="RFC6090"/>.</t>
          </li>
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The above parameters define the following intermediate value:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DST_aug</tt>: <tt>'ARKG-ECDH.' || DST_ext</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: <tt>Hash</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>DST_aug</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Elliptic-Curve-Point-to-Octet-String</tt> and <tt>Octet-String-to-Elliptic-Curve-Point</tt>
are the conversion routines defined in sections 2.3.3 and 2.3.4 of <xref target="SEC1"/>,
without point compression.</t>
              </li>
              <li>
                <t><tt>ECDH(pk, sk)</tt> represents the compact output of ECDH <xref target="RFC6090"/>
using public key (curve point) <tt>pk</tt> and private key (exponent) <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
              </li>
              <li>
                <t><tt>N</tt> is the order of <tt>G</tt>.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = hash_to_field(ikm, 1) with the parameters:
        DST: DST_aug
        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>
      </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>
      </section>
      <section anchor="blinding-kem-same-key">
        <name>Using the same key for both key blinding and KEM</name>
        <t>When an ARKG instance uses the same type of key for both the key blinding and the KEM -
for example, if elliptic curve arithmetic is used for key blinding as described in <xref target="blinding-ec"/>
and ECDH is used as the KEM as described in <xref target="kem-ecdh"/> <xref target="Frymann2020"/> -
then the two keys <bcp14>MAY</bcp14> be the same key.
Representations of such an ARKG seed <bcp14>MAY</bcp14> allow for omitting the second copy of the constituent key,
but such representations <bcp14>MUST</bcp14> clearly identify that the single constituent key is to be used
both as the key blinding key and the KEM key.</t>
      </section>
    </section>
    <section anchor="concrete-arkg-instantiations">
      <name>Concrete ARKG instantiations</name>
      <t>This section defines an initial set of concrete ARKG instantiations.</t>
      <t>TODO: IANA registry? COSE/JOSE?</t>
      <section anchor="ARKG-P256">
        <name>ARKG-P256</name>
        <t>The identifier <tt>ARKG-P256</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P384">
        <name>ARKG-P384</name>
        <t>The identifier <tt>ARKG-P384</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-384 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 384 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P521">
        <name>ARKG-P521</name>
        <t>The identifier <tt>ARKG-P521</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-512 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 512 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P256k">
        <name>ARKG-P256k</name>
        <t>The identifier <tt>ARKG-P256k</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
    </section>
    <section anchor="cose">
      <name>COSE bindings</name>
      <t>This section proposes additions to COSE <xref target="RFC9052"/> to support ARKG use cases.
These consist of new key type definitions to represent ARKG public seeds
and references <xref target="I-D.lundberg-cose-2p-algs"/> to private keys derived using 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.
<xref target="tbl-arkg-pub-algs"/> defines an initial set of COSE algorithm identifiers for this purpose.</t>
        <table anchor="tbl-arkg-pub-algs">
          <name>COSE algorithm identifiers to represent 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 defined in <xref target="ARKG-P256"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P384</td>
              <td align="left">TBD (placeholder -65701)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P384"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P521</td>
              <td align="left">TBD (placeholder -65702)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P521"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P256k</td>
              <td align="left">TBD (placeholder -65703)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256k"/> of this document</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL <xref target="RFC8610"/> example represents an <tt>ARKG-P256</tt> public seed
restricted to generating derived keys for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65537,   ; kty: ARKG-pub (placeholder value)
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65700,   ; alg: ARKG-P256 (placeholder value)

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

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

  -3: -9       ; Derived key algorithm: ESP256
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a6013a0001000002582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d2033a000100a320a40102200121582069380fc1c3b096
  52134feefba61776f97af875ce46ca20252c4165102966ebc52258208b515831
  462ccb0bd55cba04bfd50da63faf18bd845433622daf97c06a10d0f121a40102
  20012158205c099bec31faa581d14e208250d3ffda9ec7f543043008bc84967a
  8d875b5d78225820539d57429fcb1c138da29010a155dca14566a8f55ac2f178
  0810c49d4ed72d582228'
]]></artwork>
      </section>
      <section anchor="cose-arkg-derived-refs">
        <name>COSE key reference type: ARKG derived private key</name>
        <t>A reference to a private key derived using ARKG
may be represented as a <tt>COSE_Key_Ref</tt> structure <xref target="I-D.lundberg-cose-2p-algs"/>
whose <tt>kty</tt> is <tt>TBD</tt> (Ref-ARKG-derived, placeholder -65538).
This key reference type defines key type parameters -1 and -2 respectively
for the <tt>kh</tt> and <tt>ctx</tt> parameters of <tt>ARKG-Derive-Private-Key</tt>.
The <tt>kid</tt> (2) parameter identifies the ARKG private seed <tt>sk</tt>.
Thus the <tt>COSE_Key_Ref</tt> structure conveys all arguments to use in <tt>ARKG-Derive-Private-Key</tt>
to derive the referenced private key.</t>
        <t><xref target="tbl-ref-arkg-params"/> defines key type parameters for the Ref-ARKG-derived key type.
A <tt>COSE_Key_Ref</tt> structure whose <tt>kty</tt> is TBD (Ref-ARKG-derived, placeholder -65538)
<bcp14>MUST</bcp14> include the parameters <tt>kh</tt> (-1) and <tt>ctx</tt> (-2).
The <tt>inst</tt> (-3) parameter <bcp14>MAY</bcp14> be used to indicate the ARKG instance
whose <tt>ARKG-Derive-Private-Key</tt> procedure to use to derive the private key;
its value is taken from the IANA "COSE Algorithms" registry <xref target="IANA.cose"/>
and an initial set of values is defined in <xref target="tbl-arkg-pub-params"/>.</t>
        <t>If <tt>dkalg</tt> (-3) is present in the ARKG public seed used in <tt>ARKG-Derive-Public-Key</tt> to generate the <tt>kh</tt> value,
then the <tt>alg</tt> (3) parameter of the COSE_Key_Ref <bcp14>SHOULD</bcp14> be set to the <tt>dkalg</tt> (-3) value of the seed.
If <tt>alg</tt> (3) is present in the seed,
then the <tt>inst</tt> (-3) parameter of the COSE_Key_Ref <bcp14>SHOULD</bcp14> be set to the <tt>alg</tt> (3) value of the seed.</t>
        <table anchor="tbl-ref-arkg-params">
          <name>COSE key type parameters for the Ref-ARKG-derived 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">kh</td>
              <td align="left">-1</td>
              <td align="left">bstr</td>
              <td align="left">Required</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">
                <tt>ctx</tt> argument to <tt>ARKG-Derive-Private-Key</tt></td>
            </tr>
            <tr>
              <td align="left">inst</td>
              <td align="left">-3</td>
              <td align="left">int / tstr</td>
              <td align="left">Optional</td>
              <td align="left">COSE algorithm identifier of ARKG instance</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL example represents a reference to a key derived using <tt>ARKG-P256</tt>
and restricted for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65538,   ; kty: Ref-ARKG-derived
               ; kid: Opaque identifier of ARKG-pub
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -9,       ; alg: ESP256

               ; ARKG-P256 key handle
               ; (HMAC-SHA-256-128 followed by
                  SEC1 uncompressed ECDH public key)
  -1: h'ae079e9c52212860678a7cee25b6a6d4
        048219d973768f8e1adb8eb84b220b0ee3
          a2532828b9aa65254fe3717a29499e9b
          aee70cea75b5c8a2ec2eb737834f7467
          e37b3254776f65f4cfc81e2bc4747a84',

               ; ctx argument to ARKG-Derive-Private-Key
  -2: 'Example application info',

  -3: -65700   ; inst: ARKG-P256 (placeholder value)
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a6013a0001000102582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d20328205851ae079e9c52212860678a7cee25b6a6d404
  8219d973768f8e1adb8eb84b220b0ee3a2532828b9aa65254fe3717a29499e9b
  aee70cea75b5c8a2ec2eb737834f7467e37b3254776f65f4cfc81e2bc4747a84
  2158184578616d706c65206170706c69636174696f6e20696e666f223a000100
  a3'
]]></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>
          <li>
            <t>Name: Ref-ARKG-derived
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65538)</t>
              </li>
              <li>
                <t>Description: Reference to private key derived by ARKG</t>
              </li>
              <li>
                <t>Capabilities: [kty(-65538), kh, ctx]</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-2p-algs"/>, <xref target="cose-arkg-derived-refs"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>These registrations add the following choices to the CDDL <xref target="RFC8610"/> type socket <tt>$COSE_kty_ref</tt> <xref target="I-D.lundberg-cose-2p-algs"/>:</t>
        <sourcecode type="cddl"><![CDATA[
$COSE_kty_ref /= -65538   ; Placeholder value
]]></sourcecode>
      </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>
          <li>
            <t>Key Type: TBD (Ref-ARKG-derived, placeholder -65538)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: kh</t>
              </li>
              <li>
                <t>Label: -1</t>
              </li>
              <li>
                <t>CBOR Type: bstr</t>
              </li>
              <li>
                <t>Description: kh argument to ARKG-Derive-Private-Key</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-2p-algs"/>, <xref target="cose-arkg-derived-refs"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Key Type: TBD (Ref-ARKG-derived, placeholder -65538)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: ctx</t>
              </li>
              <li>
                <t>Label: -2</t>
              </li>
              <li>
                <t>CBOR Type: bstr</t>
              </li>
              <li>
                <t>Description: ctx argument to ARKG-Derive-Private-Key</t>
              </li>
              <li>
                <t>Reference: <xref target="I-D.lundberg-cose-2p-algs"/>, <xref target="cose-arkg-derived-refs"/> 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="ARKG-P256"/> 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="ARKG-P384"/> 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="ARKG-P521"/> 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="ARKG-P256k"/> of this document</t>
              </li>
              <li>
                <t>Recommended: TBD</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="design-rationale">
      <name>Design rationale</name>
      <section anchor="design-rationale-mac">
        <name>Using a MAC</name>
        <t>The ARKG construction by Wilson <xref target="Wilson"/> omits the MAC and instead encodes application context in the PRF labels,
arguing that this leads to invalid keys/signatures in cases that would have a bad MAC.
We choose to keep the MAC from the construction by Frymann et al. <xref target="Frymann2020"/>,
but allow it to be omitted in case the chosen KEM already guarantees ciphertext integrity.</t>
        <t>The reason for this is to ensure that the delegating party can distinguish key handles that belong to its ARKG seed.
For example, this is important for applications using the W3C Web Authentication API [WebAuthn],
which do not know beforehand which authenticators are connected and available.
Instead, authentication requests may include references to several eligible authenticators,
and the one to use is chosen opportunistically by the WebAuthn client depending on which are available at the time.
Consider using ARKG in such a scenario to sign some data with a derived private key:
a user may have several authenticators and thus several ARKG seeds,
so the signing request might include several well-formed ARKG key handles,
but only one of them belongs to the ARKG seed of the authenticator that is currently connected.
Without an integrity check,
choosing the wrong key handle might cause the <tt>ARKG-Derive-Private-Key</tt> procedure to silently derive the wrong key
instead of returning an explicit error, which would in turn lead to an invalid signature or similar final output.
This would make it difficult or impossible to diagnose the root cause of the issue and present actionable user feedback.
For this reason, we require the KEM to guarantee ciphertext integrity
so that <tt>ARKG-Derive-Private-Key</tt> can fail early if the key handle belongs to a different ARKG seed.</t>
        <t>It is straightforward to see that adding the MAC to the construction by Wilson
does not weaken the security properties defined by Frymann et al. <xref target="Frymann2020"/>:
the construction by Frymann et al. can be reduced to the ARKG construction in this document
by instantiating <tt>BL</tt> as described in <xref target="blinding-ec"/>
and <tt>KEM</tt> as described in <xref target="kem-ecdh"/>.
The use of hash_to_field in <xref target="blinding-ec"/> corresponds to the KDF<sub>1</sub> parameter in <xref target="Frymann2020"/>,
and the use of HMAC and HKDF in <xref target="hmac-kem"/> corresponds to the MAC and KDF<sub>2</sub> parameters in <xref target="Frymann2020"/>.
Hence if one can break PK-unlinkability or SK-security of the ARKG construction in this document,
one can also break the same property of the construction by Frymann et al.</t>
      </section>
      <section anchor="implementation-status">
        <name>Implementation Status</name>
        <t>TODO</t>
      </section>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="I-D.jose-fully-spec-algs">
          <front>
            <title>Fully-Specified Algorithms for JOSE and COSE</title>
            <author fullname="Michael B. Jones" initials="M. B." surname="Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <author fullname="Orie Steele" initials="O." surname="Steele">
              <organization>Transmute</organization>
            </author>
            <date day="2" month="April" 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), hash functions, etc., as
   being "fully specified".  Whereas, 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 JOSE and COSE
   polymorphic algorithm identifiers, enabling applications to use only
   fully-specified algorithm identifiers.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-jose-fully-specified-algorithms-09"/>
        </reference>
        <reference anchor="I-D.lundberg-cose-2p-algs">
          <front>
            <title>COSE Algorithms for Two-Party Signing</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="3" month="March" year="2025"/>
            <abstract>
              <t>   This specification defines COSE algorithm identifiers used when the
   signing operation is performed cooperatively between two parties.
   When performing two-party signing, the first party typically hashes
   the data to be signed and the second party signs the hashed data
   computed by the first party.  This can be useful when communication
   with the party holding the signing private key occurs over a limited-
   bandwidth channel, such as NFC or Bluetooth Low Energy (BLE), in
   which it is infeasible to send the complete set of data to be signed.
   The resulting signatures are identical in structure to those computed
   by a single party, and can be verified using the same verification
   procedure without additional steps to preprocess the signed data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-01"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC6090">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8812">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) and JSON Object Signing and Encryption (JOSE) Registrations for Web Authentication (WebAuthn) Algorithms</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>The W3C Web Authentication (WebAuthn) specification and the FIDO Alliance FIDO2 Client to Authenticator Protocol (CTAP) specification use CBOR Object Signing and Encryption (COSE) algorithm identifiers. This specification registers the following algorithms (which are used by WebAuthn and CTAP implementations) in the IANA "COSE Algorithms" registry: RSASSA-PKCS1-v1_5 using SHA-256, SHA-384, SHA-512, and SHA-1; and Elliptic Curve Digital Signature Algorithm (ECDSA) using the secp256k1 curve and SHA-256. It registers the secp256k1 elliptic curve in the IANA "COSE Elliptic Curves" registry. Also, for use with JSON Object Signing and Encryption (JOSE), it registers the algorithm ECDSA using the secp256k1 curve and SHA-256 in the IANA "JSON Web Signature and Encryption Algorithms" registry and the secp256k1 elliptic curve in the IANA "JSON Web Key Elliptic Curve" registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8812"/>
          <seriesInfo name="DOI" value="10.17487/RFC8812"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9380">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
        <reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="SEC2" target="http://www.secg.org/sec2-v2.pdf">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BIP32" target="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki">
          <front>
            <title>BIP 32 Hierarchical Deterministic Wallets</title>
            <author initials="P." surname="Wuille" fullname="Pieter Wuille">
              <organization/>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="Clermont" target="https://www.cryptoplexity.informatik.tu-darmstadt.de/media/crypt/teaching_1/theses_1/Sebastian_Clermont_Thesis.pdf">
          <front>
            <title>Post Quantum Asynchronous Remote Key Generation. Master's thesis</title>
            <author initials="S. A." surname="Clermont" fullname="Sebastian A. Clermont">
              <organization>Technische Universität Darmstadt</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="WebAuthn-Recovery" target="https://github.com/Yubico/webauthn-recovery-extension">
          <front>
            <title>WebAuthn recovery extension: Asynchronous delegated key generation without shared secrets. GitHub</title>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="Frymann2020" target="https://eprint.iacr.org/2020/1004">
          <front>
            <title>Asynchronous Remote Key Generation: An Analysis of Yubico's Proposal for W3C WebAuthn. CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="F." surname="Kiefer" fullname="Franziskus Kiefer">
              <organization/>
            </author>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Frymann2023" target="https://eprint.iacr.org/2023/419">
          <front>
            <title>Asynchronous Remote Key Generation for Post-Quantum Cryptosystems from Lattices. 2023 IEEE 8th European Symposium on Security and Privacy</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Shoup" target="https://www.shoup.net/papers/iso-2.pdf">
          <front>
            <title>A Proposal for an ISO Standard for Public Key Encryption (version 2.0)</title>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization>IBM Zurich Research Lab</organization>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="Wilson" target="http://hdl.handle.net/10012/19316">
          <front>
            <title>Post-Quantum Account Recovery for Passwordless Authentication. Master's thesis</title>
            <author initials="S. M." surname="Wilson" fullname="Spencer MacLaren Wilson">
              <organization>University of Waterloo,</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1200?>

<section anchor="acknowledgements">
      <name>Acknowledgements</name>
      <t>ARKG was first proposed under this name by Frymann et al. <xref target="Frymann2020"/>,
who analyzed a proposed extension to W3C Web Authentication by Lundberg and Nilsson <xref target="WebAuthn-Recovery"/>,
which was in turn inspired by a similar construction by Wuille <xref target="BIP32"/> used to create privacy-preserving Bitcoin addresses.
Frymann et al. <xref target="Frymann2020"/> generalized the constructions by Lundberg, Nilsson and Wuille
from elliptic curves to any discrete logarithm (DL) problem,
and also proved the security of arbitrary asymmetric protocols composed with ARKG.
Further generalizations to include quantum-resistant instantiations
were developed independently by Clermont <xref target="Clermont"/>, Frymann et al. <xref target="Frymann2023"/> and Wilson <xref target="Wilson"/>.</t>
      <t>This document adopts the construction proposed by Wilson <xref target="Wilson"/>,
modified by the inclusion of a MAC in the key handles as done in the original construction by Frymann et al. <xref target="Frymann2020"/>.</t>
      <t>The authors would like to thank all of these authors for their research and development work that led to the creation of this document.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section lists test vectors for validating implementations.</t>
      <t>Test vectors are listed in CDDL <xref target="RFC8610"/> syntax
using parameter and output names defined in <xref target="arkg"/>.
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 outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04572a111ce5cfd2a67d56a0f7c684184b16ccd212490dc9c5b579df749647d107
               dac2a1b197cc10d2376559ad6df6bc107318d5cfb90def9f4a1f5347e086c2cd'
;kh      = (implementation defined)

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

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'040e983f44cafa9036066857d1831b58cc2227677489df07d1ae0801259ddc0a6a
               a77f98712ecf662773ef73b6414d752bab57288cdce1299f73e606306bf77c54'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x298271791090c1a0f3ef346a974b8daeab2876f2943207b2cddfe4ddff7a6295
]]></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 outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04b79b65d6bbb419ff97006a1bd52e3f4ad53042173992423e06e52987a037cb61
               dd82b126b162e4e7e8dc5c9fd86e82769d402a1968c7c547ef53ae4f96e10b0e'
;kh      = (implementation defined)

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

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04dfd47f9357efc0146e243c2cab4601c250b792111d6a364587a728d5624cfaf1
               6e62dbf37ebc132537038f5daa2ff6cd38f229fd3063c618b4333cea35af6e85'
;kh      = (implementation defined)

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

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04cc85763fae2c8f38964ddc1f3dd9eebe2d2cb5c2842b0a622939b608f9cef967
               aafa50b9b24d6ae5a273f5b5d03b6a1ce8abd4f4dbaf487c417ef7380d1481b5'
;kh      = (implementation defined)

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

; Derive-Seed outputs:
pk_bl    = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
               65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem   = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
               dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key outputs:
pk_prime = h'04056c654c97ea460ebfae997c8e12314184e45183aefdb8ce9547afca1faaee70
               da6c6433c8fe71c32284cf0a015eb463ea2fc81438f6698684525f011d7ae83c'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0xbb609831741d9232ecd7d58770c503992ca78d34361a865a0d6715861955526f
]]></sourcecode>
      </section>
      <section anchor="other-instances">
        <name>Other instances</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <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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
Uk9eKqPkXhtPxfPr6SIVBRswZCwOU8sNSdHRgl1RIXi87yWNVhldPtDed0D7
Qim7zAs547IoFALUYduqWnGZwCd2LRgJR6JdoqsElilkeBfDSXvvM8otmBNv
yr6rU3t318YkUmP925d07KN8ozsk5EHD9jZouZAaNTHtrhtN0BmnREBofeKi
A7FeszIWckGKVtTLklK08pzDOtBoSnJec9pCk0cp166w1m5Mv0217Bn3UEay
SGcJhBi1V9iua2qVE97YCOFNr8y8yPO9x0lWkQd8Wxq+2OCUBNSpVDJ0CqG9
Dqlh/adHJ7+pVuFv7d88wj/dwps9/atEtBzuiTI7qO5k2ittMDCWaq/GdPpj
VmuDjo0nFE0CokP5RWtQYuXCV09HqxwmdyVv3aK6B09HDRHo133fujy7huqY
buIQvTcBZUlL3cO5G2lE+F2n3VsLzuDvqmrimbiXhvyLRuJ+1BTGpa19Q9Si
xOtQRDFMmfQfm+ATcsntOcJ1p610PUc5xrKbv9KdbE1HeFtWTgWGYFE2WBHQ
+TPphNJ6vQCmE5an1Laj1+L2mZvGxECQlRgFYl/Sdh1e5NIIzTVOXqUZyI63
B6evXOddsw0vagcLjRrdjEgKlnRN4kFaRwWmIccxbcRUIAFvQYGqQJIiAvpL
V+lz3G0miJMVcBlkonYPqAsBl9+gsScOL2fFpTi0bm4fPdtBJIOYXghGIWqi
u8virnjCS07KMAVRCB6zdgNac+kZFWAqVJqxPCZxsiqhl7Kdlbp/r2jsgb+s
QMSsFiPATkripn84+5rTHRzvQVwvSZQIa0loU0DIYcbLBbgJ5lv16d3uLWTm
iqqzPbdEFXJp0lJZXCybylIaDTQkue7a7BqLIm7uZye9iHNUt78JB0o6Mrq1
jZISuVk+KkqwNeUVXPd2M1RVNaBzNNOEYs/SKy6kGMuvKB1HyIOqbSi37MV9
g6ApqQhArNBNmLguyiuh7LJWgRDBy4l1BJM4GvQG7b4/gK0FY/RiNlmKJneN
Dd6LBgQEGS5C0fRuO8Kp6a3pChYM+5Cy6AW2qxt47YO8lLdbSFmWkUFB1Es0
weAUKqXjgSLY8l4SuTPXujL3rKjW2IDGekE0WQ+trYJ2awW0znHBNg7/fXNr
XXMTnKrpiQ3HOqK3jOby9R/M+ZbYTLRcy7N8a2JNrcCaWcwKrciKLW4ltmXb
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
wrdOZc2lP4ibOo3/B88F5aSv3wAA

-->

</rfc>
