<?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.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-09" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-signature-key-blinding-09"/>
    <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="2025" month="September" day="08"/>
    <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 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 as 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 as 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 anchor="sec-combined-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. F." 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="Lecture Notes in Computer Science" 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. F." 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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

-->

</rfc>
