<?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.13 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-irtf-cfrg-signature-key-blinding-01" 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-01"/>
    <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="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="July" day="11"/>
    <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): Blind the public verification key <tt>pkS</tt> using the private
blinding key <tt>bk</tt>, yielding a blinded public key <tt>pkR</tt>.</li>
        <li>BlindKeySign(skS, bk, msg): Sign a message <tt>msg</tt> using the private signing key <tt>skS</tt>
with the private blind key <tt>bk</tt>.</li>
      </ul>
      <t>For a given <tt>bk</tt> produced from BlindKeyGen, key pair <tt>(skS, pkS)</tt> produced from
KeyGen, and message <tt>msg</tt>, correctness requires the following equivalence to hold
with overwhelming probability:</t>
      <artwork><![CDATA[
Verify(BlindKeySign(skS, bk), msg, BlindPublicKey(pkS, bk)) = 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>A signature scheme with key blinding may also optionally support the ability to unblind
public keys. This is represented with the following function.</t>
      <ul spacing="normal">
        <li>UnblindPublicKey(pkR, bk): Unblind the public verification key <tt>pkR</tt> using the private
blinding key <tt>bk</tt>.</li>
      </ul>
      <t>For a given <tt>bk</tt> produced from BlindKeyGen and <tt>(skS, pkS)</tt> produced from KeyGen, correctness
of this function requires the following equivalence to hold:</t>
      <artwork><![CDATA[
UnblindPublicKey(BlindPublicKey(pkS, bk), bk) = pkS
]]></artwork>
    </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.</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) works as follows.</t>
        <ol spacing="normal" type="1"><li>Hash the 32-byte private key bk using SHA-512, storing 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) works as follows.</t>
        <ol spacing="normal" type="1"><li>Compute the secret scalar s from bk 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>Hash the 32-byte private key bk using SHA-512, storing 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.</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 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>Hash the private key bk, 57 octets, using SHAKE256(bk, 117). Let h2 denote the
resulting digest. 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>
      <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, BlindPublicKey and UnblindPublicKey are then implemented as follows:</t>
        <artwork><![CDATA[
BlindPublicKey(pk, bk)   = ScalarMult(pk, HashToScalar(bk))
UnblindPublicKey(pkR, bk) = ScalarMult(pkR, ModInverse(HashToScalar(bk), p))
]]></artwork>
      </section>
      <section anchor="blindkeysign-2">
        <name>BlindKeySign</name>
        <t>BlindKeySign transforms the signing key skS by the private key bk into a new
signing key, skR, and then invokes the existing ECDSA signing procedure. More
specifically, skR = skS * HashToScalar(bk) (mod p).</t>
      </section>
    </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
skS: 875532ab039b0a154161c284e19c74afa28d5bf5454e99284bbcffaa71eebf45
pkS: 3b5983605b277cd44918410eb246bb52d83adfc806ccaa91a60b5b2011bc5973
bk: c461e8595f0ac41d374f878613206704978115a226f60470ffd566e9e6ae73bf
pkR: e52bbb204e72a816854ac82c7e244e13a8fcc3217cfdeb90c8a5a927e741a20f
message: 68656c6c6f20776f726c64
signature: f35d2027f14250c07b3b353359362ec31e13076a547c749a981d0135fce06
7a361ad6522849e6ed9f61d93b0f76428129b9eb3f9c3cd0bfa1bc2a086a5eebd09
]]></artwork>
        <artwork><![CDATA[
// Randomly generated private key seed and zero blind seed
skS: f3348942e77a83943a6330d372e7531bb52203c2163a728038388ea110d1c871
pkS: ada4f42be4b8fa93ddc7b41ca434239a940b4b18d314fe04d5be0b317a861ddf
bk: 0000000000000000000000000000000000000000000000000000000000000000
pkR: 7b8dcabbdfce4f8ad57f38f014abc4a51ac051a4b77b345da45ee2725d9327d0
message: 68656c6c6f20776f726c64
signature: b38b9d67cb4182e91a86b2eb0591e04c10471c1866202dd1b3b076fb86a61
c7c4ab5d626e5c5d547a584ca85d44839c13f6c976ece0dcba53d82601e6737a400
]]></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
skS: 0e1e4fcc2726e36c5a24be3d30dc6f52d61e6614f5c57a1ec7b829d8adb7c85f456
c30c652d9cd1653cef4ce4da9008d
pkS: 03c66e61f5e12c35568928d9a0ffbc145ee9679e17afea3fba899ed3f878f9e82a8
859ce784d9ff43fea2bc8e726468dd3
bk: 865b6b7fc146d0f488854932c93128c3ab3572b7137c4682cb28a2d55f7598df467
e890984a687b22c8bc60a986f6a28
pkR: 038defb9b698b91ee7f3985e54b57b519be237ced2f6f79408558ff7485bf2d60a2
4dc986b9145e422ea765b56de7c5956
message: 68656c6c6f20776f726c64
signature: 5e5643a8c22b274ec5f776e63ed23ff182c8c87642e35bd5a5f7455ae1a19
a9956795df33e2f8b30150904ef6ba5e7ee4f18cef026f594b4d21fc157552ce3cf6d7ef
c3226b8d8194fc93df1c7f5facafc96daab7c5a0d840fbd3b9342f2ddad
]]></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>
      </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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

-->

</rfc>
