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

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

<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 <xref target="Shoup"/>, 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 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>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=c')

    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=c')
    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 <tt>alg</tt> parameter, when present,
defines the <tt>alg</tt> parameter of ARKG derived public keys derived from this ARKG public seed.</t>
        <t>The following CDDL <xref target="RFC8610"/> 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
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -9,       ; alg: ESP256

  -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'a5013a0001000002582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d2032820a40102200121582069380fc1c3b09652134fee
  fba61776f97af875ce46ca20252c4165102966ebc52258208b515831462ccb0b
  d55cba04bfd50da63faf18bd845433622daf97c06a10d0f121a4010220012158
  205c099bec31faa581d14e208250d3ffda9ec7f543043008bc84967a8d875b5d
  78225820539d57429fcb1c138da29010a155dca14566a8f55ac2f1780810c49d
  4ed72d588'
]]></artwork>
      </section>
      <section anchor="cose-key-refs">
        <name>COSE key reference types</name>
        <t>TODO: This should eventually move to a separate "algoritm IDs for two-party signing" spec, see: <eref target="https://mailarchive.ietf.org/arch/msg/cose/BjIO9qDNbuVinxAph7F-Z88GpFY/"/></t>
        <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.
These requirements are encoded in the CDDL <xref target="RFC8610"/> type <tt>COSE_Key_Ref</tt>:</t>
        <sourcecode type="cddl"><![CDATA[
COSE_Key_Ref = COSE_Key .within {
  1 ^ => $COSE_kty_ref   ; kty: Any reference type
  2 ^ => any,            ; kid is required
  any => any,            ; Any other entries allowed by COSE_Key
}
]]></sourcecode>
        <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: Ref-ARKG-derived
               ; kid: Opaque identifier of ARKG-pub
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65539,   ; alg: ESP256-ARKG

               ; ARKG-P256ADD-ECDH key handle
               ; (HMAC-SHA-256-128 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'a5013a0001000102582060b6dfddd31659598ae5de49acb220d8704949e84d48
  4b68344340e2565337d2033a00010002205851ae079e9c52212860678a7cee25
  b6a6d4048219d973768f8e1adb8eb84b220b0ee3a2532828b9aa65254fe3717a
  29499e9baee70cea75b5c8a2ec2eb737834f7467e37b3254776f65f4cfc81e2b
  c4747a842158184578616d706c65206170706c69636174696f6e20696e666f'
]]></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]</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>
        <t>These registrations add the following choices to the CDDL <xref target="RFC8610"/> type socket <tt>$COSE_kty_ref</tt>:</t>
        <sourcecode type="cddl"><![CDATA[
$COSE_kty_ref /= -65538   ; Placeholder value
$COSE_kty_ref /= -1       ; Value TBD
$COSE_kty_ref /= -2       ; Value TBD
]]></sourcecode>
      </section>
      <section anchor="cose-key-type-parameters-registrations">
        <name>COSE Key Type Parameters Registrations</name>
        <t>TODO: These should eventually move to a separate "algoritm IDs for two-party signing" spec, see: <eref target="https://mailarchive.ietf.org/arch/msg/cose/BjIO9qDNbuVinxAph7F-Z88GpFY/"/></t>
        <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="cose-key-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: 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>TODO: These should eventually move to a separate "algoritm IDs for two-party signing" spec, see: <eref target="https://mailarchive.ietf.org/arch/msg/cose/BjIO9qDNbuVinxAph7F-Z88GpFY/"/></t>
        <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>
      </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="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="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="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 1244?>

<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>
        <li>
          <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>
        </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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
ms7/AyWMHhU3xgAA

-->

</rfc>
