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

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

<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.
These consist of new key type definitions to represent ARKG public seeds
and references <xref target="I-D.lundberg-cose-2p-algs"/> to private keys derived using ARKG.</t>
      <section anchor="cose-arkg-pub-seed">
        <name>COSE key type: ARKG public seed</name>
        <t>An ARKG public seed is represented as a COSE_Key structure <xref target="RFC9052"/>
with <tt>kty</tt> value TBD (placeholder value -65537).
<xref target="tbl-arkg-pub-params"/> defines key type parameters <tt>pkbl</tt> (-1) and <tt>pkkem</tt> (-2) for the <tt>BL</tt> and <tt>KEM</tt> public key, respectively,
as well as key type parameter <tt>dkalg</tt> (-3), representing the algorithm that derived public and private keys are to be used with.</t>
        <table anchor="tbl-arkg-pub-params">
          <name>COSE key type parameters for the ARKG-pub key type.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Value type</th>
              <th align="left">Required?</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">pkbl</td>
              <td align="left">-1</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">BL key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">pkkem</td>
              <td align="left">-2</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">KEM key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">dkalg</td>
              <td align="left">-3</td>
              <td align="left">int / tstr</td>
              <td align="left">Optional</td>
              <td align="left">
                <tt>alg</tt> parameter of public and private keys derived from this ARKG public seed</td>
            </tr>
          </tbody>
        </table>
        <t>When <tt>dkalg</tt> (-3) is present in an ARKG public seed,
the <tt>alg</tt> (3) parameter of public keys derived using <tt>ARKG-Derive-Public-Key</tt> with that seed
<bcp14>SHOULD</bcp14> be set to the <tt>dkalg</tt> (-3) value of the seed.</t>
        <t>The <tt>alg</tt> (3) parameter, when present,
identifies the ARKG instance this public seed is to be used with.
<xref target="tbl-arkg-pub-algs"/> defines an initial set of COSE algorithm identifiers for this purpose.</t>
        <table anchor="tbl-arkg-pub-algs">
          <name>COSE algorithm identifiers to represent ARKG instances.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ARKG-P256ADD-ECDH</td>
              <td align="left">TBD (placeholder -65700)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256ADD-ECDH"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P384ADD-ECDH</td>
              <td align="left">TBD (placeholder -65701)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P384ADD-ECDH"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P521ADD-ECDH</td>
              <td align="left">TBD (placeholder -65702)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P521ADD-ECDH"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P256kADD-ECDH</td>
              <td align="left">TBD (placeholder -65703)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256kADD-ECDH"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-curve25519ADD-X25519</td>
              <td align="left">TBD (placeholder -65704)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-curve25519ADD-X25519"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-curve448ADD-X448</td>
              <td align="left">TBD (placeholder -65705)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-curve448ADD-X448"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-edwards25519ADD-X25519</td>
              <td align="left">TBD (placeholder -65706)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-edwards25519ADD-X25519"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-edwards448ADD-X448</td>
              <td align="left">TBD (placeholder -65707)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-edwards448ADD-X448"/> of this document</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL <xref target="RFC8610"/> example represents an <tt>ARKG-P256ADD-ECDH</tt> public seed
restricted to generating derived keys for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65537,   ; kty: ARKG-pub (placeholder value)
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65700,   ; alg: ARKG-P256ADD-ECDH (placeholder value)

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

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

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

               ; ARKG-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',

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-01"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC6090">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="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 1263?>

<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>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial Version</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial Fixes to formatting and references.</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Rewritten introduction.</t>
        </li>
        <li>
          <t>Renamed ARKG-Derive-Secret-Key to ARKG-Derive-Private-Key.</t>
        </li>
        <li>
          <t>Overhauled EC instantiations to use hash_to_field and account for non-prime order curve key generation.</t>
        </li>
        <li>
          <t>Eliminated top-level MAC and KDF instance parameters.</t>
        </li>
        <li>
          <t>Added info parameter to instance parameter functions.</t>
        </li>
        <li>
          <t>Added requirement of KEM ciphertext integrity and generic formula for augmenting any KEM using HMAC.</t>
        </li>
        <li>
          <t>Added curve/edwards25519/448 instances.</t>
        </li>
        <li>
          <t>Added proposal for COSE bindings and key reference types.</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Renamed section "Using HMAC to adapt a KEM without {integrity protection =&gt; ciphertext integrity}".</t>
        </li>
        <li>
          <t>Fixed info argument to HMAC in section "Using HMAC to adapt a KEM without ciphertext integrity".</t>
        </li>
        <li>
          <t>Added reference to Shoup for definition of key encapsulation mechanism.</t>
        </li>
        <li>
          <t>Added CDDL definition of COSE_Key_Ref</t>
        </li>
        <li>
          <t>Editorial fixes to references.</t>
        </li>
        <li>
          <t>Renamed proposed COSE Key Types.</t>
        </li>
      </ul>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>Extracted COSE_Key_Ref definition and COSE algorithm registrations to draft-lundberg-cose-two-party-signing-algs.</t>
        </li>
        <li>
          <t>Redefined alg (3) parameter and added dkalg (-3) in ARKG-pub COSE_Key</t>
        </li>
        <li>
          <t>Defined alg (3) and inst (-3) parameters of Ref-ARKG-derived COSE key type</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Dain Nilsson">
        <organization>Yubico</organization>
        <address>
      </address>
      </contact>
      <contact fullname="Peter Altmann">
        <organization>Agency for Digital Government</organization>
        <address>
          <postal>
            <country>SE</country>
          </postal>
        </address>
      </contact>
      <contact initials="M. B." surname="Jones" fullname="Michael B. Jones">
        <organization>Self-Issued Consulting</organization>
        <address>
          <postal>
            <country>United States</country>
          </postal>
          <uri>https://self-issued.info/</uri>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
A7/QAAA=

-->

</rfc>
