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

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

<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>KeyGen: A function for generating a private signing key <tt>skS</tt> and the corresponding
public verification key <tt>pkS</tt>.</li>
        <li>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>.</li>
        <li>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.</li>
      </ul>
      <t>In some applications, it's useful for a signer to produce digital signatures using
the same long-term private signing key such that a verifier cannot link any two signatures
to the same signer. In other words, the signature produced is independent of the
long-term private-signing key, and the public verification key for verifying the
signature is independent of the long-term public verification key. This type of
functionality has a number of practical applications, including, for example,
in the Tor onion services protocol <xref target="TORDIRECTORY"/> and privacy-preserving airdrop
for bootstrapping cryptocurrency systems <xref target="AIRDROP"/>. It is also necessary for
a variant of the Privacy Pass issuance protocol <xref target="RATELIMITED"/>.</t>
      <t>One way to accomplish this is by signing with a private key which is a function of the
long-term private signing key and a freshly chosen blinding key, and similarly by producing
a public verification key which is a function of the long-term public verification key
and same blinding key. A signature scheme with this functionality is referred to as signing
with key blinding.</t>
      <t>A signature scheme with key blinding aims to achieve unforgeability and unlinkability.
Informally, unforgeability means that one cannot produce a valid (message, signature)
pair for any blinding key without access to the private signing key. Similarly,
unlinkability means that one cannot distinguish between two signatures produced from
two separate key signing keys, and two signatures produced from the same signing
key but with different blinding keys.</t>
      <t>This document describes extensions to EdDSA <xref target="RFC8032"/> and ECDSA <xref target="ECDSA"/> to enable
signing with key blinding. Security analysis of these extensions is currently underway;
see <xref target="sec-considerations"/> for more details.</t>
      <t>This functionality is also possible with other signature schemes, including some post-quantum
signature schemes <xref target="ESS21"/>, though such extensions are not specified here.</t>
      <section anchor="disclaimer">
        <name>DISCLAIMER</name>
        <t>This document is a work in progress and is still undergoing security analysis.
As such, it <bcp14>MUST NOT</bcp14> be used for real world applications. See <xref target="sec-considerations"/>
for additional information.</t>
      </section>
    </section>
    <section anchor="conventions-and-definitions">
      <name>Conventions and Definitions</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

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

<t>The signature scheme extensions in this document aim to achieve unforgeability
and unlinkability. Informally, unforgeability means that one cannot produce a
valid (message, signature) pair for any blinding key without access to the
private signing key. Similarly, unlinkability means that one cannot distinguish
between two signatures produced from two independent key signing keys, and two
signatures produced from the same signing key but with different blinds. Security
analysis of the extensions in this document with respect to these two properties
is currently underway.</t>
      <t>Preliminary analysis has been done for a variant of these extensions used for
identity key blinding routine used in Tor's Hidden Service feature <xref target="TORBLINDING"/>.
For EdDSA, further analysis is needed to ensure this is compliant with the signature
algorithm described in <xref target="RFC8032"/>.</t>
      <t>The constructions in this document 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 private key and blind seeds, denoted skS and bk
and encoded as hexadecimal strings, along with the public key pkS corresponding
to skS encoded has hexadecimal strings according to <xref section="5.1.2" sectionFormat="comma" target="RFC8032"/>.
Each test vector also includes the blinded public key pkR computed from skS and bk,
denoted pkR and encoded has a hexadecimal string. Finally, each vector includes
the message and signature values, each encoded as hexadecimal strings.</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 signing and blinding keys,
denoted skS and bk, each serialized as a big-endian integers and encoded
as hexadecimal strings. Each test vector also blinded public key pkR,
encoded as compressed elliptic curve points according to <xref target="ECDSA"/>. Finally,
each vector lists message and signature values, where the message is encoded
as a hexadecimal string, and the signature value is serialized as the
concatenation of scalars (r, s) and encoded as a hexadecimal string.</t>
        <artwork><![CDATA[
// Randomly generated signing and blind private keys, empty context
skS: fcc8217ec4c89862d069a6679026c8042a74a513ba5b4a63da58488643132afaf35
9c3645dcc99c11862d9606370b9b7
pkS: 02582e4108018f9657f8bb55192838ff057442c8f7dc265f195dc1e4aa2cff2ec10
e2f2220dbeb300125d46b00dff747f1
bk: 1d3b48eec849b9d0e7376be1eca90369663939d140a8f3418ebc2221159402647a9e
283a78694377915b2894bc38cfe5
pkR: 03031c9914e4aa550605ded5c8b2604a2910c7c4d7e1e8608d81152a2ed3b8eb85a
c8c7896107c91875090b651f43d2f31
message: 68656c6c6f20776f726c64
context:
signature: 0ca279fba24a47ef2dded3f3171f805779d41ff0c3b13af260977d26f9df8
a0993591b34e84f954149a478408abc685cb88ca32e482ffb9ea2f377ac949cb37468f18
4b8f03ce4c7da06c024a38e3d8f2a9eea84493288627a13f317cc6d8457
]]></artwork>
        <artwork><![CDATA[
// Randomly generated signing and blind private keys, non-empty context
skS: 5f9ed9f16ac74cb510689321cbd6a0a9602f50a96cb17ff479ec46fff130afcd9fe
d3766c6d98fe4b4f1c2fa275f58ed
pkS: 03e690b68b39c0bfb0be6a7f7f0ab49a930437b427dbf588c7acbf3fc8e3e221c83
03e2d38c7bfe735d2d8afaecfacec8c
bk: 7c65bba8e98f1f75eb9748ccc4a85b7d5d9523522d02909958e0e2fc81693dbb4d10
460355eec3a3af54184ced97697a
pkR: 0280a5180793a1c8155face304fea93783514124cdf7f0fedab11da05289e192da3
6a9f0e3ab4544d75f8eaa8ef9987554
message: 68656c6c6f20776f726c64
context:
327a0a52fa1c01d376cfc259925555920d89f15b509bb84e7385ff7207dcb93d
signature: 240e49a4dc681e3cedb241f2cf97f7c86f215902c03e38838e1d23d127c61
debca8af590ebb0fd7f1dd58a51a63aa45e5991fda32da0e7e9bb56b9374be6fed60c672
2de2689f6a969af5c78b78e5dcc353d8a47a71f337586f737b020e541c1
]]></artwork>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="ECDSA">
          <front>
            <title>Public Key Cryptography for the Financial Services Industry - The Elliptic Curve Digital Signature Algorithm (ECDSA)</title>
            <author>
              <organization>American National Standards Institute</organization>
            </author>
            <date year="2005" month="November"/>
          </front>
          <seriesInfo name="ANSI" value="ANS X9.62-2005"/>
        </reference>
        <reference anchor="RFC8032">
          <front>
            <title>Edwards-Curve Digital Signature Algorithm (EdDSA)</title>
            <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara"/>
            <date month="January" year="2017"/>
            <abstract>
              <t>This document describes elliptic curve signature scheme Edwards-curve Digital Signature Algorithm (EdDSA). The algorithm is instantiated with recommended parameters for the edwards25519 and edwards448 curves. An example implementation and test vectors are provided.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8032"/>
          <seriesInfo name="DOI" value="10.17487/RFC8032"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="HASH-TO-CURVE">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Sam Scott" initials="S." surname="Scott">
              <organization>Cornell Tech</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Riad S. Wahby" initials="R. S." surname="Wahby">
              <organization>Stanford University</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="15" month="June" year="2022"/>
            <abstract>
              <t>   This document specifies a number of algorithms for encoding or
   hashing an arbitrary string to a point on an elliptic curve.  This
   document is a product of the Crypto Forum Research Group (CFRG) in
   the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hash-to-curve-16"/>
        </reference>
      </references>
      <references>
        <name>Informative References</name>
        <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="RATELIMITED">
          <front>
            <title>Rate-Limited Token Issuance Protocol</title>
            <author fullname="Scott Hendrickson" initials="S." surname="Hendrickson">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Jana Iyengar" initials="J." surname="Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly" initials="T." surname="Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez" initials="S." surname="Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="6" month="July" year="2022"/>
            <abstract>
              <t>   This document specifies a variant of the Privacy Pass issuance
   protocol that allows for tokens to be rate-limited on a per-origin
   basis.  This enables origins to use tokens for use cases that need to
   restrict access from anonymous clients.

Discussion Venues

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

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

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-privacypass-rate-limit-tokens-03"/>
        </reference>
        <reference anchor="MSMHI15">
          <front>
            <title>On the Security of the Schnorr Signature Scheme and DSA Against Related-Key Attacks</title>
            <author fullname="Hiraku Morita" initials="H." surname="Morita">
              <organization/>
            </author>
            <author fullname="Jacob C. N. Schuldt" initials="J." surname="Schuldt">
              <organization/>
            </author>
            <author fullname="Takahiro Matsuda" initials="T." surname="Matsuda">
              <organization/>
            </author>
            <author fullname="Goichiro Hanaoka" initials="G." surname="Hanaoka">
              <organization/>
            </author>
            <author fullname="Tetsu Iwata" initials="T." surname="Iwata">
              <organization/>
            </author>
            <date year="2016"/>
          </front>
          <seriesInfo name="Information Security and Cryptology - ICISC 2015" value="pp. 20-35"/>
          <seriesInfo name="DOI" value="10.1007/978-3-319-30840-1_2"/>
          <seriesInfo name="ISBN" value="[&quot;9783319308395&quot;, &quot;9783319308401&quot;]"/>
          <refcontent>Springer International Publishing</refcontent>
        </reference>
        <reference anchor="H2C">
          <front>
            <title>Hashing to Elliptic Curves</title>
            <author fullname="Armando Faz-Hernandez" initials="A." surname="Faz-Hernandez">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Sam Scott" initials="S." surname="Scott">
              <organization>Cornell Tech</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Riad S. Wahby" initials="R. S." surname="Wahby">
              <organization>Stanford University</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="15" month="June" year="2022"/>
            <abstract>
              <t>   This document specifies a number of algorithms for encoding or
   hashing an arbitrary string to a point on an elliptic curve.  This
   document is a product of the Crypto Forum Research Group (CFRG) in
   the IRTF.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-hash-to-curve-16"/>
        </reference>
      </references>
    </references>
    <?line 556?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank Dennis Jackson for helpful discussions
that informed the development of this draft.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+1923Ycx5Hte31FmXoY0qu7WfcLjmUbAigRNm8DUNZ4abTE
rMwsdBndVe2qaoIYLnrNb5y38zjfMedPzpecHZlZt76AkEZe44eRbAOoS2Zk
ZMSOHZGZ5fl8brVFu5In9qM/yjv7q1VRiqK8tvOqtq+K65K121raV3wp17J5
ZHHWyuuqvjuxizKvLEtUvGRrvC1qlrfzom7zOc/r63nTvTu/kXfzzDQ7dwKr
2NQndltvm9ZznNTxLFZLdmKfXj47tW6r+ua6rrabE/u7b+zv8BfJ8g1dsdAO
bosT+6JsZV3Kdn5OfVrvZbmVJ5ZtmxfPvr78Bn+1dxuINW3CttesWJ3YJOHv
SdZFVV/Tm0W73Gb6+tOHjQRvraCLpj2xl227aU6ePqWnF7qpRVE9sJ0HPrZY
tuuVZTUtK8WPbFWVGNudbKxmzer2x79uK4hyYpeVtSlO7O/bis/spqrbWuYN
frtb0y8/WBbbtsuqhrLmkN/GHOKlrxf2uSyLRl3Rk/l1zcqb0VVoCRdZ067u
oH2+UBcbtC4x/CAO7a/wQslK+6pVt3jRwkKucIFa4kXDK3292pYtGc+3ZdFK
gcdJhXaV26drWRecqaeknqRcyN87Tr7ATE/kfbawn7G2KkfyPhO3rBajy0pg
dPJe1g1koR6+Q1f1qqomssMCx4+dvre/w5SOxjB5qxf/jJVMTITFaH4vJfW/
oFGMxH27sF/ITVWU7Ujgt9BK/X//Q8jJPd3lK3lr/xlm+9M1psy6pablQsiJ
FGcL+3QBb6jESIqzZV00bbVZynpyV2nvbFVtRb6Cc87259x1XPttdVs2shS/
6KRzdvv7pWQbmHxWtI2afKus6jVrMUvk5c/Ozq9OT9Q7HXC92cJNuE34dVbf
bdrqumab5Z3CsHYp7a+LkgRiK/tK1u8Ljt4vSgEAqu/suf0WTzxbrYpNizbO
tvV7aZ8XcGN6vAfA0xVQD669th8rAZ48UhIIDEVZUTh3Xa0hDEk2BI5aRts+
fXV1cUL/a/9Luoi8OT2tbvXOaPdKNxop7VcYb1WSCOTxMG4SucGAt620LGp+
rJKrK8+dqORN1bTzf96yst2uSS/zCa6fomNZYriqExiIfVpW5d2aXOCVbAmE
td+3rL6WI4STmxq2uigYrwk5n3qO5z5NI3+iC889MLq5+XnIh+/x470XzxfQ
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

-->

</rfc>
