<?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.13 (Ruby 3.0.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-bradleylundberg-cfrg-arkg-02" category="info" consensus="true" submissionType="IETF" xml:lang="en" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.21.0 -->
  <front>
    <title abbrev="ARKG">The Asynchronous Remote Key Generation (ARKG) algorithm</title>
    <seriesInfo name="Internet-Draft" value="draft-bradleylundberg-cfrg-arkg-02"/>
    <author fullname="Emil Lundberg" role="editor">
      <organization>Yubico</organization>
      <address>
        <postal>
          <street>Kungsgatan 44</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="2024" month="May" day="28"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>KDF</keyword>
    <abstract>
      <?line 133?>

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

<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>
        </ul>
      </section>
    </section>
    <section anchor="the-asynchronous-remote-key-generation-arkg-algorithm">
      <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>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-Generate-Keypair() -&gt; (pk, sk)</tt>: Generate a blinding key pair.      </t>
                <t>
No input.      </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, info) -&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>info</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, info) -&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>info</tt>.      </t>
                <t>
Output consists of the blinded private key <tt>sk_tau</tt>.</t>
              </li>
            </ul>
            <t>
<tt>tau</tt> and <tt>info</tt> are an 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, consisting of the functions:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>KEM-Generate-Keypair() -&gt; (pk, sk)</tt>: Generate a key encapsulation key pair.      </t>
                <t>
No input.      </t>
                <t>
Output consists of public key <tt>pk</tt> and private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>KEM-Encaps(pk, info) -&gt; (k, c)</tt>: Generate a key encapsulation.      </t>
                <t>
Input consists of an encapsulation public key <tt>pk</tt>
and a domain separation parameter <tt>info</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, info) -&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>info</tt>.      </t>
                <t>
Output consists of the shared secret <tt>k</tt> on success, or an error otherwise.</t>
              </li>
            </ul>
            <t>
<tt>k</tt>, <tt>c</tt> and <tt>info</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>info</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 and values.</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-BL-KEM</tt>,
substituting the chosen instantiation for the <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-generate-seed">
        <name>The function ARKG-Generate-Seed</name>
        <t>This function is performed by the delegating party.
The delegating party generates 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 generate public keys on behalf of the delegating party.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Generate-Seed() -> (pk, sk)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs: None

    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-Generate-Keypair()
    (pk_bl, sk_bl) = BL-Generate-Keypair()
    pk = (pk_kem, pk_bl)
    sk = (sk_kem, sk_bl)
]]></sourcecode>
        <section anchor="deterministic-key-generation">
          <name>Deterministic key generation</name>
          <t>Although the above definition expresses the key generation as opaque,
likely sampling uniformly random key distributions,
implementations <bcp14>MAY</bcp14> choose to implement the functions <tt>BL-Generate-Keypair()</tt>,
<tt>KEM-Generate-Keypair()</tt> and <tt>ARKG-Generate-Seed()</tt>
as deterministic functions of some out-of-band input.
This can be thought of as defining a single-use ARKG instance where these function outputs are static.
This use case is beyond the scope of this document
since the implementation of <tt>ARKG-Generate-Seed</tt> is internal to the delegating party,
even if applications choose to distribute the delegating party across multiple processing entities.</t>
          <t>For example, one entity may randomly sample <tt>pk_bl</tt>, derive <tt>pk_kem</tt> deterministically from <tt>pk_bl</tt>
and submit only <tt>pk_bl</tt> to a separate service that uses the same procedure to also derive the same <tt>pk_kem</tt>.
This document considers both of these entities as parts of the same logical delegating party.</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_kem, pk_bl)</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,
in order to generate any number of public keys.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Public-Key((pk_kem, pk_bl), info) -> (pk', kh)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        pk_kem    A key encapsulation public key.
        pk_bl     A key blinding public key.
        info      An octet string 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:

    info_kem = 'ARKG-Derive-Key-KEM.' || info
    info_bl  = 'ARKG-Derive-Key-BL.'  || info

    (tau, c) = KEM-Encaps(pk_kem, info_kem)
    pk' = BL-Blind-Public-Key(pk_bl, tau, info_bl)

    kh = c
]]></sourcecode>
        <t>If this procedure aborts due to an error,
the procedure can safely be retried with the same arguments.</t>
      </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_kem, sk_bl)</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_kem, sk_bl), kh, info) -> sk'
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        sk_kem    A key encapsulation private key.
        sk_bl     A key blinding private key.
        kh        A key handle output from ARKG-Derive-Public-Key.
        info      An octet string 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:

    info_kem = 'ARKG-Derive-Key-KEM.' || info
    info_bl  = 'ARKG-Derive-Key-BL.'  || info

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

    sk' = BL-Blind-Private-Key(sk_bl, tau, info_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 a correct and honest implementation of <tt>ARKG-Derive-Private-Key</tt>.
See also <xref target="design-rationale-mac"/>.</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-Generate-Keypair() -> (pk, sk)

    Generate (pk, sk) using some procedure defined for the curve crv.


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

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

    tau' = hash_to_field(tau, 1) with the parameters:
        DST: 'ARKG-BL-EC.' || DST_ext || info
        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 integrity protection</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 include integrity protection
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>info</tt> parameter and <bcp14>MAY</bcp14> not guarantee ciphertext integrity.
<tt>Sub-Kem</tt> defines the functions <tt>Sub-Kem-Generate-Keypair</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-Generate-Keypair() -> (pk, sk)

    (pk, sk) = Sub-Kem-Generate-Keypair()


KEM-Encaps(pk, info) -> (k, c)

    info_sub = 'ARKG-KEM-HMAC.' || DST_ext || info
    (k', c') = Sub-Kem-Encaps(pk, info_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 || info
        L: L
    t = HMAC-Hash-128(K=mk, text=info)

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


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

    t = LEFT(c, 16)
    c' = DROP_LEFT(c, 16)
    info_sub = 'ARKG-KEM-HMAC.' || DST_ext || info
    k' = Sub-Kem-Decaps(sk, c', info_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 || info
        L: L

    t' = HMAC-Hash-128(K=mk, text=info)
    If t = t':
        k = HKDF-Expand with the arguments:
            Hash: Hash
            PRK: prk
            info: 'ARKG-KEM-HMAC-shared.' || DST_ext || info
            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>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-Generate-Keypair</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-Generate-Keypair() -> (pk, sk)

    Generate (pk, sk) using some procedure defined for crv.


Sub-Kem-Encaps(pk, info) -> (k, c)

    (pk', sk') = Sub-Kem-Generate-Keypair()

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


Sub-Kem-Decaps(sk, c, info) -> 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-Generate-Keypair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Random-Bytes(N)</tt> represents a cryptographically secure,
uniformly distributed random octet string of length <tt>N</tt>.</t>
              </li>
              <li>
                <t><tt>L</tt> is 32 if <tt>DH-Function</tt> is X25519, or 56 if <tt>DH-Function</tt> is X448.</t>
              </li>
              <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-Generate-Keypair() -> (pk, sk)

    sk = Random-Bytes(L)
    pk = DH-Function(sk, G)


Sub-Kem-Encaps(pk, info) -> (k, c)

    (pk', sk') = Sub-Kem-Generate-Keypair()

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


Sub-Kem-Decaps(sk, c, info) -> 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-P256ADD-ECDH">
        <name>ARKG-P256ADD-ECDH</name>
        <t>The identifier <tt>ARKG-P256ADD-ECDH</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-P256ADD-ECDH'</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>DST_ext</tt>: <tt>'ARKG-P256ADD-ECDH'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-P384ADD-ECDH">
        <name>ARKG-P384ADD-ECDH</name>
        <t>The identifier <tt>ARKG-P384ADD-ECDH</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-P384ADD-ECDH'</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>DST_ext</tt>: <tt>'ARKG-P384ADD-ECDH'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-P521ADD-ECDH">
        <name>ARKG-P521ADD-ECDH</name>
        <t>The identifier <tt>ARKG-P521ADD-ECDH</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-P521ADD-ECDH'</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>DST_ext</tt>: <tt>'ARKG-P521ADD-ECDH'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-P256kADD-ECDH">
        <name>ARKG-P256kADD-ECDH</name>
        <t>The identifier <tt>ARKG-P256kADD-ECDH</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-P256kADD-ECDH'</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>DST_ext</tt>: <tt>'ARKG-P256kADD-ECDH'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-curve25519ADD-X25519">
        <name>ARKG-curve25519ADD-X25519</name>
        <t>The identifier <tt>ARKG-curve25519ADD-X25519</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 curve <tt>curve25519</tt> <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>curve25519_XMD:SHA-512_ELL2_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-curve25519ADD-X25519'</tt>.</t>
              </li>
            </ul>
            <t>
WARNING: Some algorithms on curve25519, including X25519 <xref target="RFC7748"/>,
construct private key scalars within a particular range
to enable optimizations and constant-time guarantees.
This <tt>BL</tt> scheme does not guarantee that blinded private scalars remain in that range,
so implementations using this ARKG instance <bcp14>MUST NOT</bcp14> rely on such a guarantee.  </t>
            <t>
Note: Input and output keys of this <tt>BL</tt> scheme are curve scalars and curve points.
Some algorithms on curve25519, including X25519 <xref target="RFC7748"/>,
define the private key input as a random octet string and applies some preprocessing to it
before interpreting the result as a private key scalar,
and define public keys as a particular octet string encoding of a curve point.
This <tt>BL</tt> scheme is not compatible with such preprocessing
since it breaks the relationship between the blinded private key and the blinded public key.
Implementations using this ARKG instance <bcp14>MUST</bcp14> apply <tt>BL-Blind-Private-Key</tt>
to the interpreted private key scalar, not the random private key octet string,
and implementations of <tt>BL-Blind-Public-Key</tt> <bcp14>MUST</bcp14> interpret the public key input as a curve point,
not an opaque octet string.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: X25519 as described in <xref target="kem-x25519-x448"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>DH-Function</tt>: X25519 <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-curve25519ADD-X25519'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-curve448ADD-X448">
        <name>ARKG-curve448ADD-X448</name>
        <t>The identifier <tt>ARKG-curve448ADD-X448</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 curve <tt>curve448</tt> <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>curve448_XOF:SHAKE256_ELL2_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-curve448ADD-X448'</tt>.</t>
              </li>
            </ul>
            <t>
WARNING: Some algorithms on curve25519, including X448 <xref target="RFC7748"/>,
construct private key scalars within a particular range
to enable optimizations and constant-time guarantees.
This <tt>BL</tt> scheme does not guarantee that blinded private scalars remain in that range,
so implementations using this ARKG instance <bcp14>MUST NOT</bcp14> rely on such a guarantee.  </t>
            <t>
Note: Input and output keys of this <tt>BL</tt> scheme are curve scalars and curve points.
Some algorithms on curve25519, including X448 <xref target="RFC7748"/>,
define the private key input as a random octet string and applies some preprocessing to it
before interpreting the result as a private key scalar,
and define public keys as a particular octet string encoding of a curve point.
This <tt>BL</tt> scheme is not compatible with such preprocessing
since it breaks the relationship between the blinded private key and the blinded public key.
Implementations using this ARKG instance <bcp14>MUST</bcp14> apply <tt>BL-Blind-Private-Key</tt>
to the interpreted private key scalar, not the random private key octet string,
and implementations of <tt>BL-Blind-Public-Key</tt> <bcp14>MUST</bcp14> interpret the public key input as a curve point,
not an opaque octet string.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: X448 as described in <xref target="kem-x25519-x448"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>DH-Function</tt>: X448 <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-curve448ADD-X448'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-edwards25519ADD-X25519">
        <name>ARKG-edwards25519ADD-X25519</name>
        <t>The identifier <tt>ARKG-edwards25519ADD-X25519</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 curve <tt>edwards25519</tt> <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>edwards25519_XMD:SHA-512_ELL2_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-edwards25519ADD-X25519'</tt>.</t>
              </li>
            </ul>
            <t>
WARNING: Some algorithms on edwards25519, including EdDSA <xref target="RFC8032"/>,
construct private key scalars within a particular range
to enable optimizations and constant-time guarantees.
This <tt>BL</tt> scheme does not guarantee that blinded private scalars remain in that range,
so implementations using this ARKG instance <bcp14>MUST NOT</bcp14> rely on such a guarantee.  </t>
            <t>
Note: Input and output keys of this <tt>BL</tt> scheme are curve scalars and curve points.
Some algorithms on edwards25519, including EdDSA <xref target="RFC8032"/>,
define the private key input as a random octet string and applies some preprocessing to it
before interpreting the result as a private key scalar,
and define public keys as a particular octet string encoding of a curve point.
This <tt>BL</tt> scheme is not compatible with such preprocessing
since it breaks the relationship between the blinded private key and the blinded public key.
Implementations using this ARKG instance <bcp14>MUST</bcp14> apply <tt>BL-Blind-Private-Key</tt>
to the interpreted private key scalar, not the random private key octet string,
and implementations of <tt>BL-Blind-Public-Key</tt> <bcp14>MUST</bcp14> interpret the public key input as a curve point,
not an opaque octet string.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: X25519 as described in <xref target="kem-x25519-x448"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>DH-Function</tt>: X25519 <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-edwards25519ADD-X25519'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="ARKG-edwards448ADD-X448">
        <name>ARKG-edwards448ADD-X448</name>
        <t>The identifier <tt>ARKG-edwards448ADD-X448</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 curve <tt>edwards448</tt> <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>edwards448_XOF:SHAKE256_ELL2_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-edwards448ADD-X448'</tt>.</t>
              </li>
            </ul>
            <t>
WARNING: Some algorithms on edwards25519, including EdDSA <xref target="RFC8032"/>,
construct private key scalars within a particular range
to enable optimizations and constant-time guarantees.
This <tt>BL</tt> scheme does not guarantee that blinded private scalars remain in that range,
so implementations using this ARKG instance <bcp14>MUST NOT</bcp14> rely on such a guarantee.  </t>
            <t>
Note: Input and output keys of this <tt>BL</tt> scheme are curve scalars and curve points.
Some algorithms on edwards25519, including EdDSA <xref target="RFC8032"/>,
define the private key input as a random octet string and applies some preprocessing to it
before interpreting the result as a private key scalar,
and define public keys as a particular octet string encoding of a curve point.
This <tt>BL</tt> scheme is not compatible with such preprocessing
since it breaks the relationship between the blinded private key and the blinded public key.
Implementations using this ARKG instance <bcp14>MUST</bcp14> apply <tt>BL-Blind-Private-Key</tt>
to the interpreted private key scalar, not the random private key octet string,
and implementations of <tt>BL-Blind-Public-Key</tt> <bcp14>MUST</bcp14> interpret the public key input as a curve point,
not an opaque octet string.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: X448 as described in <xref target="kem-x25519-x448"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>DH-Function</tt>: X448 <xref target="RFC7748"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-edwards448ADD-X448'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="cose">
      <name>COSE bindings</name>
      <t>This section proposes additions to COSE <xref target="RFC9052"/> to support ARKG use cases.
The novelty lies primarily in a new key type definition to represent ARKG public seeds
and new key type definitions to represent references to private keys rather than the keys themselves.</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).
This key type defines key type parameters -1 and -2 for the <tt>BL</tt> and <tt>KEM</tt> public key, respectively.</t>
        <t>The following CDDL example represents an <tt>ARKG-P256ADD-ECDH</tt> public seed
restricted to generating derived public keys for use with the ESP256 <xref target="fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65537,   ; kty: ARKG-pub-seed
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65539,   ; alg: ESP256-ARKG

  -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',
  }
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a50139fbb402582060b6dfddd31659598ae5de49acb220d8704949e84d484b68
  344340e2565337d2033a0001000220a40102200121582069380fc1c3b0965213
  4feefba61776f97af875ce46ca20252c4165102966ebc52258208b515831462c
  cb0bd55cba04bfd50da63faf18bd845433622daf97c06a10d0f121a401022001
  2158205c099bec31faa581d14e208250d3ffda9ec7f543043008bc84967a8d87
  5b5d78225820539d57429fcb1c138da29010a155dca14566a8f55ac2f1780810
  c49d4ed72d58'
]]></artwork>
      </section>
      <section anchor="cose-key-refs">
        <name>COSE key reference types</name>
        <t>While keys used by many other algorithms can usually be referenced by a single atomic identifier,
such as that used in the <tt>kid</tt> parameter in a COSE_Key object or in the unprotected header of a COSE_Recipient,
users of the function <tt>ARKG-Derive-Secret-Key</tt> need to represent
a reference to an ARKG private seed along with a key handle for a derived private key.</t>
        <t>A COSE key reference is a COSE_Key object whose <tt>kty</tt> value is defined to represent a reference to a key.
The <tt>kid</tt> parameter <bcp14>MUST</bcp14> be present when <tt>kty</tt> is a key reference type.</t>
        <t>The following CDDL example represents a reference to a key derived by <tt>ARKG-P256ADD-ECDH</tt>
and restricted for use with the ESP256 <xref target="fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65538,   ; kty: ARKG-derived
               ; kid: Opaque identifier of ARKG-pub-seed
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65539,   ; alg: ESP256-ARKG

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

               ; info argument to ARKG-Derive-Private-Key
  -2: 'Example application info',
}
]]></sourcecode>
        <t>The following is the same example encoded as CBOR:</t>
        <artwork><![CDATA[
h'a40139fbb502582060b6dfddd31659598ae5de49acb220d8704949e84d484b68
  344340e2565337d2033a00010002205851ae079e9c52212860678a7cee25b6a6
  d4048219d973768f8e1adb8eb84b220b0ee3a2532828b9aa65254fe3717a2949
  9e9baee70cea75b5c8a2ec2eb737834f7467e37b3254776f65f4cfc81e2bc474
  7a84'
]]></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-seed
            </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: 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]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ref-OKP
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested assignment -1)</t>
              </li>
              <li>
                <t>Description: Reference to a key pair of key type "OKP"</t>
              </li>
              <li>
                <t>Capabilities: [kty(-1), crv]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ref-EC2
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Requested assignment -2)</t>
              </li>
              <li>
                <t>Description: Reference to a key pair of key type "EC2"</t>
              </li>
              <li>
                <t>Capabilities: [kty(-1), crv]</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-refs"/> of this document</t>
              </li>
            </ul>
          </li>
        </ul>
      </section>
      <section anchor="cose-key-type-parameters-registrations">
        <name>COSE Key Type Parameters Registrations</name>
        <t>This section registers the following values in the IANA "COSE Key Type Parameters" registry <xref target="IANA.cose"/>.</t>
        <ul spacing="normal">
          <li>
            <t>Key Type: TBD (ARKG-pub-seed, 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-seed, 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 (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="cose-key-refs"/> of this document</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Key Type: TBD (ARKG-derived, placeholder -65538)
            </t>
            <ul spacing="normal">
              <li>
                <t>Name: info</t>
              </li>
              <li>
                <t>Label: -2</t>
              </li>
              <li>
                <t>CBOR Type: bstr</t>
              </li>
              <li>
                <t>Description: info argument to ARKG-Derive-Private-Key</t>
              </li>
              <li>
                <t>Reference: <xref target="cose-key-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: ESP256-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65539)</t>
              </li>
              <li>
                <t>Description: ESP256 with key derived by ARKG-P256ADD-ECDH</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: TBD</t>
              </li>
              <li>
                <t>Reference: <xref target="fully-spec-algs"/>, <xref target="ARKG-P256ADD-ECDH"/> of this document</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP384-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65540)</t>
              </li>
              <li>
                <t>Description: ESP384 with key derived by ARKG-P384ADD-ECDH</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: TBD</t>
              </li>
              <li>
                <t>Reference: <xref target="fully-spec-algs"/>, <xref target="ARKG-P384ADD-ECDH"/> of this document</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ESP512-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65541)</t>
              </li>
              <li>
                <t>Description: ESP512 with key derived by ARKG-P521ADD-ECDH</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: TBD</t>
              </li>
              <li>
                <t>Reference: <xref target="fully-spec-algs"/>, <xref target="ARKG-P521ADD-ECDH"/> of this document</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: ES256K-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65542)</t>
              </li>
              <li>
                <t>Description: ES256K with key derived by ARKG-P256kADD-ECDH</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: TBD</t>
              </li>
              <li>
                <t>Reference: <xref target="RFC8812"/>, <xref target="ARKG-P256kADD-ECDH"/> of this document</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ed25519-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65543)</t>
              </li>
              <li>
                <t>Description: Ed25519 with key derived by ARKG-edwards25519ADD-X25519</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: TBD</t>
              </li>
              <li>
                <t>Reference: <xref target="fully-spec-algs"/>, <xref target="ARKG-edwards25519ADD-X25519"/> of this document</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
          <li>
            <t>Name: Ed448-ARKG
            </t>
            <ul spacing="normal">
              <li>
                <t>Value: TBD (Placeholder -65544)</t>
              </li>
              <li>
                <t>Description: Ed448 with key derived by ARKG-edwards448ADD-X448</t>
              </li>
              <li>
                <t>Capabilities: [kty]</t>
              </li>
              <li>
                <t>Change Controller: TBD</t>
              </li>
              <li>
                <t>Reference: <xref target="fully-spec-algs"/>, <xref target="ARKG-edwards448ADD-X448"/> of this document</t>
              </li>
              <li>
                <t>Recommended: Yes</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>TODO: Add the rest</t>
      </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>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="fully-spec-algs" target="https://datatracker.ietf.org/doc/draft-ietf-jose-fully-specified-algorithms/">
          <front>
            <title>Fully-Specified Algorithms for JOSE and COSE</title>
            <author initials="M. B." surname="Jones" fullname="Michael B. Jones">
              <organization>Self-Issued Consulting</organization>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="IANA.cose" target="http://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="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/>
            </author>
            <author>
              <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="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/>
            </author>
            <author>
              <organization>University of Waterloo,</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1214?>

<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>TODO</t>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <ul spacing="normal">
        <li>
          <t>00 Initial Version</t>
        </li>
        <li>
          <t>01 Editorial Fixes to formatting and references.</t>
        </li>
        <li>
          <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>
        </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>
    </section>
  </back>
  <!-- ##markdown-source:
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
ouCsAMV8x+Wqa6njCEdDQlrL+v+Cjm1wF78AAA==

-->

</rfc>
