<?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.22 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-03" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-signature-key-blinding-03"/>
    <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="January" day="31"/>
    <area>AREA</area>
    <workgroup>WG Working Group</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <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>
    <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>
      <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">
              <organization/>
            </author>
            <author fullname="I. Liusvaara" initials="I." surname="Liusvaara">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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">
              <organization/>
            </author>
            <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"/>
        </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>
    <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+1d23Ikx3F9769oLR+8q5iZ7fsFNm2BwJILaW8GlqIVNINb
XVWNaWGme9Tds1h4YxX+Db/50d9h/4m/xCerqm9zwYI0FdaDSUkA+lKVlZV5
8mRWVWs+n1tt0a7kif3od/LO/mpVlKIor+28qu2r4rpk7baW9hVfyrVsHlmc
tfK6qu9O7KLMK8sSFS/ZGm+LmuXtvKjbfM7z+nredO/Ob+TdPDPNzh3fKjb1
id3W26b1HCd1PIvVkp3Yp5fPTq3bqr65rqvt5sT+7hv7O/xFsnxDVyy0g9vi
xL4oW1mXsp2fU5/We1lu5Yll2+bFs68vv8Ff7d0GYk2bsO01K1YnNkn4G5J1
UdXX9GbRLreZvv70YSPBWyvoomlP7GXbbpqTp0/p6YVualFUD2zngY8tlu16
ZVlNy0rxI1tVJcZ2JxurWbO6/fFP2wqinNhlZW2KE/v7tuIzu6nqtpZ5g9/u
1vTLD5bFtu2yqqGsOeS3MYd46euFfS7LolFX9GR+XbPyZnQVWsJF1rSrO2if
L9TFBq1LDD+IQ/srvFCy0r5q1S1etLCQK1yglnjR8Epfr7ZlS8bzbVm0UuBx
UqFd5fbpWtYFZ+opqScpF/I3jpMvMNMTeZ8t7GesrcqRvM/ELavF6LISGJ28
l3UDWaiH79BVvaqqieywwPFjp+/t7zClozFM3urFP2MlExNhMZrfSEn9L2gU
I3HfLuwXclMVZTsS+C20Uv/Xfwg5uae7fCVv7T/AbH+6xpRZt9S0XAg5keJs
YZ8u4A2VGElxtqyLpq02S1lP7irtna2qrchXcM7Z/py7jmu/rW7LRpbiF510
zm5/s5RsA5PPirZRk2+VVb1mLWaJvPzZ2fnV6Yl6pwOuN1u4CbcJv87qu01b
Xddss7xTGNYupf11UZJAbGVfyfp9wdH7RSkAQPWdPbff4olnq1WxadHG2bZ+
L+3zAm5Mj/cAeLoC6sG11/ZjJcCTR0oCgaEoKwrnrqs1hCHJhsBRy2jbp6+u
Lk7of+1/SheRN6en1a3eGe1e6UYjpf0K461KEoE8HsZNIjcY8LaVlkXNj1Vy
deW5E5W8qZp2/o9bVrbbNellPsH1U3QsSwxXdQIDsU/Lqrxbkwu8ki2BsPb7
ltXXcoRwclPDVhcF4zUh51PP8dynaeRPdOG5B0Y3Nz8P+fA9frz34vkCGpFZ
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
YfZ/vZerarPuv7hDdUX6vy5ZWP8DWQz/2ERmAAA=

-->

</rfc>
