<?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-05" 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-05"/>
    <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="07"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>KDF</keyword>
    <abstract>
      <?line 142?>

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

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

</section>
      <section anchor="notation">
        <name>Notation</name>
        <t>The following notation is used throughout this document:</t>
        <ul spacing="normal">
          <li>
            <t>The symbol <tt>||</tt> represents octet string concatenation.</t>
          </li>
          <li>
            <t>Literal text strings and octet strings are denoted
using the CDDL syntax defined in <xref section="3.1" sectionFormat="of" target="RFC8610"/>.</t>
          </li>
          <li>
            <t>Elliptic curve operations are written in additive notation:
<tt>+</tt> denotes point addition, i.e., the curve group operation;
<tt>*</tt> denotes point multiplication, i.e., repeated point addition;
and <tt>+</tt> also denotes scalar addition modulo the curve order.
<tt>*</tt> has higher precedence than <tt>+</tt>, i.e., <tt>a + b * C</tt> is equivalent to <tt>a + (b * C)</tt>.</t>
          </li>
          <li>
            <t><tt>LEN(x)</tt> is the length, in octets, of the octet string <tt>x</tt>.</t>
          </li>
          <li>
            <t>The function <tt>I2OSP</tt> converts a nonnegative integer into an octet string as defined in <xref section="4.1" sectionFormat="of" target="RFC8017"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="arkg">
      <name>The Asynchronous Remote Key Generation (ARKG) algorithm</name>
      <t>The ARKG algorithm consists of three functions, each performed by one of two participants:
the <em>delegating party</em> or the <em>subordinate party</em>.
The delegating party generates an ARKG <em>seed pair</em> and emits the <em>public seed</em> to the subordinate party
while keeping the <em>private seed</em> secret.
The subordinate party can then use the public seed to generate derived public keys and <em>key handles</em>,
and the delegating party can use the private seed and a key handle to derive the corresponding private key.</t>
      <t>This construction of ARKG is fully deterministic, extracting input entropy as explicit parameters,
as opposed to the internal random sampling typically used in the academic literature <xref target="Frymann2020"/> <xref target="Wilson"/> <xref target="Clermont"/>.
Implementations <bcp14>MAY</bcp14> choose to instead implement the <tt>ARKG-Derive-Seed</tt> and <tt>KEM-Encaps</tt> functions
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
      <t>The following subsections define the abstract instance parameters used to construct the three ARKG functions,
followed by the definitions of the three ARKG functions.</t>
      <section anchor="arkg-params">
        <name>Instance parameters</name>
        <t>ARKG is composed of a suite of other algorithms.
The parameters of an ARKG instance are:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: An asymmetric key blinding scheme <xref target="Wilson"/>, consisting of:
            </t>
            <ul spacing="normal">
              <li>
                <t>Function <tt>BL-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a blinding key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of a blinding public key <tt>pk</tt> and a blinding private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-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 <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>'ARKG-ECDH.' || 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>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: 'ARKG-KEM-ECDH-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


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

<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'042eff91b46617d0628b979405bb871a7593e4b02ec533712bc1cf80d0b0a1ccf3
               0ec3b161632183ceedf94fbe35a96e60a17c2c79c6379b141eeeba521ea8030f'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x4253051878eac98187f1394605a3ef5ce1981e664cea41e8094c7d12c606d906

; Derive-Public-Key outputs:
pk_prime = h'04018fcbb2f920282a321da180efe321307d03ed476883c02199cc563ccc66a077
               ec03e52a66d4de13c85187323f0a06b9d90c287ea774457b9362c1f66b6a177e'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x52cb5af8edfb25fe5e945f5e83cb7929de9459bda95ef68085b5cb9018c5cacc'
]]></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'042eff91b46617d0628b979405bb871a7593e4b02ec533712bc1cf80d0b0a1ccf3
               0ec3b161632183ceedf94fbe35a96e60a17c2c79c6379b141eeeba521ea8030f'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x4253051878eac98187f1394605a3ef5ce1981e664cea41e8094c7d12c606d906

; Derive-Public-Key outputs:
pk_prime = h'04d54c794c2aaf1883a1e52581320ec70caeba03a5b57f8ebf3ae8b80db1e016a3
               79269f8d519890fcc67439b196b0a8e8518b4794feed03b3ded413cd0d3050e3'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x35e5bae9b0c15765ca4fef9e01433cbd1dd3ba4633c3dd025967fbc1b4421d1c'
]]></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'042eff91b46617d0628b979405bb871a7593e4b02ec533712bc1cf80d0b0a1ccf3
               0ec3b161632183ceedf94fbe35a96e60a17c2c79c6379b141eeeba521ea8030f'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x4253051878eac98187f1394605a3ef5ce1981e664cea41e8094c7d12c606d906

; Derive-Public-Key outputs:
pk_prime = h'047dab2c6ed6cd827750f20487c99d5ac113b6539d0d326bc0ad104a94c4ba3ff3
               6f5d3f6e82bdbcf8c404f3c64e2e0a07b1b423f85ee05683f592d63235968c51'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0x02d98cb8ca1ddbe689b75c2e31ba8c1e502977d11f6e28f7493fbba00585d2f0'
]]></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'042eff91b46617d0628b979405bb871a7593e4b02ec533712bc1cf80d0b0a1ccf3
               0ec3b161632183ceedf94fbe35a96e60a17c2c79c6379b141eeeba521ea8030f'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x4253051878eac98187f1394605a3ef5ce1981e664cea41e8094c7d12c606d906

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

; Derive-Private-Key outputs:
sk_prime = 0x154bb2b991864eef4b254cd148407f19fc32276056f8281b6c6c455cf00a38c1'
]]></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'042eff91b46617d0628b979405bb871a7593e4b02ec533712bc1cf80d0b0a1ccf3
               0ec3b161632183ceedf94fbe35a96e60a17c2c79c6379b141eeeba521ea8030f'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x4253051878eac98187f1394605a3ef5ce1981e664cea41e8094c7d12c606d906

; Derive-Public-Key outputs:
pk_prime = h'0421df5ebc51bc67135990608349b66e799f5d7a406a404142c13910a7d488e0ca
               58bc6bcab558299b7bda9e8b1718e781dc66ca0c9b28f5da2e7a00cf2ada9765'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0xb3437c08215fb083ff360b1300743fddf7aed2493dfabba718aefa60984ed09b'
]]></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'042eff91b46617d0628b979405bb871a7593e4b02ec533712bc1cf80d0b0a1ccf3
               0ec3b161632183ceedf94fbe35a96e60a17c2c79c6379b141eeeba521ea8030f'
sk_bl    = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem   = 0x4253051878eac98187f1394605a3ef5ce1981e664cea41e8094c7d12c606d906

; Derive-Public-Key outputs:
pk_prime = h'0487c9f65395d4ddba545d6184fbb739440e1e7af008ada987eac44d58e4f9f073
               22f7099029ca1523e9ea7c07e5b4fff6ac6f7006d156bca8a6496796043a68dd'
;kh      = (implementation defined)

; Derive-Private-Key outputs:
sk_prime = 0xc9006d3cac426ecf57ced462f11fba41d2db516a5d3111e058bc0c3c2e469ed2'
]]></sourcecode>
      </section>
      <section anchor="other-instances">
        <name>Other instances</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>-05</t>
      <ul spacing="normal">
        <li>
          <t>Deleted concrete instances <tt>ARKG-curve25519ADD-X25519</tt>, <tt>ARKG-curve448ADD-X448</tt>,
<tt>ARKG-edwards25519ADD-X25519</tt> and <tt>ARKG-edwards448ADD-X448</tt>
since implementations with a non-prime order generator, including EdDSA,
are incompatible with the additive blinding scheme defined in section "Using elliptic curve addition for key blinding".</t>
        </li>
        <li>
          <t>Remodeled procedures to be fully deterministic:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>BL-Generate-Keypair()</tt> replaced with <tt>BL-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>KEM-Generate-Keypair()</tt> replaced with <tt>KEM-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>ARKG-Generate-Seed()</tt> replaced with <tt>ARKG-Derive-Seed(ikm_bl, ikm_kem)</tt>.</t>
            </li>
            <li>
              <t>Parameter <tt>ikm</tt> added to <tt>ARKG-Derive-Public-Key</tt>.</t>
            </li>
            <li>
              <t>Instance parameter <tt>hash-to-crv-suite</tt> added to generic formula "Using ECDH as the KEM",
affecting concrete instances <tt>ARKG-P256ADD-ECDH</tt>, <tt>ARKG-P384ADD-ECDH</tt>, <tt>ARKG-P521ADD-ECDH</tt> and <tt>ARKG-P256kADD-ECDH</tt>.</t>
            </li>
            <li>
              <t>Section "Deterministic key generation" deleted.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Flipped order of <tt>(pk_bl, pk_kem)</tt> and <tt>(sk_bl, sk_kem)</tt> parameter and return value tuples
for consistent ordering between BL and KEM throughout document.</t>
        </li>
        <li>
          <t><tt>info</tt> parameter renamed to <tt>ctx</tt>.</t>
        </li>
        <li>
          <t><tt>ctx</tt> length limited to at most 64 bytes.</t>
        </li>
        <li>
          <t>Encoding of <tt>ctx</tt> in <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt> now embeds the length of <tt>ctx</tt>.</t>
        </li>
        <li>
          <t>Renamed concrete instances and corresponding <tt>DST_ext</tt> values:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>ARKG-P256ADD-ECDH</tt> to <tt>ARKG-P256</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P384ADD-ECDH</tt> to <tt>ARKG-P384</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P521ADD-ECDH</tt> to <tt>ARKG-P521</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P256kADD-ECDH</tt> to <tt>ARKG-P256k</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t>Added ARKG-P256 test vectors.</t>
        </li>
      </ul>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>Extracted COSE_Key_Ref definition and COSE algorithm registrations to draft-lundberg-cose-two-party-signing-algs.</t>
        </li>
        <li>
          <t>Redefined alg (3) parameter and added dkalg (-3) in ARKG-pub COSE_Key.</t>
        </li>
        <li>
          <t>Defined alg (3) and inst (-3) parameters of Ref-ARKG-derived COSE key type.</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Renamed section "Using HMAC to adapt a KEM without {integrity protection =&gt; ciphertext integrity}".</t>
        </li>
        <li>
          <t>Fixed info argument to HMAC in section "Using HMAC to adapt a KEM without ciphertext integrity".</t>
        </li>
        <li>
          <t>Added reference to Shoup for definition of key encapsulation mechanism.</t>
        </li>
        <li>
          <t>Added CDDL definition of COSE_Key_Ref.</t>
        </li>
        <li>
          <t>Editorial fixes to references.</t>
        </li>
        <li>
          <t>Renamed proposed COSE Key Types.</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Rewritten introduction.</t>
        </li>
        <li>
          <t>Renamed ARKG-Derive-Secret-Key to ARKG-Derive-Private-Key.</t>
        </li>
        <li>
          <t>Overhauled EC instantiations to use hash_to_field and account for non-prime order curve key generation.</t>
        </li>
        <li>
          <t>Eliminated top-level MAC and KDF instance parameters.</t>
        </li>
        <li>
          <t>Added info parameter to instance parameter functions.</t>
        </li>
        <li>
          <t>Added requirement of KEM ciphertext integrity and generic formula for augmenting any KEM using HMAC.</t>
        </li>
        <li>
          <t>Added curve/edwards25519/448 instances.</t>
        </li>
        <li>
          <t>Added proposal for COSE bindings and key reference types.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial Fixes to formatting and references.</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial Version</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Dain Nilsson">
        <organization>Yubico</organization>
        <address>
      </address>
      </contact>
      <contact fullname="Peter Altmann">
        <organization>Agency for Digital Government</organization>
        <address>
          <postal>
            <country>SE</country>
          </postal>
        </address>
      </contact>
      <contact initials="M. B." surname="Jones" fullname="Michael B. Jones">
        <organization>Self-Issued Consulting</organization>
        <address>
          <postal>
            <country>United States</country>
          </postal>
          <uri>https://self-issued.info/</uri>
        </address>
      </contact>
      <contact fullname="Sander Dijkhuis">
        <organization>Cleverbase</organization>
        <address>
          <postal>
            <country>NL</country>
          </postal>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1963rbOJLofz4FT3K+Y7vXUngX5Z6eWV/T3lw3zkzPnkw+
GyRBm2OJ1JCUHU86+yz7Y5/k7IudqgJAghQlO93JbM9O5+uvLYkgUCjUHYXC
aDQyqprlyTmbFTnfM+tyyY1sUdKnqnYsa2o5hlFn9Qyevr3i5n51l8dXZZEX
y8p8w+dFzc1n/M58ynNesjorcnN7/82zpzsmm10WZVZfzQ0WRSW/2TMf4YNH
xozll3smz42Y1Rza3O2ZWZ4WhpEUcc7mMFBSsrQeRSVLZvxutsyTiJeXoziF
/7Hy+nJk+Ua1jOZZVcF49d0CXjk9fntimo9h1KqAkbI84QsO/8vrR7vmI55k
NQDDZvjldP8A/hQlfHrz9uSRkS/n0P+ekQA4e0Zc5BXPq2UlsQFwuwYrOdtT
7W8LgKEslgv45bC8W9SFeVKUy/kj45rfwcNkzzBH5rOjE+OG50vo0jSHm5um
gP3RG15xVsZX5lNshw8uAXHLCB792zLK4uIJTbtM40eGYbBlfVUAvCOzLHBZ
xOTgpXQ5mwkEHs+zmflcIg6eFOUly7O/0vrsmaJP+LmqS87rPfPpf/3nzYxf
MiAF03HgQZzVsCpndRFfXxWzOf5SLPMal+rsGL7xOctmMDIM8898Dis0rrgB
ALUQ/EtxlZsHYgXXAyD7ueGTP9fRP4s/47iYG7gMdZlFy1rMtO34iGW5+TKb
VVWRr+u488JrXvPS3J/Vc5avvrF/yfP4zkyBHI4ywDqbmU+LG17mcyCd3rw7
3b7I4ivGZ+bBGOaa8wraZjkQzYux9kt3rDM+S0enVbXkiXkIZLac1VmOy7Ms
sz3zqq4X1d6TJxW2yqjVGPniiQ7F7/OshrfPaqDVqgvQGfAxx1n8+fpqma2O
fjjjMK+IwUppHb58bhh5Uc6h0Q2R6unoaPznouIj7PluVC14PAJWhpnhE8GZ
Ga/TUa9RlmY8GTVMX8muWu7F5s5ipa9ug/q2GC1YWUOf2WUO2KH22Nf+y/0x
NkEY35wcOrblyY/e1JvKj34YqI8BiC75cTLxQvkxtOxJ89F11MfAVm3D0Fa/
Ti2/+eiG1ODs+NDGv8C5rLxE1sFVg0W7vb0FFogvx4BzWMHYHt0440WSUlvF
sPh5hKsCi8HLGih1birWp4ckgUyUumIMIXa3YFTTBqaezbIFvGUeLssbbgpZ
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
1TRG8hxojGbIVtNY6G4RsFdqvgn7CRtAsa6uuLeEeh/YICG2VxsAZB0YcvG+
M2OhxE9T6fUo7YfuKaYPJEsyRhWCyOfTWiFtyfRPyrcDqtLzSEkKXvQVSCeC
JKWeiadkRLqjEIzqCR4vAUf/40dM+hvBS58+EX1dLrOEyeO1QrT2e8QXVCZ3
4IFaqLnc+Pvvt1dWfG5tt/eLmSVfyyoZDh3Ml1WtOaFd8FNKdxb+oDjCSDTS
xYkWbbjX9mnb/hRncZ3t03H8etbuqt3TDaBtda2Qh1g2BvnWGAbSzveIMCb0
JtlOt5zu5GkXVg0F9PS9zJ9ruWiY6BokmglFLVHUNzZN92DMUHbxJltF27Ls
4R4lvb59ufXLslKqtVaKvneqtd5kpgy9skbPSl1Ix9OGpcs/kM1SDdksK3vX
mgmBL/zPNB5A1zfhAbkxJuwGyUWt2QB6v90poMgoy2Y8ecg8q57F0Uk4WDU5
yMw4xverJqFZszYwo7nNx8plZRI6MtUNXWv7fRck1xBiIZjanb5abuzouyXo
JsJ6ZjW9UYlT0mqjB8RBfD02VoP6lSlTjSMtlIxRdSZlMYVquZgXziLDNKEK
o54GRtlx1Fugq/b0QoSlK0Dz5LyqxVEalOKoabv7VKgH1pgMY+M0V2/ReWTM
g8MUzH4EekMfyqpJAAMsUce9xDaJITaFfwKMHRWOdhttA6zb8fkatp35e+2F
GzZb8uHW5sfHzahi60W80u7KbUIe2WzrZm5keAZvnsmdMKbEK2K1kbAKZhVm
j4B8Rb4lfCG4Oye04qZoDB4RRIG/JpNVBZ9X018NGXNpVLdCpxwuk+dStfQ6
3FjmsCK8Oc+FO4y4qYtbmbjjos5y4rA0Z9F99le5IUo7Kcoe1e2I1cbE8LNZ
u/Erj6ngwp52y1uozbv7l3m33ZVBDkUjnXBApaf+gm+JvRZl6usHKNoMaH/s
jl2ZA41V2ZB0X+P5x0p3hvT9RxQFM57WtAeX68CPWi24ZmPaeCwSqFU9ia5A
kradOikrdrmrpgLFPeUk0DC5yZIlaG5h8mq5s8Im1o1YEquUtblh37PLeLx7
RqBJq0dwOrbRx8fq44jHwIKnXbGrMoNvUeh2tjrFcerOKPi7oTKW10EgjeZ1
6UfdLN//k0fV4lu1vTwexvnwvjgRVLYyG5niJAxz2VwZ8m3CrG7FYjpUXN6I
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
AAA=

-->

</rfc>
