<?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.30 (Ruby 3.4.8) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-10" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-signature-key-blinding-10"/>
    <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="March" day="01"/>
    <area>AREA</area>
    <workgroup>WG Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 153?>

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

<section anchor="introduction">
      <name>Introduction</name>
      <t>Digital signature schemes allow a signer to sign a message using a private signing
key and produce a digital signature such that anyone can verify the digital signature
over the message with the public verification key corresponding to the signing key.
Digital signature schemes typically consist of three functions:</t>
      <ul spacing="normal">
        <li>
          <t>KeyGen: A function for generating a private signing key <tt>skS</tt> and the corresponding
public verification key <tt>pkS</tt>.</t>
        </li>
        <li>
          <t>Sign(skS, msg): A function for signing an input message <tt>msg</tt> using a private
signing key <tt>skS</tt>, producing a digital signature <tt>sig</tt>.</t>
        </li>
        <li>
          <t>Verify(pkS, msg, sig): A function for verifying the digital signature <tt>sig</tt> over
input message <tt>msg</tt> against a public verification key <tt>pkS</tt>, yielding true if
the signature is valid and false otherwise.</t>
        </li>
      </ul>
      <t>In some applications, it's useful for a signer to produce digital signatures using
the same long-term private signing key such that a verifier cannot link any two signatures
to the same signer. In other words, the signature produced is independent of the
long-term private-signing key, and the public verification key for verifying the
signature is independent of the long-term public verification key. This type of
functionality has a number of practical applications, including, for example,
in the Tor onion services protocol <xref target="TORDIRECTORY"/> and privacy-preserving airdrop
for bootstrapping cryptocurrency systems <xref target="AIRDROP"/>. It is also necessary for
a variant of the Privacy Pass issuance protocol <xref target="RATELIMITED"/>.</t>
      <t>One way to accomplish this is by signing with a private key which is a function of the
long-term private signing key and a freshly chosen blinding key, and similarly by producing
a public verification key which is a function of the long-term public verification key
and 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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
QOtGrEGX1Jc1jHgFFPsFZfJyMUSDYZweVAcIq7wF9XQHvgc6RL/hAm7W7Fpo
VjBFJLCRVgxDS7vlGZ7Yo3NbQA2lLMUdvKJJ+Buyy7M7qQc7bxgkWXmrnV7q
H13QSibfbqM+0QDNBds2pVJO0E8Pt9qLBxb3LL6522Co1YpGgRHVWvEQwjoJ
10fgLMGP56JAwOquS8lcC/CMNXsZJIl7V99cvpNsapSR9aTCQRxa0rsN3lpg
WsKTjzHEzFzX1092pm9nYoR/NtumY9o7PP5uKjlMuEPaTItPPbgrwHf4VVLy
Vym0xxtNizS+XYKUaFsrPzCcSTI2zL0ks2sGf0m+5V7ezMy7XKyUwKstLJtc
cit3NRWM9D2sM5XMl17aLPFEdZsjPhnGOUywXIuppTb/VoNtItuu5HqGZtHq
+c6qasVoQ86PoGSuyuJ6jtxnvVclBjahV4fxYRdF2ZjwNjdkKibw62ACo9Vq
Gl1RtICBqwWZVLkD7ePld54MfNjjWHdInA9InHUKe0gIO7I2RozfnXDIk/1j
LkzpWKm0iHeMfQ622K4TrBcjbigmkuUe8rQzSaL4wNablZghqZdE7LrfDvia
Hz8OofLPP5v3O2bjoY4ZA2vk+/PPEFpD/IE2lmYhOKl+JblpqPDBeoa9VVOb
b1kNhtY18iAuhuT+6eL46uzl+avzq7PTL8/npwtN7AYvzCsS6SpHNjRvyhsA
BExuGG/ggW/ZHWkz47wEbxAIMRuJrDaTu3HQ7z0aifx2CaQlie9N/pAyjfSd
+Ih3wMEl+dklkGrRg4lO3WoQi4wQjyR3vVMyDjuCwwR9WtmMVsGlRQ2JQca6
EyfaGLQT93PKUzIBgaeSp3UXHHdQE7h/aOARuGL5ulbyWeYCIHVLdY5rwZAP
0oxE97YgN6GvLAxdCUEQm02fXgtWaLCmgy85mT5gKwf5WLvgAaB6YkhUJl1g
cTdikKS5hOOGBuG9NuDukTyyq1amM2NE9AHCBujMTJDCCyjK2BH2bo2QmyFv
ig2rJjPX2oPd8+7Yn7Z4JsG6pEzSPINcyX8N104o62E4/Cw9vTyGkf7u4tlJ
ZLmO9ieyvonL8ieuEWIvCIkaB+H2ok/W2KDSBPIR0QaT4rJyPbSRsIXvrWDp
/27UgDIfPyJ3mUuEk0q4UpI/kNJdE+xPRcPyVbe4HR2X7mpT1nVOmFlSqCLP
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

-->

</rfc>
