<?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.39 (Ruby 3.4.9) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-11" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.34.0 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-signature-key-blinding-11"/>
    <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="2026" month="August" day="23"/>
    <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 the 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 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(BlindPublicKey(pkS, bk, ctx), msg, BlindKeySign(skS, bk, ctx, msg)) = 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, ctx, 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.2.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, ctx, 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 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 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
the 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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
0LoRa9Al9WUNI14BxX5BmbxcDNFgGKcH1QHCKm9BPd2B74EO0W+4gJs1uxaa
FUwRCWykFcPQ0m55hif26NwWUEMpS3EHr2gS/obs8uxO6sHOGwZJVt5qp5f6
Rxe0ksm326hPNEBzwbZNqZQT9NPDrfbigcU9i2/uNhhqtaJRYES1VjyEsE7C
9RE4S/DjuSgQsLrrUjLXAjxjzV4GSeLe1TeX7ySbGmVkPalwEIeW9G6DtxaY
lvDkYwwxM9f19ZOd6duZGOGfzbbpmPYOj7+bSg4T7pA20+JTD+4K8B1+lZT8
VQrt8UbTIo1vlyAl2tbKDwxnkowNcy/J7JrBX5JvuZc3M/MuFysl8GoLyyaX
3MpdTQUjfQ/rTCXzpZc2SzxR3eaIT4ZxDhMs12Jqqc2/1WCbyLYruZ6hWbR6
vrOqWjHakPMjKJmrsrieI/dZ71WJgU3o1WF82EVRNia8zQ2Zign8OpjAaLWa
RlcULWDgakEmVe5A+3j5nScDH/Y41h0S5wMSZ53CHhLCjqyNEeN3JxzyZP+Y
C1M6Viot4h1jn4MttusE68WIG4qJZLmHPO1Mkig+sPVmJWZI6iURu+63A77m
x49DqPzzz+b9jtl4qGPGwBr5/vwzhNYQf6CNpVkITqpfSW4aKnywnmFv1dTm
W1aDoXWNPIiLIbl/uji+Ont5/ur86uz0y/P56UITu8EL84pEusqRDc2b8gYA
AZMbxht44Ft2R9rMOC/BGwRCzEYiq83kbhz0e49GIr9dAmlJ4nuTP6RMI30n
PuIdcHBJfnYJpFr0YKJTtxrEIiPEI8ld75SMw47gMEGfVjajVXBpUUNikLHu
xIk2Bu3E/ZzylExA4Knkad0Fxx3UBO4fGngErli+rpV8lrkASN1SneNaMOSD
NCPRvS3ITegrC0NXQhDEZtOn14IVGqzp4EtOpg/YykE+1i54AKieGBKVSRdY
3I0YJGku4bihQXivDbh7JI/sqpXpzBgRfYCwATozE6TwAooydoS9WyPkZsib
YsOqycy19mD3vDv2py2eSbAuKZM0zyBX8l/DtRPKehgOP0tPL49hpL+7eHYS
Wa6j/Ymsb+Ky/IlrhNgLQqLGQbi96JM1Nqg0gXxEtMGkuKxcD20kbOF7K1j6
vxs1oMzHj8hd5hLhpBKulOQPpHTXBPtT0bB81S1uR8elu9qUdZ0TZpYUqsiz
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

-->

</rfc>
