<?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.14 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.13.0 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-signature-key-blinding-02"/>
    <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="2022" month="August" day="02"/>
    <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/"/>.
      </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: 63ac6c411cf72d9006b853db3458940fb1b5d690747abd8b1ccb73f0f5269837
pkS: 963d13e180030cfcf1891c10d3143b5cd3613780b943dfd9100f7d9bb31af2cd
pkR: 4ed06c22a58ef8e65d280f0970fd02f839083026b6116b0d65c2cbf3f519368c
message: 68656c6c6f20776f726c64
context:
signature: 3a2ada316be0e7162ae8cdcc6b35dda7ab4159296fd1b060cc809fdb55e56
23cf0af5550140eaff2bb99516986d270bbb6737e5c8661731e016923e998315e04
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key seed and zero blind seed, empty context
skS: 056f2668895cda2f89e8ddc3138910979982ab3135ee22d358e80c85cec4cdc7
pkS: e211f518d9361dc1e39ca572a10e45c7372ac990465b17d62fde42247c367fb7
pkR: d73a40d8806f08936ef0c425482d2fdf6424242f008854db74c6230eeb44e19c
message: 68656c6c6f20776f726c64
context:
signature: 89d007f1215595b14612217ace71d3ce28688ebf55e5151e97861eceb5b60
6a32d37c15afc31a9ad7ad7101d15b9228edfe9b9b25ddd42f442475f4317f47405
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key and blind seed, non-empty context
skS: d9fecb86876468c4c244e567662b4ad061c795ad03cbfdcf95fd67d1cba836d3
pkS: d018ed0a1c47f8d530c58afc30bcf141c0d4766429fd53a1b69287867e169827
pkR: cfd1458e1f81ba8c59446180cea170f5f2ecd721d68d02c625449c8ce4a8ab28
message: 68656c6c6f20776f726c64
context:
2b79c03dd60967c954d3263ac32834692d6938c75fbc9a089ec855ca3a15ad40
signature: 27afdabf12ebc768863df1ee10db0408362132b56fe7a7fa84cc8b191200d
8cd8d8cd39f3698798f1a7e1a89c477699e2450c65edfbf65bf354ae7de45aa6e0e
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key seed and zero blind seed, non-empty context
skS: d5c4c2f3fc43b8cceb6083b1db97c4dd0b9fca0773b14ed73066ad64d7d276df
pkS: 8552d8d4ffe3c7f94ee0cdc1e52598de3425439ed6161f8037bcce99d84c7953
pkR: aa148c1e6ceb8557aa89d85fb8d71e24cd4d0bc958f6526f3336e357679b77df
message: 68656c6c6f20776f726c64
context:
a9df0f21630248d1753e4a21ee2edcaa78609386134548a22696dd409cf1c2ac
signature: fe138ac61c020db62bfcdf70d181a4c6ee7d8015d4d577e55868bd86676bd
ecccea8db0da501e877ab58ab17fe043979eec7e467c68a1e690932dd5552ae4705
]]></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: cc09c66952c416956f78b73c8fd984f8bd69fa894fb08dd197be0a97dae1d781083
d8bcc4cca0aa906450c6b5e1b5cf3
pkS: 02091444dfde7de0623d8b94ba9ef8010756baf982b12db755d130c16fda97c4f95
6dd0f7b346fc3ef7245dfc76e1cacc4
bk: e49afba496c06344afa224480f823457863ac71e5f67c359ca1fbc42411754cc893c
c0bc10ff6d95363ab2e1c4154092
pkR: 03ae6ef617427a15bdc9dcba8a482f5f25aa45af6916edc8b51254304f393ee18b7
2fab54aae380426984ebfb7ef4045c8
message: 68656c6c6f20776f726c64
context:
signature: 6e31a96d811b0a271640e5dead87c8a5a0e9aaece4145464818bfcaa0ee9e
ea09c9178a59a4003800ae0a88cf2d3ae2811303f0acb0f77ce14ed8a2ad82d612af0ebe
b87c23047b7129ffcae4c2dd0f187e671e2e05a85972cd7e53de1529c45
]]></artwork>
        <artwork><![CDATA[
// Randomly generated signing and blind private keys, non-empty context
skS: 90792d09edfc4afcb3a770b1d8582ed4bf3f3b3f751b90e5c8ac8ce1671c60475ee
0d390d0505e4b5bfb678ba9e665c9
pkS: 0275741cc339a46fc7ce24a0553eb3c2f2e83cf50dbb856ff3ae445d3a511f42749
c2f8510b0de9ac1b5deca9161ded522
bk: 9ff66325364badbef3d29bf4c955dbbe2be8cdaa2cc777f8badc066e171fb7b2df53
349278028da700eeabb745c045ef
pkR: 03782eed6bd50a9554989998850f88d91279ee865153d4be922488df39d614588df
94c70ed3494a7fcbd3fc057ea6ccf29
message: 68656c6c6f20776f726c64
context:
ff47734c8ccb40a369fdd2bdc34749e1d06feee27170b6452048594365e1c853
signature: fdc8e03668cbe9ed0146d0e2fbdcc5d494860f8017217c5044a0ff773af72
205eb4a20ffa5bbc9076cd5a43fd99d9b42a79a483a6be3a1b9f85b3180fd0e6c371ef06
6e2557ea5cf752eecc1f2a0ff67777eb01604039a92fe3d48d6991ebdc6
]]></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">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Sam Scott">
              <organization>Cornell Tech</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Riad S. Wahby">
              <organization>Stanford University</organization>
            </author>
            <author fullname="Christopher A. 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">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Jana Iyengar">
              <organization>Fastly</organization>
            </author>
            <author fullname="Tommy Pauly">
              <organization>Apple Inc.</organization>
            </author>
            <author fullname="Steven Valdez">
              <organization>Google LLC</organization>
            </author>
            <author fullname="Christopher A. 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">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Sam Scott">
              <organization>Cornell Tech</organization>
            </author>
            <author fullname="Nick Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Riad S. Wahby">
              <organization>Stanford University</organization>
            </author>
            <author fullname="Christopher A. 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:
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
VNYHXWIUE2Z1GB9xUVatDbS5oVCxQftGE1idV9PoWqIFAlwvyKY6HLJPl98j
GfRwAFj3RJyPRJz1DnvMCHu2tiaK359wrJPDYy5sBazUKMAz1iGALbfrDOvF
iBvKiRS5x5B2pkSUH9h6s5IzUHQlxD789nzR/vhxzDA/fbLvB2brocCMgQ1h
/PQJRmtJP/DGyi4lJ9evlTYtnT7YoLA3emr7DWug0KZB+cDlWNx/vjx9++zF
xcuLt8/Ov76Yny+MsBs8MK/JpKsCRcS8rW5AEDC5Zb0GAt+yO/JmxnkF3SAR
YjYyWWNnd9OkPyAamfx2CYKihB9C/pgzTfyd9IhnoMEl4ewSBK8cyETvbg2E
RX2LW7K7AZSs40BwXKDPO5vKuiqaxoKgKt/LEV3+2cv5BVH7XMLYQumz6RPj
HmOC5o8NPCFWrFg32jbLQqLw3VJheS0ZSiiakWTelgQR5soCKKZKTySw2e7d
a8lKQ9RM4iWAGZK1BsfHBn5HZOqJpRiZgr/ybqIgJXMF0Ib34Lku2R6wOgqS
zp4zayL0EcFGzMzOUPVKOMkUBAdII9ZmqS/lhtWdg45mbwyC3fP8FE87PpNh
bcouoshhW8Kv8fqJZT2Mhz8T51enCNLfXH57lji+Z/BEdStwWf2La8TYS2Ki
1lG6vRhqHAbXuwNLMW6OjDaaFJc19FBbcAvsrRHp/8NqQGU+fmxQwCqGIxRd
qQgPlIXXRPuFbFmx6he35+cKrjZV0xTEmZWEOvPsEaox11XpdUOtj7/o1oe1
z7+gCeqWfPpE6avaXi91dhwti3g7+QfV4JQqhY2JKYF/9ZV9fnF19uL04uWz
y12zKFSgzgm1U2D365rclSyAb+BoKFCUiq4rJemughfWaaMkIUZgv/z+6q39
6vVb+CVxA6EUV0skH8ywEpMURNY6pnCVMpgQhWkm9X2jqqT12GdV+Z5KVbVs
iHou86JUNzeWqtFUBFKytx+RTI9m+l+SjT5fPvuX75G/zunz1fPTFy/6D5a5
4+r56+9fnA+fhifPXr98+ezVuX6Y1jq5ZD16efqnRzqoHr1+8/bi9avTF49s
lVXHaidjwaUzKrUAv8ia1GJkjdWFiaBnvjl783/+3Q1MdHium8IZTai4cYA/
bpey1LNV5erO/AmPA26jNmY1jUJFJmcbomIU7rDXsrotO+/47Y+kmZ9O7H/M
+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
qAcRryrQ4QATnFjY9gv42dLE+76Pa7TAbVMc2/FPd3hJptoPNMaSrfJOH3qU
YaPAtIs5ygKnLjXn6fEHgDTldbMArX53tAwSEePvSqJQsxNn+aPv/TSj7ujy
x8j/afHfeP05vPb+NoCtLTkY0ts3ZGdFGnTPkFlvyGxkyBESToO2ASrCZ//1
t1iQ/Rg8FajY+2Z379grcf8I3b6jVHF0DoMEg78Y35x1a9OPXm7Lzhv6NqgC
M5Q1KGrU1pij6orofazajEhqfew9AaVVgEbaGeiPZuDwim7ds8mqOk+rB7FN
8RAEyWZpqgV8/nusFbz/rhWO1wqHbjIN7R3T6q20nRkh2p+3TZeCG2n1ZqDb
Rh3xewrL2YT6A9/+8My0vre6doXPMmHBxgb71LgUzn0fRmOOTrxGpTO7WMjF
rOut7LzD6vtu2Y017jEo2VT+d91A47IBwMdqe0wfKRolzWuAUfdUSaIh2dor
KAyJIC2a2uKBjMrTlW6PpJZCUhX4zb2I+jA4VW8pP0uaDrtD0RzxBuosmTCa
+oH1OT+AmMvqdlS/NfbjBnDYeE/GeISrlP1PcdUaty27Fsg+jiqn7Ko+vdN7
yqCsX5FBhfE+g1Kercd13fiJzmBL97Nk6hdzqaX7YA41IVA0xj2ucj+FGvMn
LcyYQrk/hrHhUO6PrvsrsajuhdzDWZS2RT+Ttsh9XArfD2SqW05Ho5beYR7V
7yX4u+RR3n+ORS29wZbe2JZ/KyJ1qlHgv5BKeX9rKqV38H0luWjYJ8v68cdh
F1q/R6LbsdD3y4d3x92LA7NPymwru/r+2/nZy9O52okmh30l1PbnqlnG4OGC
an7aMKycjFJiXa1Gr6hpJkVUFrQ9+OXVy+cXbvj1+euLhevgP078NI2TuT/3
3XTuO0ngzN2faWfiQP/07pzpCw/ibpJOV4u52gDQtozfdK8nuk3L9IJjVdxI
2r5LdltX73W61GCMVGqO4w2t+n43Eu0oop1edr6tiUMN2/B++ulvT1T7cx6T
NFmRgTZG8f2hqmHj5nT6o7zVmvJW+whv7Ub9PE290LYZb3KxzCaXFcGEbXZ0
TWjNNLEc2n4w7GtUouxss6D96WrrAkKEXua5YZx6TpJ6ruOHkRckceRFaRwE
URqkgROHsR96aZpGaRh6XuD6YRw5fuAFnueFqRO5TpSAJjpB4EfpYsfEf3/c
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

-->

</rfc>
