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

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

<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="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 of the base with itself;
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>
    <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="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 <xref target="design-rationale-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 <xref target="design-rationale-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>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Generate-Seed() -> (pk, sk)
    Options:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs: None

    Output:
        (pk, sk)  An ARKG seed key pair with public key pk
                    and private key 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>
      <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)
    Options:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.
        MAC       A MAC scheme.
        KDF       A key derivation function.
        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.

    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)
]]></sourcecode>
        <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>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Secret-Key((sk_kem, sk_bl), kh, info) -> sk'
    Options:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.
        MAC       A MAC scheme.
        KDF       A key derivation function.
        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.

    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)
]]></sourcecode>
        <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 <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 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>
        <sourcecode type="pseudocode"><![CDATA[
BL-Generate-Keypair() -> (pk, sk)

    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?


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

    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?


BL-Blind-Secret-Key(sk, tau) -> sk_tau

    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?
]]></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.
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>
        <sourcecode type="pseudocode"><![CDATA[
KEM-Generate-Keypair() -> (pk, sk)

    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?


KEM-Encaps(pk) -> (k, c)
    (pk', sk') = KEM-Generate-Keypair()

    k = ECDH(pk, sk')
    c = pk'


KEM-Decaps(sk, c) -> k

    pk' = c
    k = ECDH(pk', sk)
]]></sourcecode>
      </section>
      <section anchor="blinding-kem-ecdh">
        <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="mac-hmac">
        <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>
        <sourcecode type="pseudocode"><![CDATA[
MAC-Tag(k, m) -> t

    t = HMAC-Hash(K=k, text=m)


MAC-Verify(k, m, t) -> { 0, 1 }

    t' = HMAC-Hash(K=k, text=m)
    If t = t':
        return 1
    Else:
        return 0
]]></sourcecode>
      </section>
      <section anchor="kdf-hkdf">
        <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>
        <sourcecode type="pseudocode"><![CDATA[
KDF(info, ikm, L) -> okm

    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
]]></sourcecode>
      </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 instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve arithmetic as described in <xref target="blinding-ec"/> 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 as described in <xref target="kem-ecdh"/> 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 <xref target="mac-hmac"/> 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 <xref target="kdf-hkdf"/> 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-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 instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve arithmetic as described in <xref target="blinding-ec"/> 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 as described in <xref target="kem-ecdh"/> 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 <xref target="mac-hmac"/> 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 <xref target="kdf-hkdf"/> 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 instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve arithmetic as described in <xref target="blinding-ec"/> 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 as described in <xref target="kem-ecdh"/> 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 <xref target="mac-hmac"/> 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 <xref target="kdf-hkdf"/> 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 instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve arithmetic as described in <xref target="blinding-ec"/> 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 as described in <xref target="kem-ecdh"/> 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 <xref target="mac-hmac"/> 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 <xref target="kdf-hkdf"/> 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 instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve arithmetic as described in <xref target="blinding-ec"/> 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 as described in <xref target="kem-ecdh"/> 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 <xref target="mac-hmac"/> 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 <xref target="kdf-hkdf"/> 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 instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve arithmetic as described in <xref target="blinding-ec"/> 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 <xref target="kem-ecdh"/> 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 <xref target="mac-hmac"/> 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 <xref target="kdf-hkdf"/> 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 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 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="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 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="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="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="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="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 847?>

<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
  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:
H4sIAAAAAAAAA+1963bbOJbufz4FjvMjdo8l35LqlKu7Mo7jJJ5cJ051uldW
2qIoyOKIItUEaUeVrn6W8+M8ycyLnW/vDYCgRNlOqqpXnTNTq1ZMkbhsbOw7
NoBerxeZKs5H53FW5PpQVWWto3Re8pOp9nd3v93dj6IqrTJ8fTfR6sgs8mRS
FnlRG/VWz4pKq+d6oZ7qXJdxlRa52jx6+/zploqzi6JMq8ksiofDUl8eqg36
sBFlcX5xqHQeJXGlUWZxqNJ8XETRqEjyeIaORmU8rnrDMh5lepHV+Wioy4te
MsY/cTm96O3uRaYezlJj0F+1mKPK6cm7J0rdQa+mQE9pPtJzjX/yamNbbehR
WgGYOKMfp0eP8Kco8fT23ZONKK9naP8wGgGcwygpcqNzUxuLDcB9EMWljg/V
mU5qjGgRXRWAoizq+aE6fvL2aTTVC7waHUaqp54/fhJd6rxGU0qFhZSykOaj
9DId1XFGBYCgenio/lIP06TY4dGV4ySKoriuJgWg6qmyIOTLEFBlXGeZoOlk
lmbqhUUPvhTlRZynP/IsuCbx2lSl1tWhel7nF+Yixnyre/fwPsFQMKiqSKaT
IpvRm6LOK5qPsxP80rM4zdAxevlXPcM09I2OAE8DwL8Vk1w9kmla379t51L/
/j+q4b/Kn35SzCLCdVWmw7qigYYjexynuXqVZsYU+bqGo7woZ3h1yZh+++R4
f2/3nn289+29b+3j/QffuMdvQM30+Oj0zcE+PWBK4vKCcDOpqrk53NmR+SDo
doZplRRpjr9zszPMiuHOLDaVLulFb3f3YL8/w5zEV+k0laaESdC4OthXz1Kw
Q5lM0iTO1GONerM0T02VJup9nGW6MlzJzTI995QM/k1KxdX7OkU5/sKUqfZ3
9/bx8+zkeG8VeMB+dXWFGUou+kDXDh72epf7/flo3NERSoAqdQlwihnY2GiC
tdXX/m44KnSq9tRJlqVzGsJxXV5qdVwu5lVxUcbzySKKiIeDCTnOMGTMbzee
CdaEq88z/QmE2PfVp/2q7o3icgbJNKr6I73DeN7h4juVjoHU/OJ8b6eaAG6D
hzM9xMykcX7uOj2HqDKpWTN6QbOvpY76HtoQPxvvdDLBnCUQez/kGFZp0uq/
/k8F6rTAbbQxth9ibONNYSr173WcV/XsFmKzr14yed01qmLgqfH3engE0PPe
W50UAGBxuHY4y8Kg+bLETA2ErnVV2taV/lRB9jGXtSAe6UxDcuiRgqhTF42s
vwK/FHWlzAQicqRAdSVIu6+eptWzetjGz963N7GclYJXmBketYOr5+FCC0/K
xSzOc6LQ9dh4lSZTV3IJGXmqM/U0LkeTeNb69KSM8x9TM8V4n6d6rMtb4vcl
pDb+yessNbdD/M3UAPyDLvM4W4ASVDG2Qg/E8aYs5oWBUAG7qPcHx55GQMTH
Z+ousEJlEg2mgbynuqAnZmh1dPxSnZ0+PTs6VsdFjhHqPNEK03hczOY1CR3Y
AvRjVucQXASI8Vpvo1M8LE2mnpdpXvXTOClZDFHBnb3d3XutiTv4ZSduZQIs
nm9hqxASiVF7jlFFppkFWHFm1LiEeHwRV5B5GlRNoMPSODlRD6qJOqkxFRry
42wxw5SkqI0WHboYlW/K9DJOFm3MHdwWcwc795hn3oOEQBLrJdmc5rEECpIX
YMPcVghlmZdfCyKI9wClzIpie0VgeTwcJWwMKCd4BFOxMWToZNoYRUQH88rS
Saf4unbQGPNklPUnwFOm+7muiE729nf2vj3Y+wYGUNTr9VQ8hPUSJ1UU3d7w
BMNgUlzNwA6tJnEFuzMeAn4n0qgeMBKbxWymYYwkal4PM/xZI+guYLvlFypO
EsJBVTBzJUVZajMvcmI5NadJB3RowfSjdxPAk8TzeJhmhH7Xf6wu4xKanick
ns8zx3CHUaxqQ7yI7itUzR0cWs2NrkdFvpgREhpAGZA5bGyqQKOeAo7v0M4M
QKIZyGWYwmW7LT2f6BkeMxL/6TyluktN6hyzAwmBub8C34l4TxbfRdUV+otT
EvlxiwyA1kviFe6KVLWaxLAUUCQtVXGVt5CjriZppqUYlS/1RUo01AIDbQ71
JM7GTpIV+KfsR4JYuAz1jCEvCxjVmqgP1q6akej15qVDq5ljpGMHqm2PEYLe
iHgaYsEU8Dw7KgLcs5RsG0N4Nbqi6mSx1FnMCIIPQ64UDIqKKlLLHZVts4CM
FKVuNwuBASzATEQjme8DRvHCQQ58+6oMr3RKwil6D0x+QjFQANF5PILDgGGi
JV8IVJxlQCdmaZzmaAxIIkDHdVWXuu+YbpaOwJJRdAe+SlUWozqhhpgFHZMk
gem3zU4XZhDm6ihkn3YhYkv0lI9imjCABY0PlqHJwzBnNYiA/hYg1Fx5axDz
ZKxE7UfPiivQeLmtiNIFcrIeLWe12ThpCXJ0nhckC65i0JSGELmY8KwB6Bb3
9aMneEtNm3iqqc25yHCW50uMoNIKlLYgjOaaBEIMQQm+GZf6bzUGli0adsv1
FRP0dgSCpIptkMY6NikEAwNF3cMlI5a1RNpiG/SAHuNLuFUkS8BG6OSSJIbr
hZmTe4AZoEcyKP0pnsHa3kaDKWOkGFcWjUlspBlH9mDbcoShao99y9nUOYHW
gmg7Qt2S2dwVs2gZ6QrcDbJA/xkcTRIYFZer0pm+BuDoa4MNTr62cbiMP2fQ
hiKeigWC5+dJ/EbMhwwBAoO4KqkVyE2MiwR5SCUtANy0gkka1BCuSWouUYUb
K8nRjNQ7hoiv+npo/XRvcBOsijc8NJirrMBnwoT056GzE9SISxoahLe1N0kE
z8kIHUGuQPRu7m1xA+dO6xIYcVktzn1nhKpzo0mCgBTOmd00ZKPM5Lntmgqc
M/pQuB7CFklzxhs3th1t7ktHK99IpZpwENwVGvKob80Uy2J13mDlfFURLY9l
m2pFmwdbnV8bAJpGuRsZnp0THl/EBOpnL5yv9kxaYly1WDC04aKZAQW09KM3
zc89tpLmuiQpS9wJ7cDgB7NGlfgVjciyc6lh8DJh5AslcTPGBnjZNGRiIOGV
n8o+UwpJRLYXAqVAxlajGUnYtOYADzJM8sBnBB+/hq0bzw3ULjPtDD46PAMz
U5vPT15ubUdSiNFnTfw6T0RUPH/8ZMvOrDOMlqyXBNpHbb48Ot6ynfajR7A3
iLrJthJ1GsKMxv4mFjOcVWIAPIMrwH95LEWgn4xVyTOtWfYZjw7ShPArPojB
/jGKzgqgDnKOgcfQQTQsnJmvrMZPsnqkDykSdzKGMcOGG7FxpntU3KQXOVUV
YaQ4autdFfgBGOYkNjTRcFpoKtUohQ9OdgKFS0nUi9Yk8yyZbJORAF4SqYVa
FZkYZKCau043kh9B0ol4GJ4jdF8j00mfsYW3hGoCMxazQ8HOAAliujUapmlh
KhIg4IZA25Q6Y3xCVpKizMi40MK11BMbnnAZRwQJh4ZZxbKcSCjM5Y0+8Z9o
kKTIyDaNQ+Q1hUnkmlqPrELG9KEjat7ybO764W9hPeaDOF87YAELSrgcWdFA
L0S9kGlZkgKFgFXK2zsiBuyEWcSw0WWpgchjbPFnCYZcxCNxJGbpxaSSiRAT
gCeLeqXSAa4x0zGp6cblUfMC1fB/Tn0RWYOEwQ0wdzAdFAtX1vcwRIYNLY1I
fJE3CG7WObohW0tw/yPzebwg4qfJF4MrNdshKCRwHJRovadnczv/gcDOyJ1U
8Yw9VTBI90Q6g6km5Fk8MXpf54QryJgRTzdhhk1THn3NHpO+jLNaXgj1k5Ph
WYxIgcgPlAeqZT9kbAdjx4FeUpH6NlSz5DarozenYH8bwvmoNt3jFpEaM6CT
FcxcNJ0X2jAZBWafj+SBy601QyZefllMyZgiSvChxGFMeFgarTczLY2tEQmy
RgB+JBSzOFo/PU4CGMZJSJ/OsqIemzmGNyDoWxqmFyBepHgl12chKE7qqnHO
FXPWN/gqEh+z5kjOm8MfjBYF8aB/v3+PUPH2ybH6dvf+/scP5Tihh94IE5BU
PYDQiy9g3RDmPlo3yqjj12cnpBuFC2zcrKt7qzJg97MtEFO8eeMsJR+b2yCP
VhN1WbkDcVAVQC8q9dzwdH6ZwiRmagMWJprFU04Sx8rQoARR0Yd+v/9xBTub
UNDqg10r+bjl3ZFkkoLoYbv2QTSGBiPamF1H66w4ZnK+ChrU6WXjrfBYiuF/
AGV9igMdBQ6WJSBaQoPKB+eOhF8yUqpCjEMKRJNavxDjVNi8MTfYOiZZNbqk
macxDmsriG0pbs3AKL4i5lw06Cf7eMgBkQp/MQAywjikAHkOIrMd69AXIR1K
3isJXM+MLKskrELiO2OxqXm+OOIyj5PGmRMnyTG0NabQETxmGSSaMPV8XpSV
ksAFRQ7YRXeOGEssZjlBoDgYS2DcOrjjFaYfHQG1Jt6j0nHYz1TruYyfwQnt
aYn/sxJmoma+bSAIHT0mII4xMYsQ7S7Y07FTxbztHD0igyaeEQ4ElswwTqb1
3Ns7S67ul0velkvS8k8bW8ZGRwsb5LpC8yatdIDNKarDOhilZKPVmYg2Npt4
sqFGAXPsgA9shaJkgtZJTLKSm7e+cog+MX8aFiSjlKIPKw056vaVmYzFWhO9
uNxUJ0ht0mWpNBJ7wcRjzfyHGWczmafaWRHXkG0nyMJMZp1fJkLRhh67AGUm
s3oR6A+nsjWNkA46GzOCwLpXLmTHmqeZHwYTVegz+Uih+ZdpG9nshINww5hx
AgHkkmbXjJtEYGEqCsJdr3Xai6go2pPUAF41wM8dW7s/qWbZHVoh6Gwniu7c
UW8DN0S9gNyrAaq49izzYfcbtfHyh7N3lDhBf9Wr1/z89uTffzh9e/KYns+e
Hb144R8iW+Ls2esfXjxunpqax69fvjx59Vgq461qvYo2Xh79ZUO80Y3Xb96d
vn519GJDQpVhxDcWSxrUyIbpnIKi8GZMBA2alOlQ6PPR8Zv//N9799Tnz/+L
UwT2vv3pJ/vjwd7v7+EHkYv0xiJIfmJmFlE8h8/EM0lRQnidZBLBTIXMMRMK
ZlPQCxP2uw+EGUzMH4bJfO/e9/YFDbj10uGs9ZJxtvpmpbIgseNVRzcem633
S5huw3v0l9Zvh/fg5R8esnHR23vw8HuKFIN8XhWisYVixoXjpNy+b+T8pKSI
qxh9wSSyF/uOrf7ZsMjU4O9/HzSGFNRUUoERoQtd0BysnDu50lPvmQ8hd0nR
VfqTK2rWEkerRVbJNNNcHIoI3v/IhsR+ePek90DsS5f0kHDSg7ewpZMr+JIU
RQWRzCDlU2vooKBDAjlig98NoG/F7JsXAKlVuADBpX3dF3Ul3XDmUNPZd9TI
X5cb0Z8kgJ62GvFBmq6enIk2jK0hbiXhd1a0Df6l6cQkMUwvr3kpNl9nRQAk
hwUYSYO3qFzMNmdpfg49sA1F8ekcttRWazrjdvQn5pUNii/DhOT6PFsXvPJ+
wVrJ2rakd/9W0yQXamD7GDC8NJMJBdp5TZILD2zfA5Kld746a00i0O1FodUo
p4suQSywqm5iakMxZ6gkr5ZRsk06j4GHw2hNLNQq4I7IpgTRVmKKgXrLBdYv
CKF2xkltdJlsPKcT28FJa+MJQKthVrKvK1lI0NeGWyXAOWobcwA4iLma8+3I
RUhXhk4d+T4CAG2ALwiytqOpa2Ph/WUphsFZz9BYT6+9queW1QggaNmKTDtn
1YoFXyd2rYNJheenoZdIehJKkSGOee2P+rNc2lWxL7L3dLX3KJIIoZGlNQl3
kIVWQ0TSo1iCnpyNTGIAPhXP2yuLJOVYTA8evRhwWkqwyNYRpvXBzG3HLWw8
jUkM9tQTF4xFaz3LfboHViSK3dxSve/V5ny6rcx0C509bWxA34uz4tiwVFBB
gHReV/bn67rCjxafBnUDQ3Iwnw4sqTQDYMqWz2Y64CaXQH5EZXtvuB0Cm4Gt
4pohn0/P8Qi4W/l+LOUSSbBxvbXo3oJ+mn895GPQI4THgLpfjwmW+yvdU4Pn
vmLneM8YMTxeE4zXfMl4G+TeZrxLU/Hzx9tuMBzvqagcNXhxPswGkuVMbnk1
abWx3C2HxcmYMNyOnxWHTbYOinlMwfCW0cEjLYcphEi5sD2R32hbZVHeUY+q
WbAEUhfbX447oRyhbNuPU8DiOrLIIsFNmwHQjgPSem2a8YjOdMPL7DItySe/
MExBQ4q2Qgv5VR6LuS75QHJEbIbnJy9Joly3qrMkRGy2gpWEIlKomS8SJavd
fbFM6WLHbunB0J1wb4BGoAJQyU0wrWeSfAn4JViuE4StLE01cHy13CLMFOgJ
tqcHSWsgjzUPxPAIaCxT5n5XWS/3sXYU7Q67uP1GkNay/OooqYuaF1g4758G
XJYUlCZ9eJUa7Vl422NlkKxn4W7Wc5xnefifyWPr1kSZxYTZXh4dM7PdduXz
BvWNkr138QXR8owpoWoT9JpuqvjCxnAuUsrhccVcHoK8vU5JBDMMGIRm7JTR
J9fgYHYDlVBlgmZQrSo+GtyfYDKOFzw+aDwe4me1u6321E8YqXy9dpxfOILt
ZfD9kJYh9UMCne1RbNbHLvC8NDF/VFWHnpvFSaeiCxG6pN6mt1ZN1DjrMzsE
gP3FunANc0njX8pfQcL4VzPZdVzj9BpxmFVsj58wr1GGJ4U7exY76zITmswJ
t0bMQQM0s0mJcHDspyDCF0yExXQ2iKJu8wkeNOU9Gk0mvSgHZ9urAbU02BbN
Zlct8Z4yDQdoXuaqEMLykym008FBtmC7GQKtRQsrVMQwCFVIn19qI3EXtyNE
IcIXrriNLAiuG9ppU9kvSzTrppvpA10ddSZz2miO4hCi5H2Kf9j6HJESjRPP
uvGwuAxMI8YxrV1TZih7ec2MeSFElpijXjYMKe5edZdd8gkplnM1KTK9lFpI
EqjDTbJz3uFQDFxnJ8ePz47sQhkHEFZ7tUuQAHKlDgZ5GqLHWPThh7Hoaxx7
ck7wwaaNJmXKBOxjkbbxDjNiHJpzdkyNWTSQxX5K7M7S0XpG42aEAnqOt25g
JLbdXb2ubrpdlOKLZ4MZ4LSy2WG8w9IlpRpKTWIALIZ4/YjWjIfawrIEBcdX
Y1rXIN1uJPQ7oah6brPFcn2RpRfcBfho6HLke7SACC78/FlWw3sizWJIUiiA
n376EsyxxrgOdaHSK5YVqEVVh0HwM1Fle/01UfRe20guxV07s8Zd5AncQKk9
akBfe6ALImoaMw1hm/bawgysap/YnkwKwzHvUF655UOSKttieW6LUrSMQuig
2B2Y9RVBxev1PGDXfwKJW/AKuIQJOVe9zuPZML2oJVMWDRg9+i5q63zL7rTC
QU1RJkkrCLcS1BpKSxLmowVdD4Nokn503J1nLx01eRCSIMOZ+WgzKwpaCeR1
UdnNUC66kviXc/ff2YzsYBuHJMKRHgyiz0BEbgcsGYWyHEsrryLSMk60Qssc
VbehwneB08xdN+4ydN3IbqXwJVqZoT422Q6/3hiP9tLbx6PVwLvjkSROuTSC
VviWPSibR6CCVOcgjMwud2pcOtZobTB7XZCaFQkrGcqjH0qMuDMH+8akX6D4
H//4h+zLIWswWsVvOxYhBvzcBzDkv0cv3NNRV9Ck7wuCrVoF13h+ofNhDtWr
Iteh69B07MBSvOHQT5hfK5ckwCbEMJ/6quF/kjrc5CmbqYUgUKi+K94QlSUc
MeBFOVHNQEdkQTqf6hmVpb/kxHSHeHzpYcaFhxmV7Qwsc9H5FJ9961xPPhj+
YJpu6QOmdR37POblhECj3oaFVsjQ5VRQ5v6afJpBF8gDl1FtaGVvJTh8d+CS
nEL+oB20JSfPxGKs2uzPNF/dNCM7djjXFzSdmWYVpukzWF8ZTCe+S17/WCMz
lhZirk1r53H0l9HqxR3nNd4iCT3A5XYU5jE32SWtNgLW72bslZnfXJqcbd66
5Dj+7raaTv5pLO8qkG3hKtDzSoOPn7Qa7PBRmsJke8pTEC/wbt26EDnMz045
cU1c+NGLsFMYMTd2am2o6zpqhk+Pbano68kMrkNwuFAT1LBYWZq7rsJEEPIk
NMBb33KOZXL4tUmO9BsUO4cU7onbtPwWqx91Wbj4gtguW/1uUQ9y9NPetQrl
yk0nypcL2Fyc4FJ2QwVLK52wBhFdg25X+Buw/AwFIeFnUQs+ts66wu4yrunj
4yebG3ygCgO6of7+d7X7aXeX/kpUBc288DpgNlWtSiDADbzuroSPrqsL1HIu
w4wAc0W3oshhnZVSx9IhKy5aTYss3iHrE3pzYdXP6dgayH7rDvx8WNBqVMs2
AhvJpsXkJrvf5Q6KyY15qMvcxkDE+bDeIUyy2XTA7nbQA1EWZa5ldscPaAqT
0JarcXlRy96VG1Rk41p+jZW5TkO27MUlvb2iHduLC3fbquo26i+ymf9AUmGM
5kOHbKwfrdlZCNXrQozzSWy6Mg7ae+h+nnoLENHWb4Ge5ZLEu+mYT3yoAoyY
rk6u1XzBUvAS4knVBdoPyPkfvef/+03qPXOt3gsX7IMa3Xqvq/AaPWKFPR+t
0W1T/fZUp+lQnSsJDWHsEOVvUmJW0EPmT+XkpanVaH6RVbgr8fppRT1do5xk
wscqiFy1tJPvfLcZ5RHpFr99jRWLHdpXaVTT1nytJJJG87GeO6G+jM/xDdQd
5XEu5jarpM7tiUC8P6UdeRZlJ1vdROWt13gu0Q5vLwaB2KWi/Wg1Fm+UTbUd
BrEvioDHVtTL1hEZBIGcUvoVxwMjioiTg3QFCmjtzgV0E7jlRkiZlQQlla3s
yxp0Mwn03GnuamE8MwCfpJTfuBwau6YNNZKw5EhD6Y3cbhJ7yh0vKbkeCEYL
7g0gtqLJtJbCEftr4pTRHVk4dmdwtFFvlaTbo+W2XLlTO244giP1h+1Z08Hn
uvE+envwiLMGWHFyot81CzPO5vmBo4e6nR0cc6ROVwJZW0Z+vuMeezr5aWXB
wm3wvSICay3BcHZyux96H7kUyPUwxGat2uE0nKV1Lr8PuRPlsY/KWqRLrJtI
P10Zis3yeUFLJ0l5OWCJmy+ByqZa3qxFNauVDhmeN137y6J0JT+bk55NK6Ob
TbSRaJzWMiPElCQetCxgl+3J1qHPAN3vH/QPuB164m2CH/hUvI+0f3DvY1eu
uE2glnW4Xwek33uQHnSDNHg1cFtQxTqkyaEZ6dPHp/6jlU1FWGDJDrwxZTNq
omk2H3xvW71ywbfzajbHl6d/NVOnnexLzu22sWDOWY9pEYDXW+lUhS61JE2i
OWnCauDXj18fqiPZp0e7D9XTh2DW2+VtepUpym5XiTmnvv+jenUtEFTZjg0Q
/U5tPv2r9+nsGG2Brx7nucDUNHW78V6bt/mV4zXheDHV/+JtXjTV+rh7Yyvc
wk1D2nvYhGJF5p4cP37mRBs5CZ/vwFCCTB1N1ktVJyu57gd7GOjHUECudS9+
AWFo07Cul4bNnloCMpSNVP3/O+GYFD4cPk41bQ3M7Ea0XwW8+x68b/7fkd1E
CH7VLNxJI3GF2Zz2IVhTAS20iduDE6wPbAZ0sNWZu7rpNhVtuTTWX1SH3Jys
+xtVIuvyeN0i1F0C/u41i1Xexwsm9a5UTxiEu7aX1STbMJKYLLdzV7C2JCOH
dGzNFxinRAWrctUbrKGAHV/Trtvwt759V6LpZzuK+diDZtOm8I++ZHfGsYxN
C+KBSZRjBu/2L80ZJhTncvvS/Jcm6sWfYLwDfm5jtd62rAnL2WzstTgvrnVW
SrCwRFEY2oFe2KjcmrUAn8pJWA0CgG3zG54Ok95xfKnjyjxUp+QN51P8LXUs
4oMSS+bxXJfWhaXTYUHaFHKw8Q86PP2KdiSz5mnkEYPttlATwC035hkFjOyU
0OPnO/DOehNy0azaehabieitpSOcJvgQxM8arcWpH7fTWnUDxAd7kvfHtipr
S5HV7GMbpwBbUCs9gnbz+R/J6NGfqj/OwH7RDVm9toW765tw9hJl1d5twiY2
2rDHL04yo1c+7S5z5zMKRToOwCMsmNG4N8E/X49ul19ze3RTzx/sEenXontd
Iqqg7M3b54QzFOqdfJKtcT5M7RcKGpzQyA753ya8FmfVIQcijK7829PnLw+p
Q+kF3TW9zImhvrATgHlI/7SCi/bqAffqxaF64eZKdWUA3RCVWD2+84ZAgnD8
6dGrI58v9JCPT9n5N/zzUGiGoytv9u9/0yMJKk9MomfPjviZkCLPkuvpk5JK
G5q5XeUVC6NJmWwlLAXbAU+uCz20ZPrnz2H046fgUEFHsnY7D5kNkpz+6vTs
nW14AEzPAWK5N2A7af9jv9lB5PTWUn9eZ/1CnckOCicplzrz4vKazpinDxWQ
3UPrEP6nb87U3oPd3j07Gk4bd7JheTROQPyMDuwOt4N9+SHbAPAroLKDB/cs
odCTIxR+toSC53VUdqvKv3UqA4j/PCpb7eyXpDK0/utSWWcHlsruPQipDL8C
Kru/v2cJhZ4codzf2/eEgud1VHaryr91KgPo/zwqW+3sl6QyYPvXpbLODiyV
fXMvpDL8amvMaaP1pl+hM29T/bdGaZjkp0uKbPqrUdrNnf130Jono/379/e+
7f1Z/nwZnd2u8m+NyuycW+Ax429Pnjz8xcnL9vLn1U7+O5DVn38GVd2q7m+U
qDqmO6CpVvD+f6jry6lLjuccytwY8UEf0jZ+Xvlee5YpH6TFB1LJFiS6mm4l
YX2zq6Qa6upK6zwIxvkcAnvqzGB124TdNrQmc2HL9R5kFv28zjuyI1YACHIb
thiV/rafY9ocO/JHg32+4778JAjm0vY6oNXC9kNYlmMCKwXpbVjqMSdVKJ9U
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
bdV0s8D/BezZHrKkhAAA

-->

</rfc>
