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

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Asymmetric cryptography, also called public key cryptography, is a fundamental component of much of modern information security.
However, even the flexibility of asymmetric cryptosystems is not always enough for all applications.
For the sake of privacy and forward secrecy it may be necessary to frequently generate new keys,
but it is not always feasible for the holder of the private keys to be available whenever a new key pair is needed.
For example, this is often the case when using a hardware security device to hold private keys,
where the device may be detached or locked at the time a new key pair is needed.</t>
      <t>The Asynchronous Remote Key Generation (ARKG) algorithm
enables the holder of private keys to delegate generation of public keys without giving access to the corresponding private keys.
This enables a public key consumer to autonomously generate public keys whenever one is needed,
while the private key holder can later derive the corresponding private key using a "key handle" generated along with the public key.</t>
      <t>The algorithm consists of three procedures:
(1) the <em>delegating party</em> generates a <em>seed pair</em> and emits the <em>public seed</em> to a <em>subordinate party</em>,
(2) the subordinate party uses the public seed to generate a public key and a <em>key handle</em> on behalf of the delegating party, and
(3) the delegating party uses the key handle and the <em>private seed</em>
to derive the private key corresponding to the public key generated by procedure (2).
Procedure (1) is performed once, and procedures (2) and (3) may be repeated any number of times with the same seed pair.
The required cryptographic primitives are a public key blinding scheme, a key encapsulation mechanism (KEM),
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>
      <t>Some motivating use cases of ARKG include:</t>
      <ul spacing="normal">
        <li>
          <t>Efficient single-use signing keys.
The European Union has proposed a digital identity system which, in order to protect users' privacy,
needs a unique key pair for each authentication signature.
In online usage the system could relatively easily create a key on demand,
submit it to a certification authority to have a single-use certificate issued for that key,
and then submit that certificate with an authentication signature to a third party to access a service.  </t>
          <t>
However, the proposed system also includes offline use cases:
A user might for example need to use the system in a location with poor or no internet connectivity
to present a digital driver's license or authorize a payment.
For this, the system may need to pre-emptively generate a large amount of single-use certificates to be used offline.  </t>
          <t>
One candidate implementation under evaluation to provide signing and key management for this system
is the W3C Web Authentication API [WebAuthn] (WebAuthn),
which requires a user gesture whenever a WebAuthn operation is invoked.
A WebAuthn-based implementation of the proposed digital identity system
could use ARKG to pre-emptively generate key pairs for offline use without the need to prompt for a user gesture for each key pair generated.</t>
        </li>
        <li>
          <t>Enhanced forward secrecy for encrypted messaging.
For example, <eref target="https://www.rfc-editor.org/rfc/rfc9052.html#name-direct-key-agreement">section 8.5.4 of RFC 9052</eref> defines COSE representations for encrypted messages and 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."
Applications could work around this limitation by exchanging a large number of keys in advance,
but that number limits how many messages can be sent before another such exchange is needed.
This also requires the sender to allocate storage space for the keys,
which may be challenging to support in constrained hardware.  </t>
          <t>
ARKG could enable the sender to generate ephemeral recipient public keys on demand.
This may enhance forward secrecy if the sender keeps the ARKG public seed secret,
since each recipient key pair is used to encrypt only one message.</t>
        </li>
        <li>
          <t>Generating additional public keys as backup keys.
For example, the W3C Web Authentication API [WebAuthn] (WebAuthn) generates a new key pair for each account on each web site.
This makes it difficult for users to set up a backup authenticator,
because each time a key pair is created for the primary authenticator,
another key pair also needs to be created for the backup authenticator, which may be stored in a safe but inconvenient location.  </t>
          <t>
ARKG could enable the primary authenticator to also generate a public key for a paired backup authenticator
whenever it generates a key pair for itself,
allowing the user to set up the pairing once
and then leave the backup authenticator in safe storage until the primary authenticator is lost.</t>
        </li>
      </ul>
      <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="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 some notation and
the abstract instance parameters used to construct the three ARKG functions,
followed by the definitions of the three ARKG functions.</t>
        <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>When literal text strings are to be interpreted as octet strings,
they are encoded using UTF-8.</t>
            </li>
            <li>
              <t>Elliptic curve operations are written in multiplicative notation:
<tt>*</tt> denotes point multiplication, i.e., the curve group operation;
<tt>^</tt> denotes point exponentiation, i.e., repeated point multiplication;
and <tt>+</tt> denotes scalar addition modulo the curve order.</t>
            </li>
            <li>
              <t><tt>Random(min_inc, max_exc)</tt> represents a cryptographically secure random integer
greater than or equal to <tt>min_inc</tt> and strictly less than <tt>max_exc</tt>.</t>
            </li>
          </ul>
        </section>
        <section anchor="instance-parameters">
          <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 secret key <tt>sk</tt>.</t>
                </li>
                <li>
                  <t>Function <tt>BL-Blind-Public-Key(pk, tau) -&gt; pk_tau</tt>: Deterministically compute a blinded public key.      </t>
                  <t>
Input consists of a blinding public key <tt>pk</tt> and a blinding factor <tt>tau</tt>.      </t>
                  <t>
Output consists of the blinded public key <tt>pk_tau</tt>.</t>
                </li>
                <li>
                  <t>Function <tt>BL-Blind-Secret-Key(sk, tau) -&gt; sk_tau</tt>: Deterministically compute a blinded secret key.      </t>
                  <t>
Input consists of a blinding secret key <tt>sk</tt> and a blinding factor <tt>tau</tt>.      </t>
                  <t>
Output consists of the blinded secret key <tt>sk_tau</tt>.</t>
                </li>
                <li>
                  <t>Integer <tt>L_bl</tt>: The length of the blinding factor <tt>tau</tt> in octets.</t>
                </li>
              </ul>
              <t>
<tt>pk</tt> and <tt>pk_tau</tt> are opaque octet strings of arbitrary length.
<tt>tau</tt> is an opaque octet string of length <tt>L_bl</tt>.
The representations of <tt>sk</tt>, <tt>sk_tau</tt> and <tt>L_bl</tt> are an undefined implementation detail.  </t>
              <t>
See <xref target="Wilson"/> for definitions of security properties required of the key blinding scheme <tt>BL</tt>.</t>
            </li>
            <li>
              <t><tt>KEM</tt>: A key encapsulation mechanism, consisting of the functions:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>KEM-Generate-Keypair() -&gt; (pk, sk)</tt>: Generate a key encapsulation key pair.      </t>
                  <t>
No input.      </t>
                  <t>
Output consists of public key <tt>pk</tt> and secret key <tt>sk</tt>.</t>
                </li>
                <li>
                  <t><tt>KEM-Encaps(pk) -&gt; (k, c)</tt>: Generate a key encapsulation.      </t>
                  <t>
Input consists of an encapsulation public key <tt>pk</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) -&gt; k</tt>: Decapsulate a shared secret.      </t>
                  <t>
Input consists of encapsulation secret key <tt>sk</tt> and encapsulation ciphertext <tt>c</tt>.      </t>
                  <t>
Output consists of the shared secret <tt>k</tt> on success, or an error otherwise.</t>
                </li>
              </ul>
              <t>
<tt>pk</tt>, <tt>k</tt> and <tt>c</tt> are opaque octet strings.
The representation of <tt>sk</tt> is an undefined implementation detail.  </t>
              <t>
See <xref target="Wilson"/> for definitions of security properties required of the key encapsulation mechanism <tt>KEM</tt>.</t>
            </li>
            <li>
              <t><tt>MAC</tt>: A message authentication code (MAC) scheme, consisting of:
              </t>
              <ul spacing="normal">
                <li>
                  <t>Function <tt>MAC-Tag(k, m) -&gt; t</tt>: Generate a message authentication tag for a given message using a given key.      </t>
                  <t>
Input consists of the shared MAC key <tt>k</tt> and the message <tt>m</tt>.      </t>
                  <t>
Output consists of the MAC tag <tt>t</tt>.</t>
                </li>
                <li>
                  <t>Function <tt>MAC-Verify(k, m, t) -&gt; { 0, 1 }</tt>: Verify a message authentication tag.      </t>
                  <t>
Input consists of the shared MAC key <tt>k</tt>, the message <tt>m</tt> and the MAC tag <tt>t</tt>.      </t>
                  <t>
Output is 1 if and only if <tt>MAC-Tag(k, m) = t</tt>.</t>
                </li>
                <li>
                  <t>Integer <tt>L_mac</tt>: The length of the MAC key <tt>k</tt> in octets.</t>
                </li>
              </ul>
              <t>
<tt>k</tt> is an opaque octet string of length <tt>L_mac</tt>.
<tt>m</tt> and <tt>t</tt> are opaque octet strings of arbitrary length.
The representation of <tt>L_mac</tt> is an undefined implementation detail.  </t>
              <t>
See <xref target="Frymann2020"/> for definitions of security properties required of the message authentication code scheme <tt>MAC</tt>.</t>
            </li>
            <li>
              <t><tt>KDF</tt>: A variable-length key derivation function with the signature:
<tt>KDF(info, ikm, L) -&gt; okm</tt>  </t>
              <t>
Input consists of a domain separation parameter <tt>info</tt>, input key material <tt>ikm</tt> and output length <tt>L</tt>.  </t>
              <t>
Output consists of output key material <tt>okm</tt> of length <tt>L</tt> in octets.  </t>
              <t><tt>info</tt> and <tt>ikm</tt> are opaque octet strings of arbitrary length.
<tt>okm</tt> is an opaque octet string of length <tt>L</tt>.
<tt>L</tt> is an integer with undefined representation.  </t>
              <t>
See <xref target="Frymann2020"/> for definitions of security properties required of the key derivation function <tt>KDF</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-Secret-Key</tt> output ECDSA keys,
then the ARKG instance will also output ECDSA keys.</t>
          <t>Instantiations <bcp14>MUST</bcp14> satisfy the following compatibility criteria:</t>
          <ul spacing="normal">
            <li>
              <t>The output shared secret <tt>k</tt> of <tt>KEM-Encaps</tt> and <tt>KEM-Decaps</tt>
is a valid input key material <tt>ikm</tt> of <tt>KDF</tt>.</t>
            </li>
            <li>
              <t>Output key material <tt>okm</tt> of length <tt>L_bl</tt> of <tt>KDF</tt>
is a valid input blinding factor <tt>tau</tt> of <tt>BL-Blind-Public-Key</tt> and <tt>BL-Blind-Secret-Key</tt>.  </t>
              <t>
It is permissible for some <tt>KDF</tt> outputs to not be valid blinding factors,
as long as this happens with negligible probability -
see section [Design Rationale: Using a MAC].</t>
            </li>
            <li>
              <t>Output key material <tt>okm</tt> of length <tt>L_mac</tt> of <tt>KDF</tt>
is a valid input MAC key <tt>k</tt> of <tt>MAC-Tag(k, m)</tt> and <tt>MAC-Verify(k, m, t)</tt>.  </t>
              <t>
It is permissible for some <tt>KDF</tt> outputs to not be valid MAC keys,
as long as this happens with negligible probability -
see section [Design Rationale: Using a MAC].</t>
            </li>
          </ul>
          <t>We denote a concrete ARKG instance by the pattern <tt>ARKG-BL-KEM-MAC-KDF</tt>,
substituting the chosen instantiation for the <tt>BL</tt>, <tt>KEM</tt>, <tt>MAC</tt> and <tt>KDF</tt> parts.
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>
          <t>```
ARKG-Generate-Seed() -&gt; (pk, sk)
    Options:
        BL         The key blinding scheme chosen for the ARKG instantiation.
        KEM        The key encapsulation mechanism chosen for the ARKG instantiation.</t>
          <artwork><![CDATA[
Inputs: None

Output:
  (pk, sk)  An ARKG seed key pair with public key pk and private key sk.
]]></artwork>
          <t>The output (pk, sk) is calculated as follows:</t>
          <t>(pk_kem, sk_kem) = KEM-Generate-Keypair()
   (pk_bl, sk_bl) = BL-Generate-Keypair()
   pk = (pk_kem, pk_bl)
   sk = (sk_kem, sk_bl)
```</t>
        </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>
          <t>```
ARKG-Derive-Public-Key((pk_kem, pk_bl), info) -&gt; (pk', kh)
    Options:
        BL         The key blinding scheme chosen for the ARKG instantiation.
        KEM        The key encapsulation mechanism chosen for the ARKG instantiation.
        MAC        The MAC scheme chosen for the ARKG instantiation.
        KDF        The key derivation function chosen for the ARKG instantiation.
        L_bl       The length in octets of the blinding factor tau of the key blinding scheme BL.
        L_mac      The length in octets of the MAC key of the MAC scheme MAC.</t>
          <artwork><![CDATA[
Inputs:
    pk_kem     A key encapsulation public key.
    pk_bl      A key blinding public key.
    info       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
                 secret key sk' corresponding to pk'.

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

(k, c) = KEM-Encaps(pk_kem)
tau = KDF("arkg-blind" || 0x00 || info, k, L_bl)
mk  = KDF("arkg-mac"   || 0x00 || info, k, L_mac)
tag = MAC-Tag(mk, c || info)

pk' = BL-Blind-Public-Key(pk_bl, tau)
kh = (c, tag) ```
]]></artwork>
          <t>If this procedure aborts due to an error,
for example because <tt>KDF</tt> returns an invalid <tt>tau</tt> or <tt>mk</tt>,
the procedure can safely be retried with the same arguments.</t>
        </section>
        <section anchor="the-function-arkg-derive-secret-key">
          <name>The function ARKG-Derive-Secret-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 secret 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 secret keys any number of times.</t>
          <t>```
ARKG-Derive-Secret-Key((sk_kem, sk_bl), kh, info) -&gt; sk'
    Options:
        BL         The key blinding scheme chosen for the ARKG instantiation.
        KEM        The key encapsulation mechanism chosen for the ARKG instantiation.
        MAC        The MAC scheme chosen for the ARKG instantiation.
        KDF        The key derivation function chosen for the ARKG instantiation.
        L_bl       The length in octets of the blinding factor tau of the
                     key blinding scheme BL.
        L_mac      The length in octets of the MAC key of the MAC scheme MAC.</t>
          <artwork><![CDATA[
Inputs:
    sk_kem     A key encapsulation secret key.
    sk_bl      A key blinding secret key.
    kh         A key handle output from ARKG-Derive-Public-Key.
    info       Optional context and application specific information
                 (can be a zero-length string).

Output:
    sk'        A blinded secret key.

The output sk' is calculated as follows:

(c, tag) = kh
k = KEM-Decaps(sk_kem, c)
mk = KDF("arkg-mac" || 0x00 || info, k, L_mac)

If MAC-Verify(mk, c || info, tag) = 0:
    Abort with an error.

tau = KDF("arkg-blind" || 0x00 || info, k, L_bl)
sk' = BL-Blind-Secret-Key(sk_bl, tau) ```
]]></artwork>
          <t>Errors in this procedure are typically unrecoverable.
For example, <tt>KDF</tt> might return an invalid <tt>tau</tt> or <tt>mk</tt>, or the <tt>tag</tt> may be invalid.
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-Secret-Key</tt>.
See also section [Design Rationale: Using a 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>
        <t>TODO: IANA registry? COSE/JOSE?</t>
        <section anchor="using-elliptic-curve-arithmetic-for-key-blinding">
          <name>Using elliptic curve arithmetic for key blinding</name>
          <t>Instantiations of ARKG whose output keys are elliptic curve keys
can use elliptic curve arithmetic as the key blinding scheme <tt>BL</tt>. <xref target="Wilson">Frymann2020</xref>
This section defines a general formula for such instantiations of <tt>BL</tt>.</t>
          <t>Let <tt>crv</tt> be an elliptic curve.
Then the <tt>BL</tt> parameter of ARKG may be instantiated as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Elliptic curve points are encoded to and from octet strings
using the procedures defined in sections 2.3.3 and 2.3.4 of <xref target="SEC1">SEC 1</xref>.</t>
            </li>
            <li>
              <t>Elliptic curve scalar values are encoded to and from octet strings
using the procedures defined in sections 2.3.7 and 2.3.8 of <xref target="SEC1">SEC 1</xref>.</t>
            </li>
            <li>
              <t><tt>N</tt> is the order of <tt>crv</tt>.</t>
            </li>
            <li>
              <t><tt>G</tt> is the generator of <tt>crv</tt>.</t>
            </li>
          </ul>
          <t>```
BL-Generate-Keypair() -&gt; (pk, sk)</t>
          <artwork><![CDATA[
sk = Random(1, N)
pk_tmp = G^sk
If pk_tmp equals the point at infinity, abort with an error.
pk = pk_tmp

TODO: Also reject G?
]]></artwork>
          <t>BL-Blind-Public-Key(pk, tau) -&gt; pk_tau</t>
          <artwork><![CDATA[
If tau = 0 or tau >= N, abort with an error.
pk_tau_tmp = pk * (G^tau)
If pk_tau_tmp equals the point at infinity, abort with an error.
pk_tau = pk_tau_tmp

TODO: Also reject G?
]]></artwork>
          <t>BL-Blind-Secret-Key(sk, tau) -&gt; sk_tau</t>
          <artwork><![CDATA[
If tau = 0 or tau >= N, abort with an error.
sk_tau_tmp = sk + tau
If sk_tau_tmp = 0, abort with an error.
sk_tau = sk_tau_tmp

TODO: Also reject 1? ```
]]></artwork>
        </section>
        <section anchor="using-ecdh-as-the-kem">
          <name>Using ECDH as the KEM</name>
          <t>Instantiations of ARKG can use ECDH <xref target="RFC6090"/> as the key encapsulation mechanism.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
          <t>Let <tt>crv</tt> be an elliptic curve used for ECDH.
Then the <tt>KEM</tt> parameter of ARKG may be instantiated as follows:</t>
          <ul spacing="normal">
            <li>
              <t>Elliptic curve points are encoded to and from octet strings
using the procedures defined in sections 2.3.3 and 2.3.4 of <xref target="SEC1">SEC 1</xref>.</t>
            </li>
            <li>
              <t>Elliptic curve coordinate field elements are encoded to and from octet strings
using the procedures defined in sections 2.3.5 and 2.3.6 of <xref target="SEC1">SEC 1</xref>.</t>
            </li>
            <li>
              <t>Elliptic curve scalar values are encoded to and from octet strings
using the procedures defined in sections 2.3.7 and 2.3.8 of <xref target="SEC1">SEC 1</xref>.</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 secret key (exponent) <tt>sk</tt>.</t>
            </li>
            <li>
              <t><tt>N</tt> is the order of <tt>crv</tt>.</t>
            </li>
            <li>
              <t><tt>G</tt> is the generator of <tt>crv</tt>.</t>
            </li>
          </ul>
          <t>```
KEM-Generate-Keypair() -&gt; (pk, sk)</t>
          <artwork><![CDATA[
sk = Random(1, N)
pk_tmp = G^sk
If pk_tmp equals the point at infinity, abort with an error.
pk = pk_tmp

TODO: Also reject G?
]]></artwork>
          <t>KEM-Encaps(pk) -&gt; (k, c)
    (pk', sk') = KEM-Generate-Keypair()</t>
          <artwork><![CDATA[
k = ECDH(pk, sk')
c = pk'
]]></artwork>
          <t>KEM-Decaps(sk, c) -&gt; k</t>
          <artwork><![CDATA[
pk' = c
k = ECDH(pk', sk) ```
]]></artwork>
        </section>
        <section anchor="using-both-elliptic-curve-arithmetic-for-key-blinding-and-ecdh-as-the-kem">
          <name>Using both elliptic curve arithmetic for key blinding and ECDH as the KEM</name>
          <t>If elliptic curve arithmetic is used for key blinding and ECDH is used as the KEM,
as described in the previous sections,
then both of them <bcp14>MAY</bcp14> use the same curve or <bcp14>MAY</bcp14> use different curves.
If both use the same curve, then it is also possible to use the same public key
as both the key blinding public key and the KEM public key. <xref target="Frymann2020"/></t>
          <t>TODO: Caveats? I think I read in some paper or thesis about specific drawbacks of using the same key for both.</t>
        </section>
        <section anchor="using-hmac-as-the-mac">
          <name>Using HMAC as the MAC</name>
          <t>Let <tt>Hash</tt> be a cryptographic hash function.
Then the <tt>MAC</tt> parameter of ARKG may be instantiated using HMAC <xref target="RFC2104"/> as follows:</t>
          <t>```
MAC-Tag(k, m) -&gt; t</t>
          <artwork><![CDATA[
t = HMAC-Hash(K=k, text=m)
]]></artwork>
          <t>MAC-Verify(k, m, t) -&gt; { 0, 1 }</t>
          <artwork><![CDATA[
t' = HMAC-Hash(K=k, text=m)
If t = t':
    return 1
Else:
    return 0 ```
]]></artwork>
        </section>
        <section anchor="using-hkdf-as-the-kdf">
          <name>Using HKDF as the KDF</name>
          <t>Let <tt>Hash</tt> be a cryptographic hash function.
Then the <tt>KDF</tt> parameter of ARKG may be instantiated using HKDF <xref target="RFC5869"/> as follows:</t>
          <t>```
KDF(info, ikm, L) -&gt; okm</t>
          <artwork><![CDATA[
PRK = HKDF-Extract with the arguments:
    Hash: Hash
    salt: not set
    IKM: ikm

okm = HKDF-Expand with the arguments:
    Hash: Hash
    PRK: PRK
    info: info
    L: L ```
]]></artwork>
        </section>
      </section>
      <section anchor="concrete-arkg-instantiations">
        <name>Concrete ARKG instantiations</name>
        <t>This section defines an initial set of concrete ARKG instantiations.</t>
        <t>TODO: IANA registry? COSE/JOSE?</t>
        <section anchor="arkg-p256-ecdh-p256-hmac-sha256-hkdf-sha256">
          <name>ARKG-P256-ECDH-P256-HMAC-SHA256-HKDF-SHA256</name>
          <t>The identifier <tt>ARKG-P256-ECDH-P256-HMAC-SHA256-HKDF-SHA256</tt> represents the following ARKG instantiation:</t>
          <ul spacing="normal">
            <li>
              <t><tt>BL</tt>: Elliptic curve arithmetic as described in section [Using elliptic curve arithmetic for key blinding] with the parameter:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> [SEC2].</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>KEM</tt>: ECDH <xref target="RFC6090"/> as described in section [Using ECDH as the KEM] with the parameter:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> [SEC2].</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>MAC</tt>: HMAC as described in section [Using HMAC as the MAC] with the parameter:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>KDF</tt>: HKDF as described in section [Using HKDF as the KDF] with the parameter:
              </t>
              <ul spacing="normal">
                <li>
                  <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                </li>
              </ul>
            </li>
            <li>
              <t><tt>L_bl</tt>: 32</t>
            </li>
            <li>
              <t><tt>L_mac</tt>: 32</t>
            </li>
          </ul>
          <section anchor="arkg-p384-ecdh-p384-hmac-sha384-hkdf-sha384">
            <name>ARKG-P384-ECDH-P384-HMAC-SHA384-HKDF-SHA384</name>
            <t>The identifier <tt>ARKG-P384-ECDH-P384-HMAC-SHA384-HKDF-SHA384</tt> represents the following ARKG instantiation:</t>
            <ul spacing="normal">
              <li>
                <t><tt>BL</tt>: Elliptic curve arithmetic as described in section [Using elliptic curve arithmetic for key blinding] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> [SEC2].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KEM</tt>: ECDH <xref target="RFC6090"/> as described in section [Using ECDH as the KEM] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> [SEC2].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>MAC</tt>: HMAC as described in section [Using HMAC as the MAC] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-384 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KDF</tt>: HKDF as described in section [Using HKDF as the KDF] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-384 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>L_bl</tt>: 48</t>
              </li>
              <li>
                <t><tt>L_mac</tt>: 48</t>
              </li>
            </ul>
          </section>
          <section anchor="arkg-p521-ecdh-p521-hmac-sha512-hkdf-sha512">
            <name>ARKG-P521-ECDH-P521-HMAC-SHA512-HKDF-SHA512</name>
            <t>The identifier <tt>ARKG-P521-ECDH-P521-HMAC-SHA512-HKDF-SHA512</tt> represents the following ARKG instantiation:</t>
            <ul spacing="normal">
              <li>
                <t><tt>BL</tt>: Elliptic curve arithmetic as described in section [Using elliptic curve arithmetic for key blinding] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> [SEC2].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KEM</tt>: ECDH <xref target="RFC6090"/> as described in section [Using ECDH as the KEM] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> [SEC2].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>MAC</tt>: HMAC as described in section [Using HMAC as the MAC] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-512 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KDF</tt>: HKDF as described in section [Using HKDF as the KDF] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-512 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>L_bl</tt>: 64</t>
              </li>
              <li>
                <t><tt>L_mac</tt>: 64</t>
              </li>
            </ul>
          </section>
          <section anchor="arkg-p256k-ecdh-p256k-hmac-sha256-hkdf-sha256">
            <name>ARKG-P256k-ECDH-P256k-HMAC-SHA256-HKDF-SHA256</name>
            <t>The identifier <tt>ARKG-P256k-ECDH-P256k-HMAC-SHA256-HKDF-SHA256</tt> represents the following ARKG instantiation:</t>
            <ul spacing="normal">
              <li>
                <t><tt>BL</tt>: Elliptic curve arithmetic as described in section [Using elliptic curve arithmetic for key blinding] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> [SEC2].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KEM</tt>: ECDH <xref target="RFC6090"/> as described in section [Using ECDH as the KEM] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> [SEC2].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>MAC</tt>: HMAC as described in section [Using HMAC as the MAC] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KDF</tt>: HKDF as described in section [Using HKDF as the KDF] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>L_bl</tt>: 32</t>
              </li>
              <li>
                <t><tt>L_mac</tt>: 32</t>
              </li>
            </ul>
          </section>
          <section anchor="arkg-ed25519-x25519-hmac-sha256-hkdf-sha256">
            <name>ARKG-Ed25519-X25519-HMAC-SHA256-HKDF-SHA256</name>
            <t>The identifier <tt>ARKG-Ed25519-X25519-HMAC-SHA256-HKDF-SHA256</tt> represents the following ARKG instantiation:</t>
            <ul spacing="normal">
              <li>
                <t><tt>BL</tt>: Elliptic curve arithmetic as described in section [Using elliptic curve arithmetic for key blinding] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The curve <tt>Ed25519</tt> [REF?].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KEM</tt>: ECDH <xref target="RFC6090"/> as described in section [Using ECDH as the KEM] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The curve <tt>X25519</tt> [REF?].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>MAC</tt>: HMAC as described in section [Using HMAC as the MAC] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KDF</tt>: HKDF as described in section [Using HKDF as the KDF] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>L_bl</tt>: 32</t>
              </li>
              <li>
                <t><tt>L_mac</tt>: 32</t>
              </li>
            </ul>
          </section>
          <section anchor="arkg-x25519-x25519-hmac-sha256-hkdf-sha256">
            <name>ARKG-X25519-X25519-HMAC-SHA256-HKDF-SHA256</name>
            <t>The identifier <tt>ARKG-X25519-X25519-HMAC-SHA256-HKDF-SHA256</tt> represents the following ARKG instantiation:</t>
            <ul spacing="normal">
              <li>
                <t><tt>BL</tt>: Elliptic curve arithmetic as described in section [Using elliptic curve arithmetic for key blinding] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The curve <tt>X25519</tt> [REF?].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KEM</tt>: ECDH <xref target="RFC6090"/> as described in section [Using ECDH as the KEM] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>crv</tt>: The curve <tt>X25519</tt> [REF?].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>MAC</tt>: HMAC as described in section [Using HMAC as the MAC] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>KDF</tt>: HKDF as described in section [Using HKDF as the KDF] with the parameter:
                </t>
                <ul spacing="normal">
                  <li>
                    <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
                  </li>
                </ul>
              </li>
              <li>
                <t><tt>L_bl</tt>: 32</t>
              </li>
              <li>
                <t><tt>L_mac</tt>: 32</t>
              </li>
            </ul>
          </section>
        </section>
      </section>
      <section anchor="cose-bindings">
        <name>COSE bindings</name>
        <t>TODO?: Define COSE representations for interoperability:
- ARKG public seed (for interoperability between different implementers of <tt>ARKG-Generate-Seed</tt> and <tt>ARKG-Derive-Public-Key</tt>)
- ARKG key handle (for interoperability between different implementers of <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Secret-Key</tt>)</t>
      </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>
      <t>TODO</t>
    </section>
    <section anchor="design-rationale">
      <name>Design rationale</name>
      <section anchor="using-a-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 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"/> for two purposes.</t>
        <t>The first is so that the delegating party can distinguish between key handles addressed to it
and those addressed to other delegating parties.
We anticipate use cases where a private key usage request may contain key handles for several delegating parties
eligible to fulfill the request,
and the delegate party to be used can be chosen opportunistically depending on which are available at the time.
Without the MAC, choosing the wrong key handle would cause the <tt>ARKG-Derive-Secret-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.
The MAC also allows ARKG key handles to be transmitted via heterogeneous data channels,
possibly including a mix of ARKG key handles and similar values used for other algorithms.</t>
        <t>The second purpose is so that the delegating party can be assured that no errors should happen
during the execution of <tt>ARKG-Derive-Secret-Key</tt>, such as out-of-range or invalid key values.
For example, key generation in <tt>ARKG-Derive-Public-Key</tt> might be done by randomly testing candidates [NIST.SP.800-56Ar3]
and retrying <tt>ARKG-Derive-Public-Key</tt> until a valid candidate is found.
A MAC enables <tt>ARKG-Derive-Secret-Key</tt> to assume that the first candidate from a given pseudo-random seed will be successful,
and otherwise return an explicit error rejecting the key handle as invalid.
<tt>ARKG-Derive-Public-Key</tt> is likely to run on powerful general-purpose hardware, such as a laptop, smartphone or server,
while <tt>ARKG-Derive-Secret-Key</tt> might run on more constrained hardware such as a cryptographic smart card,
which benefits greatly from such optimizations.</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>KEM</tt> as group exponentiation
and instantiating <tt>BL</tt> as group multiplication to blind public keys and modular integer addition to blind secret keys.
The <tt>MAC</tt> and <tt>KDF</tt> parameters correspond trivially to the MAC and KDF parameters in <xref target="Frymann2020"/>,
where KDF<sub>1</sub>(<em>k</em>) = KDF(<em>k</em>, <em>l</em><sub>1</sub>) and KDF<sub>2</sub>(<em>k</em>) = KDF(<em>k</em>, <em>l</em><sub>2</sub>)
with fixed labels <em>l</em><sub>1</sub> and <em>l</em><sub>2</sub>.
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>
    <section anchor="references">
      <name>References</name>
      <t>TODO</t>
      <t>TODO: Ask authors for canonical reference addresses</t>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="hkdf">
          <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="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="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="RFC3279">
          <front>
            <title>Algorithms and Identifiers for the Internet X.509 Public Key Infrastructure Certificate and Certificate Revocation List (CRL) Profile</title>
            <author fullname="L. Bassham" initials="L." surname="Bassham"/>
            <author fullname="W. Polk" initials="W." surname="Polk"/>
            <author fullname="R. Housley" initials="R." surname="Housley"/>
            <date month="April" year="2002"/>
            <abstract>
              <t>This document specifies algorithm identifiers and ASN.1 encoding formats for digital signatures and subject public keys used in the Internet X.509 Public Key Infrastructure (PKI). Digital signatures are used to sign certificates and certificate revocation list (CRLs). Certificates include the public key of the named subject. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="3279"/>
          <seriesInfo name="DOI" value="10.17487/RFC3279"/>
        </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="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="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="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="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="2020"/>
          </front>
        </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="Clermont" target="https://www.cryptoplexity.informatik.tu-darmstadt.de/media/crypt/teaching_1/theses_1/Sebastian_Clermont_Thesis.pdf">
          <front>
            <title>Post Quantum Asynchronous Remote Key Generation. Master's thesis</title>
            <author initials="S. A." surname="Clermont" fullname="Sebastian A. Clermont">
              <organization/>
            </author>
            <author>
              <organization>Technische Universität Darmstadt</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="WebAuthn-Recovery" target="https://github.com/Yubico/webauthn-recovery-extension">
          <front>
            <title>WebAuthn recovery extension: Asynchronous delegated key generation without shared secrets. GitHub</title>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="Frymann2020" target="https://eprint.iacr.org/2020/1004">
          <front>
            <title>Asynchronous Remote Key Generation: An Analysis of Yubico's Proposal for W3C WebAuthn. CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="F." surname="Kiefer" fullname="Franziskus Kiefer">
              <organization/>
            </author>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Frymann2023" target="https://eprint.iacr.org/2023/419">
          <front>
            <title>Asynchronous Remote Key Generation for Post-Quantum Cryptosystems from Lattices. 2023 IEEE 8th European Symposium on Security and Privacy</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Wilson" target="http://hdl.handle.net/10012/19316">
          <front>
            <title>Post-Quantum Account Recovery for Passwordless Authentication. Master's thesis</title>
            <author initials="S. M." surname="Wilson" fullname="Spencer MacLaren Wilson">
              <organization/>
            </author>
            <author>
              <organization>University of Waterloo,</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 869?>

<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 Pieter 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 Wilson <xref target="Wilson"/>, Clermont <xref target="Clermont"/> and Frymann et al. <xref target="Frymann2023"/>.</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
  Initial Version</t>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Dain Nilsson">
        <organization>Yubico</organization>
        <address>
      </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
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
iwAA

-->

</rfc>
