<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.8 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-06" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.1 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-signature-key-blinding-06"/>
    <author initials="F." surname="Denis" fullname="Frank Denis">
      <organization>Fastly Inc.</organization>
      <address>
        <postal>
          <street>475 Brannan St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>fde@00f.net</email>
      </address>
    </author>
    <author initials="E." surname="Eaton" fullname="Edward Eaton">
      <organization>University of Waterloo</organization>
      <address>
        <postal>
          <street>200 University Av West</street>
          <city>Waterloo</city>
          <country>Canada</country>
        </postal>
        <email>ted@eeaton.ca</email>
      </address>
    </author>
    <author initials="T." surname="Lepoint" fullname="Tancrède Lepoint">
      <organization/>
      <address>
        <postal>
          <city>New York</city>
          <country>United States of America</country>
        </postal>
        <email>cfrg@tancre.de</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare, Inc.</organization>
      <address>
        <postal>
          <street>101 Townsend St</street>
          <city>San Francisco</city>
          <country>United States of America</country>
        </postal>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2024" month="April" day="01"/>
    <area>AREA</area>
    <workgroup>WG Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 153?>

<t>This document describes extensions to existing digital signature schemes for key blinding.
The core property of signing with key blinding is that a blinded public key and
all signatures produced using the blinded key pair are independent of the
unblinded key pair. Moreover, signatures produced using blinded key pairs
are indistinguishable from signatures produced using unblinded key pairs.
This functionality has a variety of applications, including Tor onion services
and privacy-preserving airdrop for bootstrapping cryptocurrency systems.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://cfrg.github.io/draft-irtf-cfrg-signature-key-blinding/draft-irtf-cfrg-signature-key-blinding.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-irtf-cfrg-signature-key-blinding/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        CFRG Working Group mailing list (<eref target="mailto:cfrg@irtf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/cfrg/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cfrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/cfrg/draft-irtf-cfrg-signature-key-blinding"/>.</t>
    </note>
  </front>
  <middle>
    <?line 163?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Digital signature schemes allow a signer to sign a message using a private signing
key and produce a digital signature such that anyone can verify the digital signature
over the message with the public verification key corresponding to the signing key.
Digital signature schemes typically consist of three functions:</t>
      <ul spacing="normal">
        <li>
          <t>KeyGen: A function for generating a private signing key <tt>skS</tt> and the corresponding
public verification key <tt>pkS</tt>.</t>
        </li>
        <li>
          <t>Sign(skS, msg): A function for signing an input message <tt>msg</tt> using a private
signing key <tt>skS</tt>, producing a digital signature <tt>sig</tt>.</t>
        </li>
        <li>
          <t>Verify(pkS, msg, sig): A function for verifying the digital signature <tt>sig</tt> over
input message <tt>msg</tt> against a public verification key <tt>pkS</tt>, yielding true if
the signature is valid and false otherwise.</t>
        </li>
      </ul>
      <t>In some applications, it's useful for a signer to produce digital signatures using
the same long-term private signing key such that a verifier cannot link any two signatures
to the same signer. In other words, the signature produced is independent of the
long-term private-signing key, and the public verification key for verifying the
signature is independent of the long-term public verification key. This type of
functionality has a number of practical applications, including, for example,
in the Tor onion services protocol <xref target="TORDIRECTORY"/> and privacy-preserving airdrop
for bootstrapping cryptocurrency systems <xref target="AIRDROP"/>. It is also necessary for
a variant of the Privacy Pass issuance protocol <xref target="RATELIMITED"/>.</t>
      <t>One way to accomplish this is by signing with a private key which is a function of the
long-term private signing key and a freshly chosen blinding key, and similarly by producing
a public verification key which is a function of the long-term public verification key
and same blinding key. A signature scheme with this functionality is referred to as signing
with key blinding.</t>
      <t>A signature scheme with key blinding aims to achieve unforgeability and unlinkability.
Informally, unforgeability means that one cannot produce a valid (message, signature)
pair for any blinding key without access to the private signing key. Similarly,
unlinkability means that one cannot distinguish between two signatures produced from
two separate key signing keys, and two signatures produced from the same signing
key but with different blinding keys.</t>
      <t>This document describes extensions to EdDSA <xref target="RFC8032"/> and ECDSA <xref target="ECDSA"/> to enable
signing with key blinding. Security analysis of these extensions is currently underway;
see <xref target="sec-considerations"/> for more details.</t>
      <t>This functionality is also possible with other signature schemes, including some post-quantum
signature schemes <xref target="ESS21"/>, though such extensions are not specified here.</t>
      <section anchor="disclaimer">
        <name>DISCLAIMER</name>
        <t>This document is a work in progress and is still undergoing security analysis.
As such, it <bcp14>MUST NOT</bcp14> be used for real world applications. See <xref target="sec-considerations"/>
for additional information.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</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?>

<t>The following terms are used throughout this document to describe the blinding modification.</t>
      <ul spacing="normal">
        <li>
          <t><tt>G</tt>: The standard base point.</t>
        </li>
        <li>
          <t><tt>sk</tt>: A signature scheme private key. For EdDSA, this is a a randomly generated
private seed of length 32 bytes or 57 bytes according to <xref section="5.1.5" sectionFormat="comma" target="RFC8032"/>
or <xref section="5.2.5" sectionFormat="comma" target="RFC8032"/>, respectively. For <xref target="ECDSA"/>, <tt>sk</tt> is a random scalar
in the prime-order elliptic curve group.</t>
        </li>
        <li>
          <t><tt>pk(sk)</tt>: The public key corresponding to the private key <tt>sk</tt>.</t>
        </li>
        <li>
          <t><tt>concat(x0, ..., xN)</tt>: Concatenation of byte strings.
<tt>concat(0x01, 0x0203, 0x040506) = 0x010203040506</tt>.</t>
        </li>
        <li>
          <t>ScalarMult(pk, k): Multiply the public key pk by scalar k, producing a new
public key as a result.</t>
        </li>
        <li>
          <t>ModInverse(x, L): Compute the multiplicative inverse of x modulo L.</t>
        </li>
      </ul>
      <t>In pseudocode descriptions below, integer multiplication of two scalar values is denoted
by the * operator. For example, the product of two scalars <tt>x</tt> and <tt>y</tt> is denoted as <tt>x * y</tt>.</t>
    </section>
    <section anchor="key-blinding">
      <name>Key Blinding</name>
      <t>At a high level, a signature scheme with key blinding allows signers to blind their
private signing key such that any signature produced with a private signing key and blinding
key is independent of the private signing key. Similar to the signing key, the blinding key
is also a private key. For example, the blind is a 32-byte or 57-byte random seed for Ed25519
or Ed448 variants, respectively, whereas the blind for ECDSA over P-256 is a random value in
the scalar field for the P-256 elliptic curve group.</t>
      <t>In more detail, consider first the basic digital signature syntax, which is a combination of
the following functionalities:</t>
      <ul spacing="normal">
        <li>
          <t>KeyGen: A function for generating a private and public key pair <tt>(skS, pkS)</tt>.</t>
        </li>
        <li>
          <t>Sign(skS, msg): A function for signing a message <tt>msg</tt> with the given private key <tt>skS</tt>,
producing a signature <tt>sig</tt>.</t>
        </li>
        <li>
          <t>Verify(pkS, msg, sig): A function for verifying a signature <tt>sig</tt> over message <tt>msg</tt>
against the public key <tt>pkS</tt>, which returns 1 upon success and 0 otherwise.</t>
        </li>
      </ul>
      <t>Key blinding introduces three new functionalities for the signature scheme syntax:</t>
      <ul spacing="normal">
        <li>
          <t>BlindKeyGen: A function for generating a private blind key.</t>
        </li>
        <li>
          <t>BlindPublicKey(pkS, bk, ctx): Blind the public verification key <tt>pkS</tt> using the private
blinding key <tt>bk</tt> and context <tt>ctx</tt>, yielding a blinded public key <tt>pkR</tt>.</t>
        </li>
        <li>
          <t>BlindKeySign(skS, bk, ctx, msg): Sign a message <tt>msg</tt> using the private signing key <tt>skS</tt>
with the private blind key <tt>bk</tt> and context <tt>ctx</tt>.</t>
        </li>
      </ul>
      <t>For a given <tt>bk</tt> produced from BlindKeyGen, key pair <tt>(skS, pkS)</tt> produced from
KeyGen, a context value <tt>ctx</tt>, and message <tt>msg</tt>, correctness requires the following
equivalence to hold with overwhelming probability:</t>
      <artwork><![CDATA[
Verify(BlindKeySign(skS, bk, ctx), msg, BlindPublicKey(pkS, bk, ctx)) = 1
]]></artwork>
      <t>Security requires that signatures produced using BlindKeySign are unlinkable from
signatures produced using the standard signature generation function with the same
private key.</t>
      <t>When the context value is known, a signature scheme with key blinding may also support
the ability to unblind public keys. This is represented with the following function.</t>
      <ul spacing="normal">
        <li>
          <t>UnblindPublicKey(pkR, bk, ctx): Unblind the public verification key <tt>pkR</tt> using the private
blinding key <tt>bk</tt> and context <tt>ctx</tt>.</t>
        </li>
      </ul>
      <t>For a given <tt>bk</tt> produced from BlindKeyGen, <tt>(skS, pkS)</tt> produced from KeyGen, and context
value <tt>ctx</tt>, correctness of this function requires the following equivalence to hold:</t>
      <artwork><![CDATA[
UnblindPublicKey(BlindPublicKey(pkS, bk, ctx), bk, ctx) = pkS
]]></artwork>
      <t>Considerations for choosing context strings are discussed in <xref target="context-considerations"/>.</t>
    </section>
    <section anchor="ed25519ph-ed25519ctx-and-ed25519">
      <name>Ed25519ph, Ed25519ctx, and Ed25519</name>
      <t>This section describes implementations of BlindPublicKey, UnblindPublicKey, and BlindKeySign as
modifications of routines in <xref section="5.1" sectionFormat="comma" target="RFC8032"/>. BlindKeyGen invokes the key generation
routine specified in <xref section="5.1.5" sectionFormat="comma" target="RFC8032"/> and outputs only the private key. This section
assumes a context value <tt>ctx</tt> has been configured or otherwise chosen by the application.</t>
      <section anchor="blindpublickey-and-unblindpublickey">
        <name>BlindPublicKey and UnblindPublicKey</name>
        <t>BlindPublicKey transforms a private blind bk into a scalar for the edwards25519 group
and then multiplies the target key by this scalar. UnblindPublicKey performs essentially
the same steps except that it multiplies the target public key by the multiplicative
inverse of the scalar, where the inverse is computed using the order of the group L,
described in <xref section="5.1" sectionFormat="comma" target="RFC8032"/>.</t>
        <t>More specifically, BlindPublicKey(pk, bk, ctx) works as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>Construct the blind_ctx as concat(bk, 0x00, ctx), where bk is a 32-byte octet
string, hash the result using SHA-512(blind_ctx), and store the digest in a 64-octet
large buffer, denoted b. Interpret the lower 32 bytes buffer as a little-endian
integer, forming a secret scalar s. Note that this explicitly skips the buffer
pruning step in <xref section="5.1" sectionFormat="comma" target="RFC8032"/>.</t>
          </li>
          <li>
            <t>Perform a scalar multiplication ScalarMult(pk, s), and output the encoding of the
resulting point as the public key.</t>
          </li>
        </ol>
        <t>UnblindPublicKey(pkR, bk, ctx) works as follows.</t>
        <ol spacing="normal" type="1"><li>
            <t>Compute the secret scalar s from bk and ctx as in BlindPublicKey.</t>
          </li>
          <li>
            <t>Compute the sInv = ModInverse(s, L), where L is as defined in <xref section="5.1" sectionFormat="comma" target="RFC8032"/>.</t>
          </li>
          <li>
            <t>Perform a scalar multiplication ScalarMult(pk, sInv), and output the encoding
of the resulting point as the public key.</t>
          </li>
        </ol>
      </section>
      <section anchor="blindkeysign">
        <name>BlindKeySign</name>
        <t>BlindKeySign transforms a private key bk into a scalar for the edwards25519 group and a
message prefix to blind both the signing scalar and the prefix of the message used
in the signature generation routine.</t>
        <t>More specifically, BlindKeySign(skS, bk, msg) works as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Hash the private key skS, 32 octets, using SHA-512.  Let h denote the
resulting digest.  Construct the secret scalar s1 from the first
half of the digest, and the corresponding public key A1, as
described in <xref section="5.1.5" sectionFormat="comma" target="RFC8032"/>.  Let prefix1 denote the second
half of the hash digest, h[32],...,h[63].</t>
          </li>
          <li>
            <t>Construct the blind_ctx as concat(bk, 0x00, ctx), where bk is a 32-byte octet
string, hash the result using SHA-512(blind_ctx), and store the digest in a 64-octet
large buffer, denoted b. Interpret the lower 32 bytes buffer as a little-endian
integer, forming a secret scalar s2. Note that this explicitly skips the buffer
pruning step in <xref section="5.1.5" sectionFormat="comma" target="RFC8032"/>. Let prefix2 denote the second half of
the hash digest, b[32],...,b[63].</t>
          </li>
          <li>
            <t>Compute the signing scalar s = s1 * s2 (mod L) and the signing public key A = ScalarMult(G, s).</t>
          </li>
          <li>
            <t>Compute the signing prefix as concat(prefix1, prefix2).</t>
          </li>
          <li>
            <t>Run the rest of the Sign procedure in <xref section="5.1.6" sectionFormat="comma" target="RFC8032"/> from step (2) onwards
using the modified scalar s, public key A, and string prefix.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="ed448ph-and-ed448">
      <name>Ed448ph and Ed448</name>
      <t>This section describes implementations of BlindPublicKey, UnblindPublicKey, and BlindKeySign as
modifications of routines in <xref section="5.2" sectionFormat="comma" target="RFC8032"/>. BlindKeyGen invokes the key generation
routine specified in <xref section="5.1.5" sectionFormat="comma" target="RFC8032"/> and outputs only the private key. This section
assumes a context value <tt>ctx</tt> has been configured or otherwise chosen by the application.</t>
      <section anchor="blindpublickey-and-unblindpublickey-1">
        <name>BlindPublicKey and UnblindPublicKey</name>
        <t>BlindPublicKey and UnblindPublicKey for Ed448ph and Ed448 are implemented just as these
routines are for Ed25519ph, Ed25519ctx, and Ed25519, except that SHAKE256 is used instead
of SHA-512 for hashing the secret blind context, i.e., the concatenation of blind key bk
and context ctx, to a 114-byte buffer (and using the lower 57-bytes for the secret), and
the order of the edwards448 group L is as defined in <xref section="5.2.1" sectionFormat="comma" target="RFC8032"/>. Note that
this process explicitly skips the buffer pruning step in <xref section="5.2.5" sectionFormat="comma" target="RFC8032"/>.</t>
      </section>
      <section anchor="blindkeysign-1">
        <name>BlindKeySign</name>
        <t>BlindKeySign for Ed448ph and Ed448 is implemented just as this routine for Ed25519ph,
Ed25519ctx, and Ed25519, except in how the scalars (s1, s2), public keys (A1, A2),
and message strings (prefix1, prefix2) are computed. More specifically,
BlindKeySign(skS, bk, msg) works as follows:</t>
        <ol spacing="normal" type="1"><li>
            <t>Hash the private key skS, 57 octets, using SHAKE256(skS, 117). Let h1 denote the
resulting digest. Construct the secret scalar s1 from the first
half of h1, and the corresponding public key A1, as described in
<xref section="5.2.5" sectionFormat="comma" target="RFC8032"/>. Let prefix1 denote the second half of the
hash digest, h1[57],...,h1[113].</t>
          </li>
          <li>
            <t>Construct the blind_ctx as concat(bk, 0x00, ctx), where bk is a 57-byte octet
string, hash the result using SHAKE256(blind_ctx, 117), and store the digest in a 117-octet
digest, denoted h2. Interpret the lower 57 bytes buffer as a little-endian
integer, forming a secret scalar s2. Note that this explicitly skips the buffer
pruning step in <xref section="5.2" sectionFormat="comma" target="RFC8032"/>. Let prefix2 denote the second half of
the hash digest, h2[57],...,h2[113].</t>
          </li>
          <li>
            <t>Compute the signing scalar s = s1 * s2 (mod L) and the signing public key A = ScalarMult(A1, s2).</t>
          </li>
          <li>
            <t>Compute the signing prefix as concat(prefix1, prefix2).</t>
          </li>
          <li>
            <t>Run the rest of the Sign procedure in <xref section="5.2.6" sectionFormat="comma" target="RFC8032"/> from step (2) onwards
using the modified scalar s, public key A, and string prefix.</t>
          </li>
        </ol>
      </section>
    </section>
    <section anchor="ecdsa">
      <name>ECDSA</name>
      <t>[[DISCLAIMER: Multiplicative blinding for ECDSA is known to be NOT be SUF-CMA-secure in the presence of an adversary that controls the blinding value. <xref target="MSMHI15"/> describes this in the context of related-key attacks. This variant may likely be removed in followup versions of this document based on further analysis.]]</t>
      <t>This section describes implementations of BlindPublicKey, UnblindPublicKey, and BlindKeySign as
functions implemented on top of an existing <xref target="ECDSA"/> implementation. BlindKeyGen invokes the
key generation routine specified in <xref target="ECDSA"/> and outputs only the private key. In the descriptions
below, let p be the order of the corresponding elliptic curve group used for ECDSA. For example, for
P-256, p = 115792089210356248762697446949407573529996955224135760342422259061068512044369.</t>
      <t>This section assumes a context value <tt>ctx</tt> has been configured or otherwise chosen by the application.</t>
      <section anchor="blindpublickey-and-unblindpublickey-2">
        <name>BlindPublicKey and UnblindPublicKey</name>
        <t>BlindPublicKey multiplies the public key pkS by an augmented private key bk yielding a
new public key pkR. UnblindPublicKey inverts this process by multiplying the input public
key by the multiplicative inverse of the augmented bk. Augmentation here maps the private
key bk to another scalar using hash_to_field as defined in <xref section="5" sectionFormat="of" target="H2C"/>,
with DST set to "ECDSA Key Blind", L set to the value corresponding to the target curve,
e.g., 48 for P-256 and 72 for P-384, expand_message_xmd with a hash function matching
that used for the corresponding digital signature algorithm, and prime modulus equal to
the order p of the corresponding curve. Letting HashToScalar denote this augmentation
process, and blind_ctx = concat(bk, 0x00, ctx), BlindPublicKey and UnblindPublicKey are
then implemented as follows:</t>
        <artwork><![CDATA[
BlindPublicKey(pk, bk, ctx)   = ScalarMult(pk, HashToScalar(blind_ctx))
UnblindPublicKey(pkR, bk, ctx) = ScalarMult(pkR, ModInverse(HashToScalar(blind_ctx), p))
]]></artwork>
      </section>
      <section anchor="blindkeysign-2">
        <name>BlindKeySign</name>
        <t>BlindKeySign transforms the signing key skS by the private key bk along with
context ctx into a new signing key, skR, and then invokes the existing ECDSA
signing procedure. More specifically, skR = skS * HashToScalar(blind_ctx) (mod p),
where blind_ctx = concat(bk, 0x00, ctx).</t>
      </section>
    </section>
    <section anchor="context-considerations">
      <name>Application Considerations</name>
      <t>Choice of the context string <tt>ctx</tt> is application-specific. For example, in Tor <xref target="TORDIRECTORY"/>,
the context string is set to the concatenation of the long-term signer public key and an
integer epoch. This makes it so that unblinding a blinded public key requires knowledge of
the long-term public key as well as the blinding key. Similarly, in a rate-limited version
of Privacy Pass <xref target="RATELIMITED"/>, the context is empty, thereby allowing unblinding by anyone
in possession of the blinding key.</t>
      <t>Applications are <bcp14>RECOMMENDED</bcp14> to choose context strings that are distinct from other protocols
as a way of enforcing domain separation. See <xref section="2.2.5" sectionFormat="of" target="HASH-TO-CURVE"/>
for additional discussion around the construction of suitable domain separation values.</t>
    </section>
    <section anchor="sec-considerations">
      <name>Security Considerations</name>
      <!-- replace these with more rigorous definitions -->

<t>The signature scheme extensions in this document aim to achieve unforgeability
and unlinkability. Informally, unforgeability means that one cannot produce a
valid (message, signature) pair for any blinding key without access to the
private signing key. Similarly, unlinkability means that one cannot distinguish
between two signatures produced from two independent key signing keys, and two
signatures produced from the same signing key but with different blinds. Security
analysis of the extensions in this document with respect to these two properties
is currently underway. See <xref target="CGHKS23"/> for more detailed discussion of signature
extensions with these properties.</t>
      <t>Preliminary analysis has been done for a variant of these extensions used for
identity key blinding routine used in Tor's Hidden Service feature <xref target="TORBLINDING"/>.
Further analysis exists in <xref target="ELW23"/>, which demonstrates that the extensions in this
specification for EdDSA and ECDSA both achieve the desired security properties.</t>
      <t>The constructions in this document, as well as the analysis in <xref target="ELW23"/>, assume that
both the signing and blinding keys are private, and, as such, not controlled by an attacker.
<xref target="MSMHI15"/> demonstrate that ECDSA with attacker-controlled multiplicative blinding
for producing related keys can be abused to produce forgeries. In particular,
if an attacker can control the private blinding key used in BlindKeySign, they
can construct a forgery over a different message that validates under a different
public key. One mitigation to this problem is to change BlindKeySign such that the
signature is computed over the input message as well as the blind public key.
However, this would require verifiers to treat both the blind public key
and message as input to their verification interface. The construction in
<xref target="ecdsa"/> does not require this change. However, further analysis is needed to
determine whether or not this construction is safe.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
    <section anchor="test-vectors">
      <name>Test Vectors</name>
      <t>This section contains test vectors for a subset of the signature schemes
covered in this document.</t>
      <section anchor="ed25519-test-vectors">
        <name>Ed25519 Test Vectors</name>
        <t>This section contains test vectors for Ed25519 as described in <xref target="RFC8032"/>.
Each test vector lists the serialized signing key (skS), blind key (bk), and
public key (pkS) encoded has hexadecimal strings; skS and bk are serialized
as little-endian 32-byte encoding of the scalar value with the top three bits
set to zero, whereas pkS is serialized as described in <xref section="5.1.2" sectionFormat="of" target="RFC8032"/>.
Each test vector also includes the blinded public key (pkR) computed from skS and
bk, serialized similarly to pkS and encoded as a hexadecimal string. Finally, each vector
includes the message and signature values, each encoded as hexadecimal strings.
The signature is encoded as specified in <xref section="5.1.6" sectionFormat="of" target="RFC8032"/>.</t>
        <artwork><![CDATA[
// Randomly generated private key and blind seed, empty context

skS: d142b3b1d532b0a516353a0746a6d43a86cee8efaf6b14ae85c2199072f47d93
pkS: cd875d3f46a8e8742cf4a6a9f9645d4153a394a5a0a8028c9041cd455d093cd5
bk: bb58c768d9b16571f553efd48207e64391e16439b79fe9409e70b38040c81302
pkR: 666443ce8f03fa09240db73a584efad5462ffe346b14fd78fb666b25db29902f
message: 68656c6c6f20776f726c64
context:
signature: 5458111c708ce05cb0a1608b08dc649937dc22cf1da045eb866f2face50be
930e79b44d57e5215a82ac227bdccccca52bfe509b96efe8e723cb42b5f14be5f0e
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key seed and zero blind seed, empty context

skS: aa69e9cb50abf39b05ebc823242c4fd13ccadd0dadc1b45f6fcbf7be4f30db5d
pkS: 5c9a9e271f204c931646aa079e2e66f0783ab3d29946eff37bd3b569e9c8e009
bk: 0000000000000000000000000000000000000000000000000000000000000000
pkR: 23eb5eccb9448ee8403c36595ccfd5edd7257ae70da69aa22282a0a7cd97e443
message: 68656c6c6f20776f726c64
context:
signature: 4e9f3ad2b14cf2f9bbf4b88a8832358a568bd69368b471dfabac594e8a8b3
3ab54978ecf902560ed754f011186c4c4dda65d158b96c1e6b99a8e150a26e51e03
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key and blind seed, non-empty context

skS: d1e5a0f806eb3c491566cef6d2d195e6bbf0a54c9de0e291a7ced050c63ea91c
pkS: 8b37c949d39cddf4d2a0fc0da781ea7f85c7bfbdfeb94a3c9ecb5e8a3c24d65f
bk: 05b235297dff87c492835d562c6e03c0f36b9c306f2dcb3b5038c2744d4e8a70
pkR: 019b0a06107e01361facdad39ec16a9647c86c0086bc38825eb664b97d9c514d
message: 68656c6c6f20776f726c64
context:
d6bbaa0646f5617d3cbd1e22ef05e714d1ec7812efff793999667648b2cc54bc
signature: f54214acb3c695c46b1e7aa2da947273cb19ec33d8215dde0f43a8f7250fe
bb508f4a5007e3c96be6402074ec843d40358a281ff969c66c1724016208650dd09
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key seed and zero blind seed, non-empty context

skS: 89e3e3acef6a6c2d9b7c062199bf996f9ae96b662c73e2b445636f9f22d5012e
pkS: 3f667a2305a8baf328a1d8e9ed726f278229607d28fb32d9933da7379947ac44
bk: 0000000000000000000000000000000000000000000000000000000000000000
pkR: 90a543dd29c6e6cd08ef85c43618f2d314139db5baed802383cf674310294e40
message: 68656c6c6f20776f726c64
context:
802def4d21c7c7d0fa4b48af5e85f8ebfc4119a04117c14d961567eaef2859f2
signature: ce305a0f40a3270a84d2d9403617cdb89b7b4edf779b4de27f9acaadf1716
84b162e752c95f17b16aaca7c2662e69ba9696bdd230a107ecab973886e8d5bf00e
]]></artwork>
      </section>
      <section anchor="ecdsap-384-sha-384-test-vectors">
        <name>ECDSA(P-384, SHA-384) Test Vectors</name>
        <t>This section contains test vectors for ECDSA with P-384 and SHA-384, as described in <xref target="ECDSA"/>.
Each test vector lists the serialized signing key (skS), blind key (bk), and
public key (pkS) encoded has hexadecimal strings; skS and bk are serialized
using the Field-Element-to-Octet-String conversion according to <xref target="SEC1"/>, whereas
pkS is serialized using the compressed Elliptic-Curve-Point-to-Octet-String
method according to <xref target="SEC1"/>. Each test vector also includes the blinded public key
(pkR) computed from skS and bk, serialized similarly to pkS and encoded as a hexadecimal
string. Finally, each vector includes the message and signature values, each encoded
as hexadecimal strings. The signature value is serialized as the concatenation of
scalars (r, s), each serialized as skS and bk, and encoded as a hexadecimal string.</t>
        <artwork><![CDATA[
// Randomly generated signing and blind private keys, empty context

skS: fcc8217ec4c89862d069a6679026c8042a74a513ba5b4a63da58488643132afaf35
9c3645dcc99c11862d9606370b9b7
pkS: 02582e4108018f9657f8bb55192838ff057442c8f7dc265f195dc1e4aa2cff2ec10
e2f2220dbeb300125d46b00dff747f1
bk: 1d3b48eec849b9d0e7376be1eca90369663939d140a8f3418ebc2221159402647a9e
283a78694377915b2894bc38cfe5
pkR: 03031c9914e4aa550605ded5c8b2604a2910c7c4d7e1e8608d81152a2ed3b8eb85a
c8c7896107c91875090b651f43d2f31
message: 68656c6c6f20776f726c64
context:
signature: 0ca279fba24a47ef2dded3f3171f805779d41ff0c3b13af260977d26f9df8
a0993591b34e84f954149a478408abc685cb88ca32e482ffb9ea2f377ac949cb37468f18
4b8f03ce4c7da06c024a38e3d8f2a9eea84493288627a13f317cc6d8457
]]></artwork>
        <artwork><![CDATA[
// Randomly generated signing and blind private keys, non-empty context

skS: 5f9ed9f16ac74cb510689321cbd6a0a9602f50a96cb17ff479ec46fff130afcd9fe
d3766c6d98fe4b4f1c2fa275f58ed
pkS: 03e690b68b39c0bfb0be6a7f7f0ab49a930437b427dbf588c7acbf3fc8e3e221c83
03e2d38c7bfe735d2d8afaecfacec8c
bk: 7c65bba8e98f1f75eb9748ccc4a85b7d5d9523522d02909958e0e2fc81693dbb4d10
460355eec3a3af54184ced97697a
pkR: 0280a5180793a1c8155face304fea93783514124cdf7f0fedab11da05289e192da3
6a9f0e3ab4544d75f8eaa8ef9987554
message: 68656c6c6f20776f726c64
context:
327a0a52fa1c01d376cfc259925555920d89f15b509bb84e7385ff7207dcb93d
signature: 240e49a4dc681e3cedb241f2cf97f7c86f215902c03e38838e1d23d127c61
debca8af590ebb0fd7f1dd58a51a63aa45e5991fda32da0e7e9bb56b9374be6fed60c672
2de2689f6a969af5c78b78e5dcc353d8a47a71f337586f737b020e541c1
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="ECDSA">
          <front>
            <title>Public Key Cryptography for the Financial Services Industry - The Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author>
              <organization>American National Standards Institute</organization>
            </author>
            <date year="2005" month="November"/>
          </front>
          <seriesInfo name="ANSI" value="ANS X9.62-2005"/>
        </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="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>
        <reference anchor="HASH-TO-CURVE">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Sam Scott" initials="S." surname="Scott">
              <organization>Cornell Tech</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Riad S. Wahby" initials="R. S." surname="Wahby">
              <organization>Stanford University</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="15" month="June" year="2022"/>
            <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="Internet-Draft" value="draft-irtf-cfrg-hash-to-curve-16"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="CGHKS23" target="https://eprint.iacr.org/2023/1524">
          <front>
            <title>SoK: Signatures With Randomizable Keys</title>
            <author initials="S." surname="Celi">
              <organization>Brave Software</organization>
            </author>
            <author initials="S." surname="Griffy">
              <organization>Brown University</organization>
            </author>
            <author initials="L." surname="Hanzlik">
              <organization>CISPA Helmholtz Center for Information Security</organization>
            </author>
            <author initials="O." surname="Perez Kempner">
              <organization>NTT Social Informatics Laboratories</organization>
            </author>
            <author initials="D." surname="Slamanig">
              <organization>AIT Austrian Institute of Technology</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="ELW23" target="https://eprint.iacr.org/2023/380">
          <front>
            <title>Security Analysis of Signature Schemes with Key Blinding</title>
            <author initials="E." surname="Eaton">
              <organization>National Research Council Canada</organization>
            </author>
            <author initials="T." surname="Lepoint">
              <organization>Amazon Web Services</organization>
            </author>
            <author initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="ESS21" target="https://eprint.iacr.org/2021/963">
          <front>
            <title>Post-Quantum Key-Blinding for Authentication in Anonymity Networks</title>
            <author initials="E." surname="Eaton" fullname="Edward Eaton">
              <organization/>
            </author>
            <author initials="D." surname="Stebila" fullname="Douglas Stebila">
              <organization/>
            </author>
            <author initials="R." surname="Stracovsky" fullname="Roy Stracovsky">
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="TORDIRECTORY" target="https://gitweb.torproject.org/torspec.git/tree/rend-spec-v3.txt">
          <front>
            <title>Tor directory protocol, version 3</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="AIRDROP" target="https://eprint.iacr.org/2020/676.pdf">
          <front>
            <title>An airdrop that preserves recipient privacy</title>
            <author initials="R. S." surname="Wahby" fullname="Riad S. Wahby">
              <organization/>
            </author>
            <author initials="D." surname="Boneh" fullname="Dan Boneh">
              <organization/>
            </author>
            <author initials="C." surname="Jeffrey" fullname="Christopher Jeffrey">
              <organization/>
            </author>
            <author initials="J." surname="Poon" fullname="Joseph Poon">
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="TORBLINDING" target="https://www-users.cse.umn.edu/~hoppernj/basic-proof.pdf">
          <front>
            <title>Proving Security of Tor’s Hidden Service Identity Blinding Protocol</title>
            <author initials="N." surname="Hopper" fullname="Nicholas Hopper">
              <organization/>
            </author>
            <date year="2013"/>
          </front>
        </reference>
        <reference anchor="SEC1" target="https://www.secg.org/sec1-v2.pdf">
          <front>
            <title>SEC 1: Elliptic Curve Cryptography</title>
            <author initials="" surname="Standards for Efficient Cryptography Group (SECG)">
              <organization/>
            </author>
            <date/>
          </front>
        </reference>
        <reference anchor="RATELIMITED">
          <front>
            <title>Rate-Limited Token Issuance Protocol</title>
            <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2022"/>
            <abstract>
              <t>   This document specifies a variant of the Privacy Pass issuance
   protocol that allows for tokens to be rate-limited on a per-origin
   basis.  This enables origins to use tokens for use cases that need to
   restrict access from anonymous clients.

Discussion Venues

   This note is to be removed before publishing as an RFC.

   Source for this draft and an issue tracker can be found at
   https://github.com/tfpauly/privacy-proxy.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-privacypass-rate-limit-tokens-03"/>
        </reference>
        <reference anchor="MSMHI15">
          <front>
            <title>On the Security of the Schnorr Signature Scheme and DSA Against Related-Key Attacks</title>
            <author fullname="Hiraku Morita" initials="H." surname="Morita">
              <organization/>
            </author>
            <author fullname="Jacob C. N. Schuldt" initials="J." surname="Schuldt">
              <organization/>
            </author>
            <author fullname="Takahiro Matsuda" initials="T." surname="Matsuda">
              <organization/>
            </author>
            <author fullname="Goichiro Hanaoka" initials="G." surname="Hanaoka">
              <organization/>
            </author>
            <author fullname="Tetsu Iwata" initials="T." surname="Iwata">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="Information Security and Cryptology - ICISC 2015" value="pp. 20-35"/>
          <seriesInfo name="DOI" value="10.1007/978-3-319-30840-1_2"/>
          <seriesInfo name="ISBN" value="[&quot;9783319308395&quot;, &quot;9783319308401&quot;]"/>
          <refcontent>Springer International Publishing</refcontent>
        </reference>
        <reference anchor="H2C">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Sam Scott" initials="S." surname="Scott">
              <organization>Cornell Tech</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Riad S. Wahby" initials="R. S." surname="Wahby">
              <organization>Stanford University</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="15" month="June" year="2022"/>
            <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="Internet-Draft" value="draft-irtf-cfrg-hash-to-curve-16"/>
        </reference>
      </references>
    </references>
    <?line 611?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Dennis Jackson and Cathie Yun for helpful
discussions and input that informed and improved the development of this draft.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
/GwAAA==

-->

</rfc>
