<?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.8 (Ruby 3.0.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dew-cfrg-signature-key-blinding-02" category="info" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.12.5 -->
  <front>
    <title>Key Blinding for Signature Schemes</title>
    <seriesInfo name="Internet-Draft" value="draft-dew-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="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="May" day="03"/>
    <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://chris-wood.github.io/draft-dew-cfrg-signature-key-blinding/draft-dew-cfrg-signature-key-blinding.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-dew-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/chris-wood/draft-dew-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. A signature scheme with key blinding extends a basic digital scheme with 
four new functions:</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>UnblindPublicKey(pkR, bk): Unblind the public verification key <tt>pkR</tt> using the private 
blinding key <tt>bk</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>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 that remains secret. 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 scalar in the P-256 group. Key blinding introduces four new functionalities for the signature scheme:</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>UnblindPublicKey(pkR, bk): Unblind the public verification key <tt>pkR</tt> using the private 
blinding key <tt>bk</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, correctness requires the following equivalence to hold:</t>
      <artwork><![CDATA[
UnblindPublicKey(BlindPublicKey(pkS, bk), bk) = pkS
]]></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>
    </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. 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"/>.</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 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.2.5" sectionFormat="comma" target="RFC8032"/>.  Let prefix1 denote the second
half of the hash digest, h[57],...,h[113].</li>
          <li>Perform the same routine to transform the secret blind bk into a secret
scalar s2, public key A2, and prefix2.</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(pk, bk) = ScalarMult(pk, 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 separate 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/dir-spec.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="2" month="May" 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-02"/>
        </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="18" month="February" 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-14"/>
        </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+1c25LcxpF9r6+opR5MOrqbuF9mLdujGVIamTfPUNY6tAqx
ABSm4ekG2gB6hm0GFfsb+7bfsp+yX7InqwpooC/DkdaOtTfWcnC6AVRVVlbm
yZNZhZ5Op6wt2oU84Y9+Jzf8i0VRZkV5zfOq5lfFdSnadS35VTqXS9k8Yqlo
5XVVb054UeYVY1mVlmKJ1lkt8naaybtpmtfX06ZrOr2Rm2liep1aDitW9Qlv
63XTOpYV44KopTjhp5fPTtldVd9c19V6dcK//ZJ/i28kypd0haEf3M5O+EXZ
yrqU7fSchmS3slzLE8a5aXj2/PJLfGs3K0g17oLzpSgWJ5wk/G1Rt/msqq+p
ZdHO1wmuz+uimd5VVfb0QdNB0wX00bQnfN62q+bk6dNtFzPd66yoHtbZw56a
zdvlgrGmFWX2g1hUJSa5kQ1rlqJuf/jzuoI4J7ys2Ko44d+1VTrhTVW3tcwb
fNos6cP3jIl1O69qaG2KOXCsJRo9n/FzWRaNuqIX9XktypvBVagLF0XTLjZY
hnSmLjboXUIFXujzL9CgFCW/atWttGhhKVe4QD2lRZNW+nq1Llsyom/KopUZ
Hic18irnp0tZF6lQT0m9Wnkmf2tZ+QxLPpL32Yw/E21VDuR9lt2JOhtcVgJj
kFtZN5CFRvgWQ9WLqhrJDlMcPnZ6y7/Fsg7mMGrVi38mSpGNhMVsfisljT+j
WQzEPZvx0xkMssoGAp+RubTVai7r0V0l99miWmf5Av4x2de2bdn8bXVXNrLM
/qrqTsXdb+dSrGBsSdE2Su2srOqlaKEfcrRnZ+dXpyeqTQcdb9Yw0JQTgpzV
m1VbXddiNd8oFGnnkj8vShJILPiVrG+LFKNflBkwoN7wKX+LJ54tFsWqRR9n
6/pW8vMC7kOP9xB0ugDuwKWW/LES4MkjJUGGqaj186e2rTWEKcmG4EnLyPnp
q6uLE/qX/0s8C5wpPa1u9W7Ae6UbjZT8FeZblSQC+RrMikRuMOF1Kxmj7ocq
ubpy7JFK3lRNO/39WpTtekl6mY6Q9RQDyxLTVYPAQPhpWZWbJRnfK9kSDmqP
a0V9LQf4Ild1UbazQqQ1gddTx3Lsp3HgjnTh2AdmNzV/D3nPPR601/B8Bo3I
pFiInabn1fp6IZqduzutL6l1LdLqtrnZ7HRwWW3GN9++vjy/uHx2hr9/HCn3
LVSYFbVMW4QivqorAF21mHDlv9Cne1B3sKg7mczQBi3+hMZKg/jarGRKcP2U
fOspOp6qK+17WD6s5+Ly/PL1m5EApyUXRZ3V1QrmLVqIIGF2tzBrCFWsCqwt
rhW3It08dBmtp0EYzFZZ/um1IyUCLMQ82VNhIbLde/vr9wXCxnx39WDyw+s7
rYBeX8s8r+XuiEMEGz+x08PXM/jEnr19XTVyNdd39Ip/8eLi1fnFqy/H3lRX
t+Q7VzJd1wbIYQT/9W//3vCviiyTZQcs/CIjx2oHVOaNsY+DK3F3dzddY+2a
WdrI2XpZzmS2fvrjvFqtwDL+9DQRTZFOYTBV3i9O52e2++m1ejXjX6m+dib+
qkjnFbmLucvYdDrlImnIAWB3b+dFw8Gu1kuypUw2aV0ksC/5vpUlGXnD2wrf
oHyaY2bwsmcNvNGUTcENGATvGQQjuE0rPIJZYWitTWpIHd0BYkfPc8ihbFzo
S4gfK4329BSgkYnFYNyGes3WKR5bN9Sc4L9rSC1WcByOmMbp0grRi+YHAfAc
W5e7T874S0hawbEn94yx26phZgCtnXXRzEWykDyvq+U93ewP38z0QuTrMtXh
gCxrjmUT/FYgzmjlidVqYbAcNKso08VaqY5wqioJkRoT9hgU1iHD1KAGPdmh
Ca1WUlUtmcGKYjBPVTyF2deyTDfgcE0rl5BL2csStr9AOPqMWLGaDMnA2PlR
c8BiVXeQnu7AZWFD9AkXcLMR19KoQmghW9kbBjPL3SkNjxwwunU6N9ZSboAm
nCIpFq/IN8oQ9lowWlp1qxtfGSBdMFamWneBkmSA6UJvq0pbJyZAD3dS4oHZ
PbNHVoCuFgvqBV7UGMsD7PdLDJ+FbilkfylLIH1/Q63NtYTWRHtYRSTdu+bm
6p3SU6vdbCArIODYpN6t0GyGcYnwPEYfE75srp/sjd8NJYg0rNZtr7Z3ePzd
3uJhxD3hJmYF9ZP7a/gOH5Uof1Dr9nhlhFEOuC+RXt3O0490x9UyM35QaHEt
AJUEMPdqZ8I3hVzoRa/XcG8C427t9Vjw1Fu4aKb0n4tFI3mFJ+q7AtjO2AX8
sFrKXXdtf9FAcTJfL9SEhr7R2fretBqtaqbGB6BzpGLXU+QIy4NWMfALMzv0
D98oq5YDcm7IXTho32AA1lk29a4lmsHL9YQ4pcKQfTz9Hs6ghwPouifidCDi
pLfZY4uwt9hspPj9AYc6OdznjCt0pVwdbdghlC3XywTzRY8rCozkvcfgdqJE
lO/FcrVAygSOrqTYB+GeMfIPH4Yc8+NHfj88s4fCMzo2tPHjR6xaSwqCOVa8
lCnZfq3UyXQQEVuNvdFD8zeigUabBvlDKofi/uby9O2zFxcvL94+O//8Yno+
M8Ku0GBa05ouCmQR07a6AU3A4Iy9BgzfiQ2Zs0jTCspBOMRotGYNTzbj0L/F
DlrzuzloihJ+6/RG1H1zGlk8KRKNoMI5oe0cPK/ccore4BpIiwwXjySbAS6x
41hwj0iftDeuwq/yqKEoyMz3YkUXh/aCf0EcP5dY70yptNlGyD3udLzjEcNS
nC6jGSm2uUWbQQOY3rqG+dwNAhXFKcVyf0qwUqPqOGla6+QdfWioT24A8urG
vXCgMHnA8QYhZ6hb/i65GUL3QRaJvi5VyPlGM7ChRJdGInPrUzJdPlSm2UB5
26Cb3HSB92pMi4bxddj1XnjFWFsKs6tzMzJ7kFmIYtlor50X8hbMjGoO11Ig
uyZDJFNelxQ9zJUZR4RTZQkQnMnu40spSsPkDTGj4LMlczpwPjbzHbDtJ5wp
zq5iY7kZa5KkrhDRgSxo2LGxA8pBytq5OqB5JPcR0QbknScSqTsAZBwitwFP
EXum7sqVqDv4GozfmAB3XwejcNtz3gTTU4uTFTn8nuLbUAVExR+WrD3Lzq9O
geH/dPn8LLJcx4QbVc3CZfUX1yitKyldYUdzstk2ERaApQ2YrMFAMJ7BoLis
IxMVbNfwuhqB4J9ZA7r74UMj06liwZkCiYrChVrkJeWGmWxFsegnt4eBKpqt
qqYpKLFSEmpmske6hwmRol8rKo392ZTG2N7zpAoqp338SPymWl/PNX0azIuy
OzIRKtMQl8o4RiaG99ln/Pzi6uzF6cXLZ5e766JiBpXWqN6Glb+uyWRpCXAH
toY0VunoulKi7mp4xk4bJQlRRv7ym6u3/NXrtzBNIo+Z0lwtgdoYYZGNOAot
1zGNK0ohsqww1ca+sFiVNB9+VpW3VNBQ04ao5zIvSvVww1Qmr7yQ2CB/RDI9
mui/JBt9vnz2+2/Ab87p89VXpy9e9B+YeeLqq9ffvDjfftq2PHv98uWzV+e6
Mc11dIk9enn6x0farR69fvP24vWr0xePuGJdQ7XTYsGmE0rIEZzBqqgGLRrW
+UlGbb44e/Of/2F7xj0c245hjcZX7NDDl7u5LPVoVbnYmK8wuQ2DrqWoqRcq
RaRiRdGTHB7rNa/uys46fvkdaeb7E/6rJF3Z3q/NBZrw6GKns9FFpbP9K3uN
tRIPXDowTK/N0fUdTY/lPf3j6Hun98FFbRZ5RYm+ilYgRNpllJ0i2yWfItAe
rxPWqFuRbdGGOlhWWR9mqe7A33357kQV7RtTGifeQn5NNU2639y8OzlEfQbU
csafw/AVJE56MirwX40uqyUW2LAXSTsifUCRmAGQbiHLayCO64A2qq2Mmvuh
+Uwkt+5qAx8+GLCdEGQqouDP7JkPx6OC/+H7Dt2fcMrc6dqtXBhxe5CeqDlq
kbXAmKJAdFMpbhcDl3IKSYCJstvcSNXmhtqpVIpa3YB2PDHaHBCigzWOITGn
4VUPwBOszOP31oTPZrMJf/+KujtTVxFGOnpMqqG9I3TX0EZS1856b9kTjn8d
y1V/Pcu3gif8c/ps01V9Rdcm1BRfrhcteNmEEyujL8VqsRnSMlU8u1GZhWrA
b8YlB5DYbSVE5QpKjbJBXzTMyyq7KKmULx+/n/AXT2g6y9W61Wa51CMqe7wl
TFFP0hzfk6WuFxV/oXP9VSPXsO4qk8awVxpGEwnPmCg0usbiDDs0uQSRBC06
WNFaKttEYluRMSZ6rv/6S07FU9FWtbaNPu/US6VqcePOGv7uvS4Nvdu8G3RJ
83/3nv+Sb94pyB/uw4MqUs1gXiAKLkACFxNTn/gUdyTvb0zdQLGPnj0XNftE
iaLcHCoq7KSHu8leP7QiTYcLAvfxwgOVvMkYh1QC11GPcZ6q5K5pBxPrizCL
GHNgVbQKlNO6zlS5hAIO/ZF1jixNNH+WOb5vx1x99LyoS9abMTRMKBQh8jeD
MVRzxetU4evN1PEDDMx20KLDCn1fw4Ja/m3x3ZR1VSF/JwEkLlaYCv+4EKTN
4v/zw3/Y/PC5qkNew75KdWknURks6kTHirQticzW8s/rghKbdkQB6CqQTFIx
CW42rxYZjOPHH39kewo9suLqH0QFfFftWJ+ADIaEDx7fXBnqUrMRkwOafRl2
vGk7pBpbK+/Ml6y5M+tetZTHsSHfIGQ1Hr0ChTcf0/a95pTmu8kZGsMFtqlc
QTBCPEkTd0K0saome8apOx7Pu2FDNqW6gdfDBWmI8ghdoRriYMkp5lU3ZpHJ
aLaKYKazQWZ0tFciOZpOr1tE10bT6h2ioXOq8UxVo93JMrbzUAukayiXafbA
JaEMjAobHQx2CCbV6YNGw66CQ2aq0mUfps289T6uDnobTSB1Z7M90TjitBYE
LkK5FNVHtpX7ppUrStVTuWq1ESO9OzzaAJIMDRizETZgI6p/JZEJEOpK9wBl
5prUDI1cs0XTWM2fv5iM86SjFsIY7ZR2C5/qGtCeN2s/VudLiHZoiKAs357x
r0SjfacLjsMIizXTciLrmfo2hm9AfQbbPrJpVQbGA29apa1UR5IWpDeerKlw
Mun5TjLTh/goFTSF2zvMu2fz+nlNCxHj2oWcgkcg9DK1q65omyr2L3XE0AG/
Myak268qRRaFSXHke1qhgoogzU2xMoFaDUI9ruq1gmgyhE+oGFp6o41pa7w7
/HGHJDdPJgMn01ZegpPSgGZfBiJo8kvXVBLFDZnY2hvGPhr7jiznkDTvaEhH
ESypUKgztpLZXmOwcUD/gJY3RMs7s36hGBWx2RzI8wkj/RkKxKDHdUjKM/7y
EB12WGbw2IBWh84HIcsY/0MBS298sI4WwMTz4v2WfydVF58MLzAd9ptv+nkz
pe2ePBIPwxUPxj8D+/eAwEEWs2c5J2MgGOpANYSLKt+GAYzQYMb5C9jX3Lj4
vllrgMBjyEyRhlJudMAu7W0dNi9qfQBzLhZ5pw/dy+TI9voAnU9tqv5Q8weA
JwVCMwGtfnswDRIR/e9KMicVdeLMv3Od7yeUfs+/C9zvZ/+XwBRLu1WMs6+Y
TivU255ikl4xSa+YEbKMnaABysAGkFo3Dn8MogSU6de6e3a4ynh+gBZfEtoe
HcN4lqDAq0ofZq0n3dx008t12aFJn7YqcAAnBSNVm91HDSmgCro6Y0Sh5LHz
BJxKAQRpZxvmNQXE2nXznoxmZXZGVbHGCGfYK5LQ1dzQVXz+eySrzj8kWT30
kKkB7OhcH13r9AuR/7RuuljTSNbrhx4bFBHuSTkmI+4JRPjdM10t0PVaOhoj
RcagfIMWql/ysz430i5r8l8KU7btadQx3v9YbRb2BqghwhQ+VAGBbft5ssXX
ER81sY50YKjpAwO/Y8jT/cH3sLaL5oiyaRvemM9YzexTaoaY8+puwM8b/rgB
DDTOk6Ef4ipFkVNcVUlIF4tNEZXv44da847V64OL40jM/oqR2A/3I7EyHN2v
bYdPHhyU//5isvNXiMl+2MVk2zaxp6Oefe7XmRDVHjvyt+9SA/qnLtPAfXwc
Y7czMUeIlEn8jQPeqbba/8WQ5/ytQ57eG/9MplkjPjL23Xfb7d1+86HbCuhL
eNvqK1DipqQdQL0BafZrr755Pj17eTpVW7xyu2EDAKcKGR3oRfTLKNehk1oK
l6HBtq4WgyIvjaS2B2Z0Luvl1cuvLmz/8/PXFzPbwv+t8GkcRlN36trx1LUi
z5raP9Ce/zZM622v0rgNAO690n8t6a2ybKoq620r0pvGHJTrTostxQZc7kbS
sSlat2V1q51Jgwew2bwJYY4FDLf5aKuOtlB5vq7Vhn2/v/399397QtEfXhrB
ekULtDKK78+0b49EjIc/yi/YmF/wI/yi6/WTdIKOWyqIG+4eMbN9tCBo4mav
dBQoxwh4aO9ve2JAybKzVUHhWO0IwEfg8Lbth7FjRbFjW64fOF4UBk4Qh54X
xF7sWaEfur4Tx3EQ+77jeLbrh4Hleo7nOI4fW4FtBRFog+V5bhD/fI60UxIb
bfZdUT2MnGZ9bZZ0J93Z1vcZbWGMGl8eKNmpOllrXEThUKPOKhoh+vPG+jyx
7o4drcvxnbrcVszkZsZP9TdtM6qksRSmSGRmwcwsKAaU5piLxjGNcBR5fmir
H3Ka5R4l6uGShv/NV86ZOrhJ75/qNz2p9bStpspAPn6c6HOE51dv4YhqW/6R
BrN+X/DRBNzL3CMpFQod3jM2hUvV9YTJ2fVswkGryPT0phMtfeiYC27kEU1a
0culhu/88H7Zb/2pANuX2peiTef6DDTwsbfofQ/YPxMuunf5umhZLKXevF03
tFmBh9uKbR1rddi11KxUfqrwgsjS20rHxy1bII46WGBmjGm3Nno4BRC6bFuO
0GpE0mgz5EiVlY+jNV0eivgYzzw5VNXr9lp22g7qb7vdACjQldqXeXCFa2ev
lVhl5zyHS1+0bT/anG2o/tjX54d5Xg/h2nC3fMTwCU2O2bhMhe6IDkEM8KHd
GWp2tHqiWEG/93Q2OkwFnnDghBVjv/qn6RRBcrUQqdRpmjZodc6tLmCK1dq4
rD5YxafTX+tTNHs77cPDdXsHnYrl8eOa7MBxzZ9/WpPdc1rzJx7WPHQYYHRY
8yee1WQPOqv5sKOaB/cEDx/VvO+kZrM9L8l2zkveu6CqL7PVb7QF2yHRzZtz
iIXs4BlLmOkb0DgosSQG2Q9K7zQkpJysMonr7isA4wOcHaqyonurcXTKoyM4
plBArzr8Yu+FyFxqC1bvOnRvV1JCPjiAtcsFiTiXUmb6jDukWdcGS83G1UKJ
vN1t7d/n6qH9SJanKgFvNeHVSecRZ2oafNCGtlc0H503IYtR7/sZQ1bWow//
qcOaZJ+GvS8o4muioni1rGfswwdD3RU1XyqpRLd9pPFLhz/TYjroa3k4AVFn
Orcnngyf10UFeiEOpFEk+jDe9hUj5f705rqinfAMcMY17R6yIh9KrHowMuwf
IuhcobOIIfqb05Kmvcn4hRl4o0+qiIHvdBUPpQkFOOpnA5SNDx9kgy0WTm+b
LAGj15pOKa/RFC5BAFUvk1Y8nYsSHY9C0/b8Ubv7alG/U9q/LDh+jQxLfQea
zUdHcIZCsa+qO6neIVXC3FVr0DRzcKF/H0sDYi2HBrfb1agSpDbP1IaUgoai
Hh84Uaddc8ScGd+1d9yD3emkFlZXQatkpZ1ESkitI3p72Ih+v4+yTNJBT0KD
u7lUD8IIqVfd22h0uIbI0bd6cfT01elOIN09OE2oVVb6SaEdVsXht1Qw+IN6
C7/ZSR3JQNVhLPp5FOhFPdO9XrdOiLx2e+S7579ZSsuszXeECTp16U5l/azB
u8aKoh+Dp2eCLHHbFKl2047ygfGhN3VirNnuyBCFUTdvlLmorUpNG+fI8TJw
niWxYV1HBFDRa0t7r712edWI8dI7gdR71+X8cJ8POgJ7eKrqbJ0+ry8H3jQ+
joWUbeuTuvjTT5mOK2g10FPD+ev3+fbFnalfB1EkSJI4RpJOCDbcCNWvjHUG
ow9nmmb3q3mmmfrTp/xy73zxPavKMLETHoW+7zoisdw4sYTte3Zgp07kSTtO
Q0/kwokyP8l9z/dkHONGkqR5LkRoS5nkns9W1Iub+HHkBpafOGGYZp4X25Fn
WzJxvCBJfCeLXJHlaWQFaSpEbIvASvCsZdtJ6sehy5KbE556gS0jP/ZzS6Se
nbmhl0dhFNiuYwWh5cVhZNu+cJwgDywvtPI884NAxjIQMnSTHKJcnnDpO0mC
rj0ZOiKyg8j3RBo5aSgdD7NyRZSnqevYYZpnMomtNBK+iJ1Qhp4tHCvvtrdP
eBAFfpDiv9yxwjDIQwefvS18n/Dc9TPHcsLc9hzfSq0wcRPXd10/dgNHpq6N
8awwEL4XQpmxiCM7s2zXz1NpBSwUbmCLLPAdqBWzkFmcB3YWu4mVh4HnRLYT
J7FM3DxO3TSzklxAXY6wIvQI7WdWrPOih62+OvtJJvAXWVd7dpC7rhfFniPD
UERu7LkicF0La4ArvmvTIjqWmzp24IrQgctFbhRJYdtWZqdRaGs7EJnwcs9J
pJdEuYjdLEvDxLNT4bme40IBnpV4iR1lru3l0vJgWtJKXBtjYuZZruzA+h/+
T9tBmERZKpIEZidhRyLzw9yNcsv2RJJ6wrdFauEfLwmxap4PwaFTJ3R8LIAT
ZtZPsYPEjZI4C8IUc40cCfuOgsSRieXHNmaZ2jBXO7WjIIC1ZJkNM4FZ5AkW
MrBZGkKexM8CJ5B+6mewFuFHXioin/aJ3Di13TxI4zCQsJssTYTvZpETWLYM
QjcUHqbc5ceK1D021Q7aU8OHJz8znmz5oepP2Y7pcrL3jktfeqTf3jkaY46S
3C20DuBWgx/95hEI2l80/gmeFNdml7/b4m+GWMyOgOS+WCoeHA4BE84GmEvx
gN6nwrediqc6jbMXk3pN9ODPhuiv1XE/7G9P1XXP0VkvIxI7Em22G1U7HSpW
NFIjPcTS3Tcp+j1D+kWSJ3wnwh8McPehz95qD/Go0bhjSRvumabwvEC6QQp8
9xLpZsAeOBwiB2JCEAAt4BmhsCXwJHLiDP6chGnkIwIFLHWtFCiaxWlmB76b
ytyDz2citqwo08AE6EKoCOzcl7aTur4fRAhmWSwQRZLUJt+PgzCWQCLklG6e
iCiOZeZSAMpjGSGUMISmVIaRB5jOPRePOUkaIcoEXhBlmY5hgIokSMIcXQaZ
lXtRhPgDQElj13ai1BWID6GThLYLpw8QlhInEk7m+3mICJrlXhAyGcVWHHki
iMLEcdIoSQMLoQNRD8FYgxvgN5N5EidBDORBKAa2xZEvfS/xwwQsMJEORpCZ
kwOvgLqR70d5HnoRYjl0agmHeVmKTtEak/ccR4oQsvtBJkOEZGj1J+AfBg4Q
MaLUcUAAPJliOkCrwIUAbp4DE9MIQQIxTbp+kvkC9z3fF9IWdsxEjOHC2M8Q
g6STR4lr2b4VI4LnAbBOhhIWYkdYVguh34+9xMscGyr2wV2cVLppHmShzGEH
4AaA/ciOYVKIPrmdhrmPPEXga5AJAZvxhZVFnpUnmZvEiEpQRyYyDaD0szMJ
MlFKAE5T2l1DJqzqqw37cKJ/rkFmnz9SP7/x6KNO9vVPJHWZF21d6aTJ/Lxg
Cd/7mva5zIsJc7lY0c9xZEWTrhtVCtFVZv12pMzMtsytXFSrZf+CCeUK9COK
M/bfinbFZ9dSAAA=

-->

</rfc>
