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

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Asynchronous Remote Key Generation (ARKG) introduces a mechanism
to generate public keys without access to the corresponding private keys.
Such a mechanism is useful for many scenarios when a new public key is needed
but the private key holder is not available to perform the key generation.
This may occur when private keys are stored in a hardware security device,
which may be unavailable or locked at the time a new public key is needed.</t>
      <t>Some motivating use cases of ARKG include:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Single-use asymmetric keys</strong>:
Envisioned for the European Union's digital identity framework,
which is set to use single-use asymmetric keys to prevent colluding verifiers from using public keys as correlation handles.
Each digital identity credential would thus be issued with a single-use proof-of-possession key,
used only once to present the credential to a verifier.
ARKG empowers both online and offline usage scenarios:
for offline scenarios, ARKG enables pre-generation of public keys for single-use credentials
without needing to access the hardware security device that holds the private keys.
For online scenarios, ARKG gives the credential issuer assurance
that all derived private keys are bound to the same secure hardware element.
In both cases, application performance may be improved
since public keys can be generated in a general-purpose execution environment instead of a secure enclave.</t>
        </li>
        <li>
          <t><strong>Enhanced forward secrecy</strong>:
The use of ARKG can facilitate forward secrecy in certain contexts.
For instance, <eref target="https://www.rfc-editor.org/rfc/rfc9052.html#name-direct-key-agreement">section 8.5.4 of RFC 9052</eref> notes that
"Since COSE is designed for a store-and-forward environment rather than an online environment,
[...] forward secrecy (see <xref target="RFC4949"/>) is not achievable. A static key will always be used for the receiver of the COSE object."
As opposed to workarounds like exchanging a large number of keys in advance,
ARKG enables the the sender to generate ephemeral recipient public keys on demand.</t>
        </li>
        <li>
          <t><strong>Backup key generation</strong>:
For example, the W3C Web Authentication API [WebAuthn] (WebAuthn) generates a new key pair for each account on each web site.
ARKG could allow for simultaneously generating a backup public key when registering a new public key.
A primary authenticator could generate both a key pair for itself and a public key for a paired backup authenticator.
The backup authenticator only needs to be paired with the primary authenticator once,
and can then be safely stored until it is needed.</t>
        </li>
      </ul>
      <t>ARKG consists of three procedures:</t>
      <ul spacing="normal">
        <li>
          <t><strong>Initialization</strong>:
The <em>delegating party</em> generates a <em>seed pair</em> and discloses the <em>public seed</em> to a <em>subordinate party</em>,
while securely retaining the <em>private seed</em>.</t>
        </li>
        <li>
          <t><strong>Public key generation</strong>:
The subordinate party uses the public seed to autonomously generate a new public key
along with a unique <em>key handle</em> for the public key.
This can be repeated any number of times.</t>
        </li>
        <li>
          <t><strong>Private key derivation</strong>:
The delegating party uses a key handle and the private seed
to derive the private key corresponding to the public key generated along with the key handle.
This can be repeated with any number of key handles.</t>
        </li>
      </ul>
      <t>Notably, ARKG can be built entirely using established cryptographic primitives.
The required primitives are a public key blinding scheme and a key encapsulation mechanism (KEM),
which may in turn use a key derivation function (KDF) and a message authentication code (MAC) scheme.
Both conventional primitives and quantum-resistant alternatives exist that meet these requirements. <xref target="Wilson"/></t>
      <section anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
        <?line -18?>

</section>
      <section anchor="notation">
        <name>Notation</name>
        <t>The following notation is used throughout this document:</t>
        <ul spacing="normal">
          <li>
            <t>The symbol <tt>||</tt> represents octet string concatenation.</t>
          </li>
          <li>
            <t>Literal text strings and octet strings are denoted
using the CDDL syntax defined in <xref section="3.1" sectionFormat="of" target="RFC8610"/>.</t>
          </li>
          <li>
            <t>Elliptic curve operations are written in additive notation:
<tt>+</tt> denotes point addition, i.e., the curve group operation;
<tt>*</tt> denotes point multiplication, i.e., repeated point addition;
and <tt>+</tt> also denotes scalar addition modulo the curve order.
<tt>*</tt> has higher precedence than <tt>+</tt>, i.e., <tt>a + b * C</tt> is equivalent to <tt>a + (b * C)</tt>.</t>
          </li>
          <li>
            <t><tt>LEN(x)</tt> is the length, in octets, of the octet string <tt>x</tt>.</t>
          </li>
          <li>
            <t>The function <tt>I2OSP</tt> converts a nonnegative integer into an octet string as defined in <xref section="4.1" sectionFormat="of" target="RFC8017"/>.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="arkg">
      <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>This construction of ARKG is fully deterministic, extracting input entropy as explicit parameters,
as opposed to the internal random sampling typically used in the academic literature <xref target="Frymann2020"/> <xref target="Wilson"/> <xref target="Clermont"/>.
Implementations <bcp14>MAY</bcp14> choose to instead implement the <tt>ARKG-Derive-Seed</tt> and <tt>KEM-Encaps</tt> functions
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
      <t>The following subsections define the abstract instance parameters used to construct the three ARKG functions,
followed by the definitions of the three ARKG functions.</t>
      <section anchor="arkg-params">
        <name>Instance parameters</name>
        <t>ARKG is composed of a suite of other algorithms.
The parameters of an ARKG instance are:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: An asymmetric key blinding scheme <xref target="Wilson"/>, consisting of:
            </t>
            <ul spacing="normal">
              <li>
                <t>Function <tt>BL-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a blinding key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of a blinding public key <tt>pk</tt> and a blinding private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t>Function <tt>BL-PRF(ikm_tau, ctx) -&gt; tau</tt>: Derive a pseudorandom blinding factor.      </t>
                <t>
Input consists of input entropy <tt>ikm_tau</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the blinding factor <tt>tau</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-Private-Key(sk, tau) -&gt; sk_tau</tt>: Deterministically compute a blinded private key.      </t>
                <t>
Input consists of a blinding private key <tt>sk</tt>,
and the blinding factor <tt>tau</tt>.      </t>
                <t>
Output consists of the blinded private key <tt>sk_tau</tt>.</t>
              </li>
            </ul>
            <t>
<tt>ikm</tt> is an opaque octet string of a suitable length as defined by the ARKG instance.
<tt>ikm_tau</tt> is an opaque octet string generated as the <tt>k</tt> output of <tt>KEM-Encaps</tt> and <tt>KEM-Decaps</tt>.
<tt>ctx</tt> is an opaque octet string of arbitrary length.  </t>
            <t>
The representations of <tt>pk</tt> and <tt>pk_tau</tt> are defined by the protocol that invokes ARKG.
The representations of <tt>sk</tt>, <tt>tau</tt> and <tt>sk_tau</tt> are undefined implementation details.  </t>
            <t>
See <xref target="Wilson"/> for definitions of security properties required of the key blinding scheme <tt>BL</tt>.</t>
          </li>
          <li>
            <t><tt>KEM</tt>: A key encapsulation mechanism <xref target="Shoup"/>, consisting of the functions:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>KEM-Derive-Key-Pair(ikm) -&gt; (pk, sk)</tt>: Derive a key encapsulation key pair.      </t>
                <t>
Input consists of input keying material entropy <tt>ikm</tt>.      </t>
                <t>
Output consists of public key <tt>pk</tt> and private key <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>KEM-Encaps(pk, ikm, ctx) -&gt; (k, c)</tt>: Derive a key encapsulation.      </t>
                <t>
Input consists of an encapsulation public key <tt>pk</tt>,
input entropy <tt>ikm</tt>
and a domain separation parameter <tt>ctx</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, ctx) -&gt; k</tt>: Decapsulate a shared secret.      </t>
                <t>
Input consists of encapsulation private key <tt>sk</tt>, encapsulation ciphertext <tt>c</tt>
and a domain separation parameter <tt>ctx</tt>.      </t>
                <t>
Output consists of the shared secret <tt>k</tt> on success, or an error otherwise.</t>
              </li>
            </ul>
            <t>
<tt>ikm</tt> is an opaque octet string of a suitable length as defined by the ARKG instance.
<tt>k</tt>, <tt>c</tt> and <tt>ctx</tt> are opaque octet strings of arbitrary length.
The representation of <tt>pk</tt> is defined by the protocol that invokes ARKG.
The representation of <tt>sk</tt> is an undefined implementation detail.  </t>
            <t>
The KEM <bcp14>MUST</bcp14> guarantee integrity of the ciphertext,
meaning that knowledge of the public key <tt>pk</tt> and the domain separation parameter <tt>ctx</tt>
is required in order to create any ciphertext <tt>c</tt> that can be successfully decapsulated by the corresponding private key <tt>sk</tt>.
<xref target="hmac-kem"/> describes a general formula for how any KEM can be adapted to include this guarantee.
<xref target="design-rationale-mac"/> discusses the reasons for this requirement.  </t>
            <t>
See <xref target="Wilson"/> for definitions of additional security properties required of the key encapsulation mechanism <tt>KEM</tt>.</t>
          </li>
        </ul>
        <t>A concrete ARKG instantiation <bcp14>MUST</bcp14> specify the instantiation
of each of the above functions.</t>
        <t>The output keys of the <tt>BL</tt> scheme are also the output keys of the ARKG instance as a whole.
For example, if <tt>BL-Blind-Public-Key</tt> and <tt>BL-Blind-Private-Key</tt> output ECDSA keys,
then the ARKG instance will also output ECDSA keys.</t>
        <t>We denote a concrete ARKG instance by the pattern <tt>ARKG-NAME</tt>,
substituting for <tt>NAME</tt> some description of the chosen instantiation for <tt>BL</tt> and <tt>KEM</tt>.
Note that this pattern cannot in general be unambiguously parsed;
implementations <bcp14>MUST NOT</bcp14> attempt to construct an ARKG instance by parsing such a pattern string.
Concrete ARKG instances <bcp14>MUST</bcp14> always be identified by lookup in a registry of fully specified ARKG instances.
This is to prevent usage of algorithm combinations that may be incompatible or insecure.</t>
      </section>
      <section anchor="the-function-arkg-derive-seed">
        <name>The function ARKG-Derive-Seed</name>
        <t>This function is performed by the delegating party.
The delegating party derives 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 derive public keys on behalf of the delegating party.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Seed(ikm_bl, ikm_kem) -> (pk, sk)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        ikm_bl    Input keying material entropy for BL.
        ikm_kem   Input keying material entropy for KEM.

    Output:
        (pk, sk)  An ARKG seed pair with public seed pk
                    and private seed sk.

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

    (pk_bl,  sk_bl)  = BL-Derive-Key-Pair(ikm_bl)
    (pk_kem, sk_kem) = KEM-Derive-Key-Pair(ikm_kem)
    pk = (pk_bl, pk_kem)
    sk = (sk_bl, sk_kem)
]]></sourcecode>
        <section anchor="nondeterministic-variants">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Seed</tt>, <tt>KEM-Derive-Key-Pair</tt> and <tt>BL-Derive-Key-Pair</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameters
and sampling random entropy internally;
this choice does not affect interoperability.</t>
        </section>
      </section>
      <section anchor="the-function-arkg-derive-public-key">
        <name>The function ARKG-Derive-Public-Key</name>
        <t>This function is performed by the subordinate party, which holds the ARKG public seed <tt>pk = (pk_bl, pk_kem)</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,
using different <tt>ikm</tt> or <tt>ctx</tt> arguments,
in order to generate any number of public keys.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Public-Key((pk_bl, pk_kem), ikm, ctx) -> (pk', kh)
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        pk_bl     A key blinding public key.
        pk_kem    A key encapsulation public key.
        ikm       Input entropy for KEM encapsulation.
        ctx       An octet string of length at most 64,
                    containing optional context and
                    application specific information
                    (can be a zero-length string).

    Output:
        pk'       A blinded public key.
        kh        A key handle for deriving the blinded
                    private key sk' corresponding to pk'.

    The output (pk', kh) is calculated as follows:

    if LEN(ctx) > 64:
        Abort with an error.

    ctx'    = I2OSP(LEN(ctx), 1) || ctx
    ctx_bl  = 'ARKG-Derive-Key-BL.'  || ctx'
    ctx_kem = 'ARKG-Derive-Key-KEM.' || ctx'

    (ikm_tau, c) = KEM-Encaps(pk_kem, ikm, ctx_kem)
    tau = BL-PRF(ikm_tau, ctx_bl)
    pk' = BL-Blind-Public-Key(pk_bl, tau)

    kh = c
]]></sourcecode>
        <t>If this procedure aborts due to an error,
the procedure can safely be retried with the same <tt>(pk_bl, pk_kem)</tt> and <tt>ctx</tt> arguments but a new <tt>ikm</tt> argument.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
        <section anchor="nondeterministic-variants-1">
          <name>Nondeterministic variants</name>
          <t>Applications that do not need a deterministic interface <bcp14>MAY</bcp14> choose
to instead implement <tt>ARKG-Derive-Public-Key</tt> and <tt>KEM-Encaps</tt>
as nondeterministic procedures omitting their respective <tt>ikm</tt> parameter
and sampling random entropy internally;
this choice does not affect interoperability.</t>
          <t><tt>BL-PRF</tt> and <tt>BL-Blind-Public-Key</tt> must always be deterministic
for compatibility with <tt>ARKG-Derive-Private-Key</tt>.</t>
        </section>
      </section>
      <section anchor="the-function-arkg-derive-private-key">
        <name>The function ARKG-Derive-Private-Key</name>
        <t>This function is performed by the delegating party, which holds the ARKG private seed <tt>(sk_bl, sk_kem)</tt>.
The resulting private key <tt>sk'</tt> can be used in asymmetric cryptography protocols
to prove possession of <tt>sk'</tt> to an external party that has the corresponding public key.</t>
        <t>This function may be invoked any number of times with the same private seed,
in order to derive the same or different private keys any number of times.</t>
        <sourcecode type="pseudocode"><![CDATA[
ARKG-Derive-Private-Key((sk_bl, sk_kem), kh, ctx) -> sk'
    ARKG instance parameters:
        BL        A key blinding scheme.
        KEM       A key encapsulation mechanism.

    Inputs:
        sk_bl     A key blinding private key.
        sk_kem    A key encapsulation private key.
        kh        A key handle output from ARKG-Derive-Public-Key.
        ctx       An octet string of length at most 64,
                    containing optional context and
                    application specific information
                    (can be a zero-length string).

    Output:
        sk'       A blinded private key.

    The output sk' is calculated as follows:

    if LEN(ctx) > 64:
        Abort with an error.

    ctx'    = I2OSP(LEN(ctx), 1) || ctx
    ctx_bl  = 'ARKG-Derive-Key-BL.'  || ctx'
    ctx_kem = 'ARKG-Derive-Key-KEM.' || ctx'

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

    tau = BL-PRF(ikm_tau, ctx_bl)
    sk' = BL-Blind-Private-Key(sk_bl, tau)
]]></sourcecode>
        <t>Errors in this procedure are typically unrecoverable.
For example, <tt>KEM-Decaps</tt> may fail to decapsulate the KEM ciphertext <tt>kh</tt> if it fails an integrity check.
ARKG instantiations <bcp14>SHOULD</bcp14> be chosen in a way that such errors are impossible
if <tt>kh</tt> was generated by an honest and correct implementation of <tt>ARKG-Derive-Public-Key</tt>.
Incorrect or malicious implementations of <tt>ARKG-Derive-Public-Key</tt> do not degrade the security
of an honest and correct implementation of <tt>ARKG-Derive-Private-Key</tt>.
See also <xref target="design-rationale-mac"/>.</t>
        <t>See <xref target="long-ctx"/> for guidance on using <tt>ctx</tt> arguments longer than 64 bytes.</t>
      </section>
      <section anchor="long-ctx">
        <name>Using <tt>ctx</tt> values longer than 64 bytes</name>
        <t>The <tt>ctx</tt> parameter of <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt>
is limited to a length of at most 64 bytes.
This is because this value needs to be communicated from the <em>subordinate party</em> to the <em>delegating party</em>
to use the same argument value in both functions,
therefore it is necessary in some contexts to limit the size of this parameter
in order to limit the size of overall protocol messages.</t>
        <t>If applications require <tt>ctx</tt> values longer than 64 bytes,
implementors <bcp14>MAY</bcp14> use techniques such as that described in <xref section="5.3.3" sectionFormat="of" target="RFC9380"/>.
Precise procedure definitions are left as an application-specific implementation detail.</t>
      </section>
    </section>
    <section anchor="generic-formulae">
      <name>Generic ARKG instantiations</name>
      <t>This section defines generic formulae for instantiating the individual ARKG parameters,
which can be used to define concrete ARKG instantiations.</t>
      <section anchor="blinding-ec">
        <name>Using elliptic curve addition for key blinding</name>
        <t>Instantiations of ARKG whose output keys are elliptic curve keys
can use elliptic curve addition as the key blinding scheme <tt>BL</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>BL</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: An elliptic curve.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation tag.</t>
          </li>
        </ul>
        <t>Then the <tt>BL</tt> parameter of ARKG may be instantiated as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>N</tt> is the order of <tt>G</tt>.</t>
          </li>
          <li>
            <t>The function <tt>hash_to_field</tt> is defined in <xref section="5" sectionFormat="of" target="RFC9380"/>.</t>
          </li>
        </ul>
        <sourcecode type="pseudocode"><![CDATA[
BL-Derive-Key-Pair(ikm) -> (pk, sk)

    DST_bl_sk = 'ARKG-BL-EC-KG.' || DST_ext
    sk = hash_to_field(ikm, 1) with the parameters:
        DST: DST_bl_sk
        F: GF(N), the scalar field
           of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk = sk * G


BL-PRF(ikm_tau, ctx) -> tau

    DST_tau = 'ARKG-BL-EC.' || DST_ext || ctx
    tau = hash_to_field(tau, 1) with the parameters:
        DST: DST_tau
        F: GF(N), the scalar field
           of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite


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

    pk_tau = pk + tau * G


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

    sk_tau_tmp = sk + tau'
    If sk_tau_tmp = 0, abort with an error.
    sk_tau = sk_tau_tmp
]]></sourcecode>
      </section>
      <section anchor="hmac-kem">
        <name>Using HMAC to adapt a KEM without ciphertext integrity</name>
        <t>Not all key encapsulation mechanisms guarantee ciphertext integrity,
meaning that a valid KEM ciphertext can be created only with knowledge of the KEM public key.
This section defines a general formula for adapting any KEM to guarantee ciphertext integrity
by prepending a MAC to the KEM ciphertext.</t>
        <t>For example, ECDH does not guarantee ciphertext integrity - any elliptic curve point is a valid ECDH ciphertext
and can be successfully decapsulated using any elliptic curve private scalar.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: A key encapsulation mechanism as described for the <tt>KEM</tt> parameter in <xref target="arkg-params"/>,
except <tt>Sub-Kem</tt> <bcp14>MAY</bcp14> ignore the <tt>ctx</tt> parameter and <bcp14>MAY</bcp14> not guarantee ciphertext integrity.
<tt>Sub-Kem</tt> defines the functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated using <tt>Sub-Kem</tt>,
HMAC <xref target="RFC2104"/> and HKDF <xref target="RFC5869"/> as follows:</t>
        <ul spacing="normal">
          <li>
            <t><tt>L</tt> is the output length of <tt>Hash</tt> in octets.</t>
          </li>
          <li>
            <t><tt>LEFT(X, n)</tt> is the first <tt>n</tt> bytes of the byte array <tt>X</tt>.</t>
          </li>
          <li>
            <t><tt>DROP_LEFT(X, n)</tt> is the byte array <tt>X</tt> without the first <tt>n</tt> bytes.</t>
          </li>
        </ul>
        <t>We truncate the HMAC output to 128 bits (16 octets)
because as described in <xref target="design-rationale-mac"/>,
ARKG needs ciphertext integrity only to ensure correctness, not for security.
Extendable-output functions used as the <tt>Hash</tt> parameter <bcp14>SHOULD</bcp14> still be instantiated
with an output length appropriate for the desired security level,
in order to not leak information about the <tt>Sub-Kem</tt> shared secret key.</t>
        <sourcecode type="pseudocode"><![CDATA[
KEM-Derive-Key-Pair(ikm) -> (pk, sk)

    (pk, sk) = Sub-Kem-Derive-Key-Pair(ikm)


KEM-Encaps(pk, ikm, ctx) -> (k, c)

    ctx_sub = 'ARKG-KEM-HMAC.' || DST_ext || ctx
    (k', c') = Sub-Kem-Encaps(pk, ikm, ctx_sub)

    prk = HKDF-Extract with the arguments:
        Hash: Hash
        salt: not set
        IKM: k'

    info_mk = 'ARKG-KEM-HMAC-mac.' || DST_ext || ctx
    mk = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: info_mk
        L: L
    t = HMAC-Hash-128(K=mk, text=c')

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


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

    t = LEFT(c, 16)
    c' = DROP_LEFT(c, 16)
    ctx_sub = 'ARKG-KEM-HMAC.' || DST_ext || ctx
    k' = Sub-Kem-Decaps(sk, c', ctx_sub)

    prk = HKDF-Extract with the arguments:
        Hash: Hash
        salt: not set
        IKM: k'

    mk = HKDF-Expand with the arguments:
        Hash: Hash
        PRK: prk
        info: 'ARKG-KEM-HMAC-mac.' || DST_ext || ctx
        L: L

    t' = HMAC-Hash-128(K=mk, text=c')
    If t = t':
        k = HKDF-Expand with the arguments:
            Hash: Hash
            PRK: prk
            info: 'ARKG-KEM-HMAC-shared.' || DST_ext || ctx
            L: The length of k' in octets.
    Else:
        Abort with an error.
]]></sourcecode>
        <t>In concrete instances where <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> ignore the <tt>ctx</tt> parameter,
implementations <bcp14>MAY</bcp14> eliminate the parameter and omit the computation of <tt>ctx_sub</tt>.</t>
      </section>
      <section anchor="kem-ecdh">
        <name>Using ECDH as the KEM</name>
        <t>Instantiations of ARKG can use ECDH <xref target="RFC6090"/> as the key encapsulation mechanism <tt>KEM</tt> <xref target="Frymann2020"/> <xref target="Wilson"/>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>crv</tt>: an elliptic curve valid for use with ECDH <xref target="RFC6090"/>.</t>
          </li>
          <li>
            <t><tt>Hash</tt>: A cryptographic hash function.</t>
          </li>
          <li>
            <t><tt>hash-to-crv-suite</tt>: A hash-to-curve suite <xref target="RFC9380"/>
suitable for hashing to the scalar field of <tt>crv</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The above parameters define the following intermediate value:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DST_aug</tt>: <tt>'ARKG-ECDH.' || DST_ext</tt>.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: <tt>Hash</tt>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>DST_aug</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>Elliptic-Curve-Point-to-Octet-String</tt> and <tt>Octet-String-to-Elliptic-Curve-Point</tt>
are the conversion routines defined in sections 2.3.3 and 2.3.4 of <xref target="SEC1"/>,
without point compression.</t>
              </li>
              <li>
                <t><tt>ECDH(pk, sk)</tt> represents the compact output of ECDH <xref target="RFC6090"/>
using public key (curve point) <tt>pk</tt> and private key (exponent) <tt>sk</tt>.</t>
              </li>
              <li>
                <t><tt>G</tt> is the generator of the prime order subgroup of <tt>crv</tt>.</t>
              </li>
              <li>
                <t><tt>N</tt> is the order of <tt>G</tt>.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    DST_kem_sk = 'ARKG-KEM-ECDH-KG.' || DST_aug
    sk = hash_to_field(ikm, 1) with the parameters:
        DST: DST_kem_sk
        F: GF(N), the scalar field
          of the prime order subgroup of crv
        p: N
        m: 1
        L: The L defined in hash-to-crv-suite
        expand_message: The expand_message function
                        defined in hash-to-crv-suite

    pk = sk * G


Sub-Kem-Encaps(pk, ikm, ctx) -> (k, c)

    (pk', sk') = Sub-Kem-Derive-Key-Pair(ikm)

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


Sub-Kem-Decaps(sk, c, ctx) -> k

    pk' = Octet-String-to-Elliptic-Curve-Point(c)
    k = ECDH(pk', sk)
]]></sourcecode>
          </li>
        </ul>
        <t>Note: This instance intentionally ignores the <tt>ctx</tt> parameter of <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
      </section>
      <section anchor="kem-x25519-x448">
        <name>Using X25519 or X448 as the KEM</name>
        <t>Instantiations of ARKG can use X25519 or X448 <xref target="RFC7748"/> as the key encapsulation mechanism <tt>KEM</tt>.
This section defines a general formula for such instantiations of <tt>KEM</tt>.</t>
        <t>This formula has the following parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>DH-Function</tt>: the function X25519 or the function X448 <xref target="RFC7748"/>.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: A domain separation parameter.</t>
          </li>
        </ul>
        <t>The <tt>KEM</tt> parameter of ARKG may be instantiated as described in section <xref target="hmac-kem"/> with the parameters:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Hash</tt>: SHA-512 [FIPS 180-4] if <tt>DH-Function</tt> is X25519,
or SHAKE256 [FIPS 202] with output length 64 octets if <tt>DH-Function</tt> is X448.</t>
          </li>
          <li>
            <t><tt>DST_ext</tt>: <tt>'ARKG-ECDHX.' || DST_ext</tt>.</t>
          </li>
          <li>
            <t><tt>Sub-Kem</tt>: The functions <tt>Sub-Kem-Derive-Key-Pair</tt>, <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt> defined as follows:  </t>
            <ul spacing="normal">
              <li>
                <t><tt>G</tt> is the octet string <tt>h'0900000000000000 0000000000000000 0000000000000000 0000000000000000'</tt>
if <tt>DH-Function</tt> is X25519,
or the octet string <tt>h'0500000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000 0000000000000000'</tt>
if <tt>DH-Function</tt> is X448.      </t>
                <t>
These are the little-endian encodings of the integers 9 and 5,
which is the u-coordinate of the generator point of the respective curve group.</t>
              </li>
            </ul>
            <sourcecode type="pseudocode"><![CDATA[
Sub-Kem-Derive-Key-Pair(ikm) -> (pk, sk)

    sk = ikm
    pk = DH-Function(sk, G)


Sub-Kem-Encaps(pk, ikm, ctx) -> (k, c)

    (pk', sk') = Sub-Kem-Derive-Key-Pair(ikm)

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


Sub-Kem-Decaps(sk, c, ctx) -> k

    k = DH-Function(sk, c)
]]></sourcecode>
          </li>
        </ul>
        <t>Note: This instance intentionally ignores the <tt>ctx</tt> parameter of <tt>Sub-Kem-Encaps</tt> and <tt>Sub-Kem-Decaps</tt>.</t>
      </section>
      <section anchor="blinding-kem-same-key">
        <name>Using the same key for both key blinding and KEM</name>
        <t>When an ARKG instance uses the same type of key for both the key blinding and the KEM -
for example, if elliptic curve arithmetic is used for key blinding as described in <xref target="blinding-ec"/>
and ECDH is used as the KEM as described in <xref target="kem-ecdh"/> <xref target="Frymann2020"/> -
then the two keys <bcp14>MAY</bcp14> be the same key.
Representations of such an ARKG seed <bcp14>MAY</bcp14> allow for omitting the second copy of the constituent key,
but such representations <bcp14>MUST</bcp14> clearly identify that the single constituent key is to be used
both as the key blinding key and the KEM key.</t>
      </section>
    </section>
    <section anchor="concrete-arkg-instantiations">
      <name>Concrete ARKG instantiations</name>
      <t>This section defines an initial set of concrete ARKG instantiations.</t>
      <t>TODO: IANA registry? COSE/JOSE?</t>
      <section anchor="ARKG-P256">
        <name>ARKG-P256</name>
        <t>The identifier <tt>ARKG-P256</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp256r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P256_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P384">
        <name>ARKG-P384</name>
        <t>The identifier <tt>ARKG-P384</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp384r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-384 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P384_XMD:SHA-384_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P384'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 384 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P521">
        <name>ARKG-P521</name>
        <t>The identifier <tt>ARKG-P521</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The NIST curve <tt>secp521r1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-512 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>P521_XMD:SHA-512_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P521'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 512 bits of entropy.</t>
      </section>
      <section anchor="ARKG-P256k">
        <name>ARKG-P256k</name>
        <t>The identifier <tt>ARKG-P256k</tt> represents the following ARKG instance:</t>
        <ul spacing="normal">
          <li>
            <t><tt>BL</tt>: Elliptic curve addition as described in <xref target="blinding-ec"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
          <li>
            <t><tt>KEM</tt>: ECDH as described in <xref target="kem-ecdh"/> with the parameters:
            </t>
            <ul spacing="normal">
              <li>
                <t><tt>crv</tt>: The SECG curve <tt>secp256k1</tt> <xref target="SEC2"/>.</t>
              </li>
              <li>
                <t><tt>Hash</tt>: SHA-256 [FIPS 180-4].</t>
              </li>
              <li>
                <t><tt>hash-to-crv-suite</tt>: <tt>secp256k1_XMD:SHA-256_SSWU_RO_</tt> <xref target="RFC9380"/>.</t>
              </li>
              <li>
                <t><tt>DST_ext</tt>: <tt>'ARKG-P256k'</tt>.</t>
              </li>
            </ul>
          </li>
        </ul>
        <t>Each <tt>ikm_bl</tt>, <tt>ikm_kem</tt> and <tt>ikm</tt> input to the procedures in this ARKG instance
<bcp14>SHOULD</bcp14> contain at least 256 bits of entropy.</t>
      </section>
    </section>
    <section anchor="cose">
      <name>COSE bindings</name>
      <t>This section proposes additions to COSE <xref target="RFC9052"/> to support ARKG use cases.
These consist of new key type definitions to represent ARKG public seeds
and references <xref target="I-D.lundberg-cose-2p-algs"/> to private keys derived using ARKG.</t>
      <section anchor="cose-arkg-pub-seed">
        <name>COSE key type: ARKG public seed</name>
        <t>An ARKG public seed is represented as a COSE_Key structure <xref target="RFC9052"/>
with <tt>kty</tt> value TBD (placeholder value -65537).
<xref target="tbl-arkg-pub-params"/> defines key type parameters <tt>pkbl</tt> (-1) and <tt>pkkem</tt> (-2) for the <tt>BL</tt> and <tt>KEM</tt> public key, respectively,
as well as key type parameter <tt>dkalg</tt> (-3), representing the algorithm that derived public and private keys are to be used with.</t>
        <table anchor="tbl-arkg-pub-params">
          <name>COSE key type parameters for the ARKG-pub key type.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Label</th>
              <th align="left">Value type</th>
              <th align="left">Required?</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">pkbl</td>
              <td align="left">-1</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">BL key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">pkkem</td>
              <td align="left">-2</td>
              <td align="left">COSE_Key</td>
              <td align="left">Required</td>
              <td align="left">KEM key of ARKG public seed</td>
            </tr>
            <tr>
              <td align="left">dkalg</td>
              <td align="left">-3</td>
              <td align="left">int / tstr</td>
              <td align="left">Optional</td>
              <td align="left">
                <tt>alg</tt> parameter of public and private keys derived from this ARKG public seed</td>
            </tr>
          </tbody>
        </table>
        <t>When <tt>dkalg</tt> (-3) is present in an ARKG public seed,
the <tt>alg</tt> (3) parameter of public keys derived using <tt>ARKG-Derive-Public-Key</tt> with that seed
<bcp14>SHOULD</bcp14> be set to the <tt>dkalg</tt> (-3) value of the seed.</t>
        <t>The <tt>alg</tt> (3) parameter, when present,
identifies the ARKG instance this public seed is to be used with.
<xref target="tbl-arkg-pub-algs"/> defines an initial set of COSE algorithm identifiers for this purpose.</t>
        <table anchor="tbl-arkg-pub-algs">
          <name>COSE algorithm identifiers to represent ARKG instances.</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Value</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">ARKG-P256</td>
              <td align="left">TBD (placeholder -65700)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P384</td>
              <td align="left">TBD (placeholder -65701)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P384"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P521</td>
              <td align="left">TBD (placeholder -65702)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P521"/> of this document</td>
            </tr>
            <tr>
              <td align="left">ARKG-P256k</td>
              <td align="left">TBD (placeholder -65703)</td>
              <td align="left">The ARKG instance defined in <xref target="ARKG-P256k"/> of this document</td>
            </tr>
          </tbody>
        </table>
        <t>The following CDDL <xref target="RFC8610"/> example represents an <tt>ARKG-P256</tt> public seed
restricted to generating derived keys for use with the ESP256 <xref target="I-D.jose-fully-spec-algs"/> signature algorithm:</t>
        <sourcecode type="cddl"><![CDATA[
{
  1: -65537,   ; kty: ARKG-pub (placeholder value)
               ; kid: Opaque identifier
  2: h'60b6dfddd31659598ae5de49acb220d8
       704949e84d484b68344340e2565337d2',
  3: -65700,   ; alg: ARKG-P256 (placeholder value)

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

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

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

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

               ; ctx argument to ARKG-Derive-Private-Key
  -2: 'Example application info',

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-lundberg-cose-two-party-signing-algs-01"/>
        </reference>
        <reference anchor="IANA.cose" target="https://www.iana.org/assignments/cose">
          <front>
            <title>CBOR Object Signing and Encryption (COSE)</title>
            <author>
              <organization>IANA</organization>
            </author>
          </front>
        </reference>
        <reference anchor="RFC2104">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="M. Bellare" initials="M." surname="Bellare"/>
            <author fullname="R. Canetti" initials="R." surname="Canetti"/>
            <date month="February" year="1997"/>
            <abstract>
              <t>This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="2104"/>
          <seriesInfo name="DOI" value="10.17487/RFC2104"/>
        </reference>
        <reference anchor="RFC4949">
          <front>
            <title>Internet Security Glossary, Version 2</title>
            <author fullname="R. Shirey" initials="R." surname="Shirey"/>
            <date month="August" year="2007"/>
            <abstract>
              <t>This Glossary provides definitions, abbreviations, and explanations of terminology for information system security. The 334 pages of entries offer recommendations to improve the comprehensibility of written material that is generated in the Internet Standards Process (RFC 2026). The recommendations follow the principles that such writing should (a) use the same term or definition whenever the same concept is mentioned; (b) use terms in their plainest, dictionary sense; (c) use terms that are already well-established in open publications; and (d) avoid terms that either favor a particular vendor or favor a particular technology or mechanism over other, competing techniques that already exist or could be developed. This memo provides information for the Internet community.</t>
            </abstract>
          </front>
          <seriesInfo name="FYI" value="36"/>
          <seriesInfo name="RFC" value="4949"/>
          <seriesInfo name="DOI" value="10.17487/RFC4949"/>
        </reference>
        <reference anchor="RFC5869">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
            <author fullname="P. Eronen" initials="P." surname="Eronen"/>
            <date month="May" year="2010"/>
            <abstract>
              <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="5869"/>
          <seriesInfo name="DOI" value="10.17487/RFC5869"/>
        </reference>
        <reference anchor="RFC6090">
          <front>
            <title>Fundamental Elliptic Curve Cryptography Algorithms</title>
            <author fullname="D. McGrew" initials="D." surname="McGrew"/>
            <author fullname="K. Igoe" initials="K." surname="Igoe"/>
            <author fullname="M. Salter" initials="M." surname="Salter"/>
            <date month="February" year="2011"/>
            <abstract>
              <t>This note describes the fundamental algorithms of Elliptic Curve Cryptography (ECC) as they were defined in some seminal references from 1994 and earlier. These descriptions may be useful for implementing the fundamental algorithms without using any of the specialized methods that were developed in following years. Only elliptic curves defined over fields of characteristic greater than three are in scope; these curves are those used in Suite B. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="6090"/>
          <seriesInfo name="DOI" value="10.17487/RFC6090"/>
        </reference>
        <reference anchor="RFC7748">
          <front>
            <title>Elliptic Curves for Security</title>
            <author fullname="A. Langley" initials="A." surname="Langley"/>
            <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
            <author fullname="S. Turner" initials="S." surname="Turner"/>
            <date month="January" year="2016"/>
            <abstract>
              <t>This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7748"/>
          <seriesInfo name="DOI" value="10.17487/RFC7748"/>
        </reference>
        <reference anchor="RFC8017">
          <front>
            <title>PKCS #1: RSA Cryptography Specifications Version 2.2</title>
            <author fullname="K. Moriarty" initials="K." role="editor" surname="Moriarty"/>
            <author fullname="B. Kaliski" initials="B." surname="Kaliski"/>
            <author fullname="J. Jonsson" initials="J." surname="Jonsson"/>
            <author fullname="A. Rusch" initials="A." surname="Rusch"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides recommendations for the implementation of public-key cryptography based on the RSA algorithm, covering cryptographic primitives, encryption schemes, signature schemes with appendix, and ASN.1 syntax for representing keys and for identifying the schemes.</t>
              <t>This document represents a republication of PKCS #1 v2.2 from RSA Laboratories' Public-Key Cryptography Standards (PKCS) series. By publishing this RFC, change control is transferred to the IETF.</t>
              <t>This document also obsoletes RFC 3447.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8017"/>
          <seriesInfo name="DOI" value="10.17487/RFC8017"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC8610">
          <front>
            <title>Concise Data Definition Language (CDDL): A Notational Convention to Express Concise Binary Object Representation (CBOR) and JSON Data Structures</title>
            <author fullname="H. Birkholz" initials="H." surname="Birkholz"/>
            <author fullname="C. Vigano" initials="C." surname="Vigano"/>
            <author fullname="C. Bormann" initials="C." surname="Bormann"/>
            <date month="June" year="2019"/>
            <abstract>
              <t>This document proposes a notational convention to express Concise Binary Object Representation (CBOR) data structures (RFC 7049). Its main goal is to provide an easy and unambiguous way to express structures for protocol messages and data formats that use CBOR or JSON.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8610"/>
          <seriesInfo name="DOI" value="10.17487/RFC8610"/>
        </reference>
        <reference anchor="RFC8812">
          <front>
            <title>CBOR Object Signing and Encryption (COSE) and JSON Object Signing and Encryption (JOSE) Registrations for Web Authentication (WebAuthn) Algorithms</title>
            <author fullname="M. Jones" initials="M." surname="Jones"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>The W3C Web Authentication (WebAuthn) specification and the FIDO Alliance FIDO2 Client to Authenticator Protocol (CTAP) specification use CBOR Object Signing and Encryption (COSE) algorithm identifiers. This specification registers the following algorithms (which are used by WebAuthn and CTAP implementations) in the IANA "COSE Algorithms" registry: RSASSA-PKCS1-v1_5 using SHA-256, SHA-384, SHA-512, and SHA-1; and Elliptic Curve Digital Signature Algorithm (ECDSA) using the secp256k1 curve and SHA-256. It registers the secp256k1 elliptic curve in the IANA "COSE Elliptic Curves" registry. Also, for use with JSON Object Signing and Encryption (JOSE), it registers the algorithm ECDSA using the secp256k1 curve and SHA-256 in the IANA "JSON Web Signature and Encryption Algorithms" registry and the secp256k1 elliptic curve in the IANA "JSON Web Key Elliptic Curve" registry.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8812"/>
          <seriesInfo name="DOI" value="10.17487/RFC8812"/>
        </reference>
        <reference anchor="RFC9052">
          <front>
            <title>CBOR Object Signing and Encryption (COSE): Structures and Process</title>
            <author fullname="J. Schaad" initials="J." surname="Schaad"/>
            <date month="August" year="2022"/>
            <abstract>
              <t>Concise Binary Object Representation (CBOR) is a data format designed for small code size and small message size. There is a need to be able to define basic security services for this data format. This document defines the CBOR Object Signing and Encryption (COSE) protocol. This specification describes how to create and process signatures, message authentication codes, and encryption using CBOR for serialization. This specification additionally describes how to represent cryptographic keys using CBOR.</t>
              <t>This document, along with RFC 9053, obsoletes RFC 8152.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="96"/>
          <seriesInfo name="RFC" value="9052"/>
          <seriesInfo name="DOI" value="10.17487/RFC9052"/>
        </reference>
        <reference anchor="RFC9380">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
            <author fullname="S. Scott" initials="S." surname="Scott"/>
            <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
            <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
            <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
            <date month="August" year="2023"/>
            <abstract>
              <t>This document specifies a number of algorithms for encoding or hashing an arbitrary string to a point on an elliptic curve. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="9380"/>
          <seriesInfo name="DOI" value="10.17487/RFC9380"/>
        </reference>
        <reference anchor="SEC1" target="http://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2009"/>
          </front>
        </reference>
        <reference anchor="SEC2" target="http://www.secg.org/sec2-v2.pdf">
          <front>
            <title>SEC 2: Recommended Elliptic Curve Domain Parameters</title>
            <author>
              <organization>Certicom Research</organization>
            </author>
            <date year="2010"/>
          </front>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BIP32" target="https://github.com/bitcoin/bips/blob/master/bip-0032.mediawiki">
          <front>
            <title>BIP 32 Hierarchical Deterministic Wallets</title>
            <author initials="P." surname="Wuille" fullname="Pieter Wuille">
              <organization/>
            </author>
            <date year="2012"/>
          </front>
        </reference>
        <reference anchor="Clermont" target="https://www.cryptoplexity.informatik.tu-darmstadt.de/media/crypt/teaching_1/theses_1/Sebastian_Clermont_Thesis.pdf">
          <front>
            <title>Post Quantum Asynchronous Remote Key Generation. Master's thesis</title>
            <author initials="S. A." surname="Clermont" fullname="Sebastian A. Clermont">
              <organization>Technische Universität Darmstadt</organization>
            </author>
            <date year="2022"/>
          </front>
        </reference>
        <reference anchor="WebAuthn-Recovery" target="https://github.com/Yubico/webauthn-recovery-extension">
          <front>
            <title>WebAuthn recovery extension: Asynchronous delegated key generation without shared secrets. GitHub</title>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2019"/>
          </front>
        </reference>
        <reference anchor="Frymann2020" target="https://eprint.iacr.org/2020/1004">
          <front>
            <title>Asynchronous Remote Key Generation: An Analysis of Yubico's Proposal for W3C WebAuthn. CCS '20: Proceedings of the 2020 ACM SIGSAC Conference on Computer and Communications Security</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="F." surname="Kiefer" fullname="Franziskus Kiefer">
              <organization/>
            </author>
            <author initials="E." surname="Lundberg" fullname="Emil Lundberg">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <author initials="D." surname="Nilsson" fullname="Dain Nilsson">
              <organization/>
            </author>
            <date year="2020"/>
          </front>
        </reference>
        <reference anchor="Frymann2023" target="https://eprint.iacr.org/2023/419">
          <front>
            <title>Asynchronous Remote Key Generation for Post-Quantum Cryptosystems from Lattices. 2023 IEEE 8th European Symposium on Security and Privacy</title>
            <author initials="N." surname="Frymann" fullname="Nick Frymann">
              <organization/>
            </author>
            <author initials="D." surname="Gardham" fullname="Daniel Gardham">
              <organization/>
            </author>
            <author initials="M." surname="Manulis" fullname="Mark Manulis">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="Shoup" target="https://www.shoup.net/papers/iso-2.pdf">
          <front>
            <title>A Proposal for an ISO Standard for Public Key Encryption (version 2.0)</title>
            <author initials="V." surname="Shoup" fullname="Victor Shoup">
              <organization>IBM Zurich Research Lab</organization>
            </author>
            <date year="2001"/>
          </front>
        </reference>
        <reference anchor="Wilson" target="http://hdl.handle.net/10012/19316">
          <front>
            <title>Post-Quantum Account Recovery for Passwordless Authentication. Master's thesis</title>
            <author initials="S. M." surname="Wilson" fullname="Spencer MacLaren Wilson">
              <organization>University of Waterloo,</organization>
            </author>
            <date year="2023"/>
          </front>
        </reference>
      </references>
    </references>
    <?line 1215?>

<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>This section lists test vectors for validating implementations.</t>
      <t>Test vectors are listed in CDDL <xref target="RFC8610"/> syntax
using variable names defined in <xref target="arkg"/> and <xref target="generic-formulae"/>.
Elliptic curve points are encoded using the <tt>Elliptic-Curve-Point-to-Octet-String</tt> procedure
defined in section 2.3.3 of <xref target="SEC1"/>, without point compression.</t>
      <section anchor="arkg-p256">
        <name>ARKG-P256</name>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx         = 'ARKG-P256.test vectors'
ikm_bl      = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem     = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm         = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed:
DST_bl_sk   = h'41524b472d424c2d45432d4b472e41524b472d50323536'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
pk_bl       = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
                  65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem      = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
                  dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl       = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem      = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key:
ctx_bl      = h'41524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
ctx_kem     = h'41524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
ctx_sub     = h'41524b472d4b454d2d484d41432e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
k_prime     = h'fa027ebc49603a2a41052479f6e9f6d046175df2f00cecb403f53ffcd1cc698f'
c_prime     = h'0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
info_mk     = h'41524b472d4b454d2d484d41432d6d61632e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
mk          = h'796c615d19ca0044df0a22d64ba8d5367dca18da32b871a3e255db0af7eb53c9'
t           = h'27987995f184a44cfa548d104b0a461d'
info_k      = h'41524b472d4b454d2d484d41432d7368617265642e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
k           = h'cf5e8ddbb8078a6a0144d4412f22f89407ecee30ec128ce07836af9fc51c05d0'
c           = h'27987995f184a44cfa548d104b0a461d0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
ikm_tau     = h'cf5e8ddbb8078a6a0144d4412f22f89407ecee30ec128ce07836af9fc51c05d0'
DST_tau     = h'41524b472d424c2d45432e41524b472d5032353641524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
tau         = 0x9e042fde2e12c1f4002054a8feac60088cc893b4838423c26a20af686c8c16e3
pk_prime    = h'04572a111ce5cfd2a67d56a0f7c684184b16ccd212490dc9c5b579df749647d107
                  dac2a1b197cc10d2376559ad6df6bc107318d5cfb90def9f4a1f5347e086c2cd'
kh          = h'27987995f184a44cfa548d104b0a461d0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'

; Derive-Private-Key:
sk_prime    = 0x775d7fe9a6dfba43ce671cb38afca3d272c4d14aff97bd67559eb500a092e5e7
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx         = 'ARKG-P256.test vectors'
ikm_bl      = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem     = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm         = h'a0a1a2a3a4a5a6a7a8a9aaabacadaeafb0b1b2b3b4b5b6b7b8b9babbbcbdbebf'

; Derive-Seed:
DST_bl_sk   = h'41524b472d424c2d45432d4b472e41524b472d50323536'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
pk_bl       = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
                  65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem      = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
                  dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl       = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem      = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key:
ctx_bl      = h'41524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
ctx_kem     = h'41524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
ctx_sub     = h'41524b472d4b454d2d484d41432e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
k_prime     = h'38c79546fc4a144ae2068ff0b515fc9af032b8255a78a829e71be47676a63117'
c_prime     = h'0457fd1e438280c127dd55a6138d1baf0a35e3e9671f7e42d8345f47374afa83247a078fa2196cd69497aed59ef92c05cb6b03d306ec24f2f4ff2db09cd95d1b11'
info_mk     = h'41524b472d4b454d2d484d41432d6d61632e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
mk          = h'0806abac4c1d205c3a8826cd178fbf7f91741268e3ca73634035efd76085d2a9'
t           = h'b7507a82771776fbac41a18d94e19a7e'
info_k      = h'41524b472d4b454d2d484d41432d7368617265642e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1641524b472d503235362e7465737420766563746f7273'
k           = h'dcdd95c742ddf25b8a95f3d76326cb3593b7860bb3e04c5e5b25cc15ce1e5c84'
c           = h'b7507a82771776fbac41a18d94e19a7e0457fd1e438280c127dd55a6138d1baf0a35e3e9671f7e42d8345f47374afa83247a078fa2196cd69497aed59ef92c05cb6b03d306ec24f2f4ff2db09cd95d1b11'
ikm_tau     = h'dcdd95c742ddf25b8a95f3d76326cb3593b7860bb3e04c5e5b25cc15ce1e5c84'
DST_tau     = h'41524b472d424c2d45432e41524b472d5032353641524b472d4465726976652d4b65792d424c2e1641524b472d503235362e7465737420766563746f7273'
tau         = 0x88cf9464b041a52cf2b837281afc67302ec9cb32da1fe515381b79c0d0c92322
pk_prime    = h'04ea7d962c9f44ffe8b18f1058a471f394ef81b674948eefc1865b5c021cf858f5
                  77f9632b84220e4a1444a20b9430b86731c37e4dcb285eda38d76bf758918d86'
kh          = h'b7507a82771776fbac41a18d94e19a7e0457fd1e438280c127dd55a6138d1baf0a35e3e9671f7e42d8345f47374afa83247a078fa2196cd69497aed59ef92c05cb6b03d306ec24f2f4ff2db09cd95d1b11'

; Derive-Private-Key:
sk_prime    = 0x6228e470290e9d7cc0feff32a74caafa14c608c956337eba23997f5904cff226
]]></sourcecode>
        <sourcecode type="cddl"><![CDATA[
; Inputs:
ctx         = 'ARKG-P256.test vectors.0'
ikm_bl      = h'000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f'
ikm_kem     = h'202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f'
ikm         = h'404142434445464748494a4b4c4d4e4f505152535455565758595a5b5c5d5e5f'

; Derive-Seed:
DST_bl_sk   = h'41524b472d424c2d45432d4b472e41524b472d50323536'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
pk_bl       = h'046d3bdf31d0db48988f16d47048fdd24123cd286e42d0512daa9f726b4ecf18df
                  65ed42169c69675f936ff7de5f9bd93adbc8ea73036b16e8d90adbfabdaddba7'
pk_kem      = h'04c38bbdd7286196733fa177e43b73cfd3d6d72cd11cc0bb2c9236cf85a42dcff5
                  dfa339c1e07dfcdfda8d7be2a5a3c7382991f387dfe332b1dd8da6e0622cfb35'
sk_bl       = 0xd959500a78ccf850ce46c80a8c5043c9a2e33844232b3829df37d05b3069f455
sk_kem      = 0x74e0a4cd81ca2d24246ff75bfd6d4fb7f9dfc938372627feb2c2348f8b1493b5

; Derive-Public-Key:
ctx_bl      = h'41524b472d4465726976652d4b65792d424c2e1841524b472d503235362e7465737420766563746f72732e30'
ctx_kem     = h'41524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
ctx_sub     = h'41524b472d4b454d2d484d41432e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
DST_kem_sk  = h'41524b472d4b454d2d454344482d4b472e41524b472d454344482e41524b472d50323536'
k_prime     = h'fa027ebc49603a2a41052479f6e9f6d046175df2f00cecb403f53ffcd1cc698f'
c_prime     = h'0487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
info_mk     = h'41524b472d4b454d2d484d41432d6d61632e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
mk          = h'd342e45f224a7278f11cf1468922c8879f4529125181d4159e4bf9ee69842f04'
t           = h'81c4e65b552e52350b49864b98b87d51'
info_k      = h'41524b472d4b454d2d484d41432d7368617265642e41524b472d454344482e41524b472d5032353641524b472d4465726976652d4b65792d4b454d2e1841524b472d503235362e7465737420766563746f72732e30'
k           = h'cde7e271f8da72e5fd2557de362420ddb170dce520362131670eb1080823a113'
c           = h'81c4e65b552e52350b49864b98b87d510487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'
ikm_tau     = h'cde7e271f8da72e5fd2557de362420ddb170dce520362131670eb1080823a113'
DST_tau     = h'41524b472d424c2d45432e41524b472d5032353641524b472d4465726976652d4b65792d424c2e1841524b472d503235362e7465737420766563746f72732e30'
tau         = 0x513ea417b6cdc3536178fa81da36b4e5ecdc142c2d46a52e05257f21794e3789
pk_prime    = h'04b79b65d6bbb419ff97006a1bd52e3f4ad53042173992423e06e52987a037cb61
                  dd82b126b162e4e7e8dc5c9fd86e82769d402a1968c7c547ef53ae4f96e10b0e'
kh          = h'81c4e65b552e52350b49864b98b87d510487fc739dbcdabc293ac5469221da91b220e04c681074ec4692a76ffacb9043dec2847ea9060fd42da267f66852e63589f0c00dc88f290d660c65a65a50c86361'

; Derive-Private-Key:
sk_prime    = 0x2a97f4232f9abba32fbfc28c6686f8afd2d851c2a95a3ed2f0a384b9ad55068d
]]></sourcecode>
      </section>
      <section anchor="other-instances">
        <name>Other instances</name>
        <t>TODO</t>
      </section>
    </section>
    <section anchor="document-history">
      <name>Document History</name>
      <t>-08</t>
      <ul spacing="normal">
        <li>
          <t>Fixed incorrectly swapped <tt>ikm_bl</tt> and <tt>ikm_kem</tt> arguments in <tt>ARKG-Derive-Seed</tt> definition.</t>
        </li>
        <li>
          <t>Extracted parameter function <tt>BL-PRF</tt> and modified signatures
of <tt>BL-Blind-Public-Key</tt> and <tt>BL-Blind-Private-Key</tt> accordingly.
This is an editorial refactorization; overall operation of concrete ARKG instances is unchanged.</t>
        </li>
        <li>
          <t>Removed three redundant sets of ARKG-P256 test vectors.</t>
        </li>
        <li>
          <t>Added intermediate values to ARKG-P256 test vectors.</t>
        </li>
        <li>
          <t>Changed second set of ARKG-P256 test vectors to use a 32-byte <tt>ikm</tt> instead of <tt>h'00'</tt>.</t>
        </li>
        <li>
          <t>Clarified in sections "Using HMAC to adapt a KEM without ciphertext integrity", "Using ECDH as the KEM"
and "Using X25519 or X448 as the KEM" that <tt>ctx_sub</tt> is intentionally ignored in those instances.</t>
        </li>
      </ul>
      <t>-07</t>
      <ul spacing="normal">
        <li>
          <t>Fixed hash_to_field DST in <tt>Sub-Kem-Derive-Key-Pair</tt> in section "Using ECDH as the KEM"
to agree with test vectors.</t>
        </li>
      </ul>
      <t>-06</t>
      <ul spacing="normal">
        <li>
          <t>Changed DST construction in section "Using ECDH as the KEM" to include the "ARKG-ECDH." prefix everywhere in the formula.
Previously the prefix was added in the argument to the "Using HMAC to adapt a KEM without ciphertext integrity" formula
but not in the Sub-Kem functions defined in "Using ECDH as the KEM".</t>
        </li>
      </ul>
      <t>-05</t>
      <ul spacing="normal">
        <li>
          <t>Deleted concrete instances <tt>ARKG-curve25519ADD-X25519</tt>, <tt>ARKG-curve448ADD-X448</tt>,
<tt>ARKG-edwards25519ADD-X25519</tt> and <tt>ARKG-edwards448ADD-X448</tt>
since implementations with a non-prime order generator, including EdDSA,
are incompatible with the additive blinding scheme defined in section "Using elliptic curve addition for key blinding".</t>
        </li>
        <li>
          <t>Remodeled procedures to be fully deterministic:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>BL-Generate-Keypair()</tt> replaced with <tt>BL-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>KEM-Generate-Keypair()</tt> replaced with <tt>KEM-Derive-Key-Pair(ikm)</tt>.</t>
            </li>
            <li>
              <t><tt>ARKG-Generate-Seed()</tt> replaced with <tt>ARKG-Derive-Seed(ikm_bl, ikm_kem)</tt>.</t>
            </li>
            <li>
              <t>Parameter <tt>ikm</tt> added to <tt>ARKG-Derive-Public-Key</tt>.</t>
            </li>
            <li>
              <t>Instance parameter <tt>hash-to-crv-suite</tt> added to generic formula "Using ECDH as the KEM",
affecting concrete instances <tt>ARKG-P256ADD-ECDH</tt>, <tt>ARKG-P384ADD-ECDH</tt>, <tt>ARKG-P521ADD-ECDH</tt> and <tt>ARKG-P256kADD-ECDH</tt>.</t>
            </li>
            <li>
              <t>Section "Deterministic key generation" deleted.</t>
            </li>
          </ul>
        </li>
        <li>
          <t>Flipped order of <tt>(pk_bl, pk_kem)</tt> and <tt>(sk_bl, sk_kem)</tt> parameter and return value tuples
for consistent ordering between BL and KEM throughout document.</t>
        </li>
        <li>
          <t><tt>info</tt> parameter renamed to <tt>ctx</tt>.</t>
        </li>
        <li>
          <t><tt>ctx</tt> length limited to at most 64 bytes.</t>
        </li>
        <li>
          <t>Encoding of <tt>ctx</tt> in <tt>ARKG-Derive-Public-Key</tt> and <tt>ARKG-Derive-Private-Key</tt> now embeds the length of <tt>ctx</tt>.</t>
        </li>
        <li>
          <t>Renamed concrete instances and corresponding <tt>DST_ext</tt> values:
          </t>
          <ul spacing="normal">
            <li>
              <t><tt>ARKG-P256ADD-ECDH</tt> to <tt>ARKG-P256</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P384ADD-ECDH</tt> to <tt>ARKG-P384</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P521ADD-ECDH</tt> to <tt>ARKG-P521</tt></t>
            </li>
            <li>
              <t><tt>ARKG-P256kADD-ECDH</tt> to <tt>ARKG-P256k</tt></t>
            </li>
          </ul>
        </li>
        <li>
          <t>Added ARKG-P256 test vectors.</t>
        </li>
      </ul>
      <t>-04</t>
      <ul spacing="normal">
        <li>
          <t>Extracted COSE_Key_Ref definition and COSE algorithm registrations to draft-lundberg-cose-two-party-signing-algs.</t>
        </li>
        <li>
          <t>Redefined alg (3) parameter and added dkalg (-3) in ARKG-pub COSE_Key.</t>
        </li>
        <li>
          <t>Defined alg (3) and inst (-3) parameters of Ref-ARKG-derived COSE key type.</t>
        </li>
      </ul>
      <t>-03</t>
      <ul spacing="normal">
        <li>
          <t>Renamed section "Using HMAC to adapt a KEM without {integrity protection =&gt; ciphertext integrity}".</t>
        </li>
        <li>
          <t>Fixed info argument to HMAC in section "Using HMAC to adapt a KEM without ciphertext integrity".</t>
        </li>
        <li>
          <t>Added reference to Shoup for definition of key encapsulation mechanism.</t>
        </li>
        <li>
          <t>Added CDDL definition of COSE_Key_Ref.</t>
        </li>
        <li>
          <t>Editorial fixes to references.</t>
        </li>
        <li>
          <t>Renamed proposed COSE Key Types.</t>
        </li>
      </ul>
      <t>-02</t>
      <ul spacing="normal">
        <li>
          <t>Rewritten introduction.</t>
        </li>
        <li>
          <t>Renamed ARKG-Derive-Secret-Key to ARKG-Derive-Private-Key.</t>
        </li>
        <li>
          <t>Overhauled EC instantiations to use hash_to_field and account for non-prime order curve key generation.</t>
        </li>
        <li>
          <t>Eliminated top-level MAC and KDF instance parameters.</t>
        </li>
        <li>
          <t>Added info parameter to instance parameter functions.</t>
        </li>
        <li>
          <t>Added requirement of KEM ciphertext integrity and generic formula for augmenting any KEM using HMAC.</t>
        </li>
        <li>
          <t>Added curve/edwards25519/448 instances.</t>
        </li>
        <li>
          <t>Added proposal for COSE bindings and key reference types.</t>
        </li>
      </ul>
      <t>-01</t>
      <ul spacing="normal">
        <li>
          <t>Editorial Fixes to formatting and references.</t>
        </li>
      </ul>
      <t>-00</t>
      <ul spacing="normal">
        <li>
          <t>Initial Version</t>
        </li>
      </ul>
    </section>
    <section anchor="contributors" numbered="false" toc="include" removeInRFC="false">
      <name>Contributors</name>
      <contact fullname="Dain Nilsson">
        <organization>Yubico</organization>
        <address>
      </address>
      </contact>
      <contact fullname="Peter Altmann">
        <organization>Agency for Digital Government</organization>
        <address>
          <postal>
            <country>SE</country>
          </postal>
        </address>
      </contact>
      <contact initials="M. B." surname="Jones" fullname="Michael B. Jones">
        <organization>Self-Issued Consulting</organization>
        <address>
          <postal>
            <country>United States</country>
          </postal>
          <uri>https://self-issued.info/</uri>
        </address>
      </contact>
      <contact fullname="Sander Dijkhuis">
        <organization>Cleverbase</organization>
        <address>
          <postal>
            <country>NL</country>
          </postal>
        </address>
      </contact>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19bXvcNpLgd/4Knn3Pyc6q23wnW5nMrF4dbRzba2Ums+f1
I4EkKHHUTfaQbMsax/tb7sP+kts/dlUFgATZ7Jbs2JPMXvQkVqsJAoVCvaNQ
mEwmRt2wIj1n87Lge2ZTrbiRLyv6VDeOZc0sxzCavJnD0x+uuLlf3xbJVVUW
5ao2X/FF2XDzO35rPuUFr1iTl4X5aP/Vd08fm2x+WVZ5c7UwWBxX/O2e+QAf
PDDmrLjcM3lhJKzh0OZ2z8yLrDSMtEwKtoCB0oplzSSuWDrnt/NVkca8upwk
GfzDquvLiRUZ9Spe5HUN4zW3S3jl9PiHE9N8CKPWJYyUFylfcvinaB7smg94
mjcADJvjH6f7B/CrrODTqx9OHhjFagH97xkpgLNnJGVR86Je1RIbALdrsIqz
PdX+pgQYqnK1hG8Oq9tlU5onZbVaPDCu+S08TPcMc2J+d3RivOXFCro0zfHm
pilgf/CK15xVyZX5FNvhg0tA3CqGR/+2ivOkfELTrrLkgWEYbNVclQDvxKxK
XBYxOXgpW83nAoHHi3xuPpOIgydldcmK/G+0Pnum6BO+rpuK82bPfPpf//l2
zi8ZkILpOPAgyRtYlbOmTK6vyvkCvylXRYNLdXYMf/EFy+cwMgzzz3wBKzSt
uQEAdRD8S3lVmAdiBTcDIPt5y8O/NPE/i1/TpFwYuAxNlcerRsy06/iI5YX5
PJ/XdVls6rj3wkve8MrcnzcLVqy/sX/Ji+TWzIAcjnLAOpubT8u3vCoWQDqD
efe6/T5PrhifmwdTmGvBa2ibF0A030+1b/pjnfF5Njmt6xVPzUMgs9W8yQtc
nlWV75lXTbOs9548qbFVTq2myBdPdCj+WOQNvH3WAK3WfYDOgI85zuIv11er
fH30wzmHecUMVkrr8PkzwyjKagGN3hKpnk6Opn8paz7Bnm8n9ZInE2BlmBk+
EZyZ8yabDBrlWc7TScv0teyq415s7izX+uo3aG7KyZJVDfSZXxaAHWqPfe0/
359iE4Tx1cmhY1ue/OjNvJn86EeB+hiA6JIfw9CL5MfIssP2o+uoj4Gt2kaR
rb6dWX770Y2owdnxoY2/gXNZdYmsg6sGi3ZzcwMskFxOAeewgok9eetMl2lG
bRXD4ucJrgosBq8aoNSFqVifHpIEMlHqijGE2N2BUU0bmHo+z5fwlnm4qt5y
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
Kf4TIBSQY/w/3ZnKAerwAAA=

-->

</rfc>
