<?xml version="1.0" encoding="UTF-8"?>
  <?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
  <!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.17 (Ruby 2.6.10) -->


<!DOCTYPE rfc  [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">

]>


<rfc ipr="trust200902" docName="draft-wang-ppm-ecdh-psi-00" category="info" tocInclude="true" sortRefs="true" symRefs="true"  submissionType="IETF">
  <front>
    <title abbrev="ECDH-PSI">PSI based on ECDH</title>

    <author initials="Y" surname="Wang" fullname="Yuchen Wang">
      <organization>Ant Group</organization>
      <address>
        <email>tianwu.wyc@antgroup.com</email>
      </address>
    </author>
    <author initials="W" surname="Chang" fullname="Wenting Chang">
      <organization>Ant Group</organization>
      <address>
        <postal>
          <street>Postfach 330440</street>
          <city>Beijing</city>
          <code>D-28359</code>
        </postal>
        <phone>+49-421-218-63921</phone>
        <facsimile>+49-421-218-7000</facsimile>
        <email>bainuan.cwt@antgroup.com</email>
      </address>
    </author>

    <author initials="Y" surname="Lu" fullname="Yufei Lu">
      <organization>Ant Group</organization>
      <address>
        <email>yuwen.lyf@antgroup.com</email>
      </address>
    </author>

    <author initials="C" surname="Hong" fullname="Cheng Hong">
      <organization>Ant Group</organization>
      <address>
        <email>vince.hc@alibaba-inc.com</email>
      </address>
    </author>

    <author initials="J" surname="Peng" fullname="Jin Peng">
      <organization>Ant Group</organization>
      <address>
        <email>jim.pj@antgroup.com</email>
      </address>
    </author>

    <date year="2024" month="November" day="15"/>

    <area>Security Area</area>
    <workgroup>Privacy Preserving Measurement</workgroup>
    <keyword>Internet-Draft</keyword>

    <abstract>


<?line 55?>

<t>
<!--Private Set Intersection (PSI) protocols can facilitate the determination of common elements 
across different parties' datasets without disclosing the individual dataset contents, and have been widely deployed by the industry.-->

This document describes Elliptic Curve Diffie-Hellman Private Set Intersection (ECDH-PSI).
It instantiates the classical Meadows match-making protocol with standard elliptic curves and hash-to-curve methods.
In ECDH-PSI, data items are encoded to points on an elliptic curve, and masked by the private keys of both parties.
After collecting the mutually masked datasets from both parties, a participant computes their intersection and outputs the corresponding original data items as result.




<!--Particularly, ECDH-PSI stands out due to its 
heightened efficiency, robust security measures, scalability, and the absence of a need 
for a trusted intermediary. These attributes have rendered ECDH-PSI across a myriad of contexts, 
including marketing and risk management domains.-->
</t>
</abstract>



  </front>

  <middle>


<?line 69?>

<section anchor="introduction"><name>Introduction</name>


<t>Private Set Intersection (PSI) schemes enable the discovery of shared elements among different parties' datasets without revealing individual data.
They are widely used when there's a need to identify overlapping data elements between two or more parties 
while preserving the confidentiality of each party's original data. 

PSI is one of the most frequently used privacy preserving techniques in business, e.g. it enables a user to detect whether his/her password is leaked without giving away the password to the server <xref target = "MS21"/>, or multiple companies to find their common customers without giving each other their raw data. 

Furthermore, many privacy-respecting systems can leverage PSI schemes to collaborate with other data providers for the purpose of enhancing the privacy of data-exchange processes.
As an example, a service provider who has aggregated attributes from individuals following <xref target = "I-D.ietf-ppm-dap"/><xref target = "draft-irtf-cfrg-vdaf-12"/> can use PSIs to compare its results with another entity without disclosing any attribute that does not owned by the partner.


<!--Based on PSI, the participants could collaborate and extract valuable insights with their data in a privacy-respecting manner, and enhance the privacy of many business sectors such as joint marketing, advertisement, and risk control.-->
</t>

<t>
The classical Diffie-Hellman PSI <xref target = "Meadows86"/> has been published for more than thirty years. 
The academic has also proposed numerous PSI schemes with new functionalities and secure guarantees, such as <xref target = "KKRT16"/><xref target = "CHLR18"/><xref target = "RR22"/>, but DH-PSI is still preferable due to its simplicity and communication efficiency. 
This document describes a widely deployed instance of DH-PSI denoted by Elliptic Curve Diffie-Hellman PSI (ECDH-PSI).
Compared with the finite field parameters used in the original version, elliptic curves are commonly considered to be more efficient and secure <xref target = "IMC"/><xref target = "LOGJAM"/>, and are extensively adopted by recent standards including <xref target = "RFC8031"/><xref target = "RFC8446"/><xref target = "RFC9497"/>.
</t>

<t>
In document describes 2-party ECDH-PSI as a two stage protocol, including a handshake phase and a data exchange phase.
In the handshake phase, the parties agree on the cipher suite and message flow to be used in data exchange phase.
Then, during the data exchange phase, original data elements are masked and transmitted in batches, allowing one or both parties to output the result.
</t>

<section anchor="requirement_terminology"><name> Requirements Terminology</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" format="default" sectionFormat="of" derivedContent="RFC2119"/> <xref target="RFC8174" format="default" sectionFormat="of" derivedContent="RFC8174"/> 
    when, and only when, they appear in all capitals, as shown here.
</t>
</section>

<section anchor = "notations"><name>Data Structures and Notations</name>
<t>
In this document, data structures are defined and encoded according to the conventions laid out in Section 3 of <xref target = "RFC8446"/>.
</t>
<!--t>The following notations are also used throughout this document:</t>
<t> 
<ul spacing="normal" bare="false" empty="false" indent="0">
  <li><tt>a||b</tt>:      The string concatenated by string <tt>a</tt> and <tt>b</tt>.</li>
</ul>
</t-->

<!--
  <t>p_i        The i'th element of h</t>
  <t>ceil(x)    It means to round x to the nearest greater integer</t>
  <t>log2(x)    It means to take logarithm of x with base 2</t>
-->
</section>

</section> <!-- Ending to Introduction -->


<section anchor="background"><name> Background</name>
<t>This section gives brief introductions for elliptic curves and hash-to-curve methods.</t>
<section anchor="background_ec"><name> Elliptic Curves</name>
<t>
An elliptic curve E is defined by a two-variable equation over a finite field F with prime characteristic p larger than three.
Except for a special point called point at infinity, a point on E is a (x,y)-coordinate pair that satisfies the curve equation, where x and y are elements of F.
All distinct points of curve E consists an algebraic group of order n, where the point at infinity is the identity element.
Applications and standards generally use a prime order (sub)group &lt;G&gt; generated by a point G on E.
The order of &lt;G&gt; is denoted by r.
</t>

<t>
This document uses term "addition" to refer to the group operation of a elliptic curve group, meaning two points P and Q can be added together to get a third point R.
Scalar multiplication refers to the operation of adding a point P with itself repeatedly.
This document uses <tt>scalar_mul</tt> to denote the scalar multiplication process. 
It takes a integer x&lt;r and a point P as inputs and outputs the multiplication result Q, which is written by <tt>Q=scalar_mul(P,x)</tt>.
</t>

<t>Many cryptographic applications require the participants to generate elliptic curve key pairs.
Usually, a key pair on refers to a <tt>(PK,sk)</tt> tuple, where <tt>sk</tt> is a integer generated uniformly between 1 and r-1, and <tt>PK=scalar_mul(G,sk)</tt>. 
In the context of ECDH-PSI, only <tt>sk</tt>, namely the private key, is used.
Thus, this document uses the notation <tt>sk=keygen()</tt> to refer to the process of generating a private key on the elliptic curve and omits <tt>PK</tt>.
</t>

</section>

<section anchor="background_hash_ec"><name>Hashing to Elliptic Curves</name>

<t>A hash_to_curve function encodes data of arbitrary length to a point on a elliptic curve.
The encoding process first hashes the byte string to one or more elements of fixed length, and then calculates a point on the curve with the elements using so-called map_to_curve and clear_cofactor functions. 
</t>

<t>
<xref target="RFC9380"/> describes a series of hash_to_curve methods (which are also called "suites") for standard curves such as NIST P-256 and curve25519.
It specifies two encoding types denoted by "encode_to_curve" and "hash_to_curve".
Both encodings can be proven indifferentiable from random oracles (ROs)<xref target = "MRH04"/>, but have different output distributions.
This document only uses "hash_to_curve" encodings which output uniformly random points.
It also uses the notation <tt>P=hash_to_curve(data)</tt> to refer to the process of encoding <tt>data</tt> of arbitrary length to a point <tt>P</tt> on the curve given in the context.
</t>

<t><xref target="RFC9380"/>  requires all uses of the hash_to_curve suites must enforce domain separation with domain separation tags (DSTs).
In particular, DSTs are distinct strings that enable different applications to simulate distinct RO instances with the same hash function.
That is, each application concatenates the DST with its message as the input to hash function.
This document allocates each suit with a unique DST.
For simplicity, DST strings are omitted when writing the process of calculating the hash value of a string.
The notation <tt>tag=hash(str)</tt> means that the hash function actually takes "<tt>dst||str</tt>" as its input rather than <tt>str</tt> alone, where <tt>dst</tt> is the DST string defined for the corresponding hash_to_curve suite.
Similarly, this document also omits DST strings when describing <tt>hash_to_curve</tt> functions, assuming that the corresponding DST has been taken as a part of the input.
</t>

<t>
A suite defined by <xref target="RFC9380"/> includes a series of parameters such as the curve, hash function, and encoding type.
In applications, these suites are very efficient to be referred to, as the included parameters can also be used beyond the scenario of mapping data to curves.
For example, the participants can negotiate a hash_to_curve suite, and then use the curve deduced from the suite for other cryptographic functions such as encryption and key establishment.
</t>

<t>
To extend the usage of hash_to_curve suites, <xref target="RFC9380"/> also describes methods and naming conventions for defining new suites, which enables developers to define suites with new curves and hash functions. 
</t>
</section>
</section> <!-- Conventions and Notation -->


<section anchor = "protocol" pn = "section-3"><!-- Protocol 3 -->
<name>Protocol</name>

<!--t indent = "0">
ECDH-PSI allows two participants, A and B, to compute the intersection of their data sets in a privacy-preserving manner,
ensuring that data does not in the intersection is not revealed.
The intersection result could be obtain by both participants or by only one of them.                                                    
</t-->


<t indent = "0">
We begin with a very brief description on how ECDH-PSI works.
Firstly, the participants, A and B, agree on a EC group &lt;G&gt; along with the hash_to_curve suites, and generate private keys over &lt;G&gt;.
Then, both A and B convert their data to points over &lt;G&gt; and multiply the points with both parties' private keys.  
Next, they exchange the sets of masked elements as sets of EC points, and compute the intersection over these sets.
Finally, they output the original data items corresponding to the intersection of masked sets.</t>
<t indent = "0">
Assume that the parties have agreed on the suite, and generated private keys of <tt>sk_A</tt> and <tt>sk_B</tt>,
an simplified protocol flow of ECDH-PSI is shown by <xref target="fig-1"/>, and explained step-by-step as follows:
<list style="numbers" type="1">
  <li>
  A participant maps its data items to EC points with <tt>hash_to_curve</tt>, 
  and masks the points locally with its own private key by <tt>scalar_mul</tt>.</li>
  <li>
  A and B exchange their locally masked elements.</li>
  <li>
  Upon receiving the masked data from its partner, a participant doubly masks the received points with its private key.</li>
  <li>
  A participant sends the doubly-masked elements back to its partner.
  <!--This step is only executed when the the partner is required to output the PSI result.--></li>
  <li>
  <!-- (Optional) If a participant is required to output the PSI result, -->
  The participant calculates intersection of the set calculated in Step 3 and the set received in Step 4,
  and finally outputs the corresponding original elements.
  </li>
</list>
In order to clarify the statement, this document uses "the first round" to refer to the data exchange process of Step 2, and "the second round" for the process of Step 4.
</t>
<t>
The classical description of ECDH-PSI enables both parties to output PSI results and thus requires two complete rounds (i.e. Step 2 and Step 4) to exchange masked data.
However, many application scenarios require that should only one participant output the intersection and the other one get nothing.
In such scenarios, Step 4 and Step 5 are executed unidirectionally,
where only one party sends doubly-masked data in Step 4 and only the receiver of that message can output the result.
</t>

<t indent = "0">
To output PSI result, the participants should also match the original data items with their corresponding EC points.
In particular, the relationship can be established with unique indexes,
where the original data item and the masked EC point(s) are linked to the same index.
</t>

<figure title="A Simplified Protocol Flow of ECDH-PSI" anchor="fig-1">
<artwork>
<![CDATA[

              A(data_A,sk_A)                  B(data_B,sk_B)
-----------------------------------------------------------------------
Step 1:             |                               |
                    |                               |
            p_A=scalar_mul(sk_A,            p_B=scalar_mul(sk_B,
            hash_to_curve(data_A))          hash_to_curve(data_B))
                    |                               |                              
Step 2:             |                               |
                    |                               |               
                    |-------------p_A-------------->|                                
                    |<------------p_B---------------|
                    |                               |
Step 3:             |                               |
                    |                               |   
       p_AB=scalar_mul(sk_A,p_B)     p_BA = scalar_mul(sk_B,p_A)
                    |                               |
                    |                               |
                    |                               |
Step 4:             |                               |
                    |                               |
                    |-------------p_AB------------->| 
                    |<------------p_BA--------------|
                    |                               |                            
Step 5:             |                               |
                    |                               |
         set_A=intersect(p_AB,p_BA)      set_B=intersect(p_BA,p_AB)
                    |                               |
                    |                               |  
         output match(set_A,data_A)      output match(set_B,data_B)  
]]>
</artwork>
</figure>

<section anchor = "overview">
<name>Overview</name><!-- Overview 3.1 -->

<t indent = "0">
The specification of ECDH-PSI consists of two phases as shown in <xref target="fig-2"/>,
including a handshake phase which negotiates the protocol parameters
and a data exchange phase that performs the operations described by <xref target="fig-1"/>.</t>

<t indent = "0"> 
<ul spacing="normal" bare="false" empty="false" indent="2">
  <li>
  In the handshake phase, a participant, which is denoted by requester, sends a <tt>HandshakeRequest</tt> message to initiate the ECDH-PSI protocol flow.
  This message carries lists of parameters supported by the requester and information about the requester's data.
  Then, the other participant, denoted by responder, selects parameters from the requester's lists, and sends the parameters with its data information in a <tt>HandshakeResponse</tt> message.</li>
  <li>
  Next, in the data exchange phase, both parties perform ECDH-PSI operations with parameters selected in the handshake phase,
  where <tt>EcdhPsiBatch</tt> messages are exchanged.
  The receiver of an <tt>EcdhPsiBatch</tt> replies with a <tt>EcdhPsiBatchResponse</tt> message,
  which tells sender the handling status of last <tt>EcdhPsiBatch</tt> message.
  <!--The number of <tt>EcdhPsiBatch</tt> messages, and the size of each <tt>EcdhPsiBatch</tt> messages are determined by parameters chosen in the handshake phase,
  and the limitation of network or computation resources.
  A participant could also divide its data into multiple messages, and use the <tt>is_last_batch</tt> field to tell its partner whether all data has been sent.
  -->
  </li>
</ul></t>

<t>
This specification enables masked data to be transferred by many batches, as the entire data set may be extremely large and requires numerous resources to be handled with properly.
For example, the size of a data set may exceed the limit of a single package of the underlying network protocol.
The participants can divide the data set to multiple batches and use multiple <tt>EcdhPsiBatch</tt> messages to send them so as to meet the limits of network, storage or computation resources.
</t>

<t>
Besides hash_to_curve suites and data formats, the handshake phase also determines the interaction pattern for data exchange phase. The pattern is decided by the following options:
</t>

<ul spacing="normal" bare="false" empty="false" indent="2">
  <li>The participant that outputs the result.
  If only one participant (for example, A) has the privilege of obtaining the result, then, in the second round, <tt>EcdhPsiBatch</tt> messages will be only sent from B to A.
  </li>
  <li>The maximum size of a single <tt>EcdhPsiBatch</tt> message.
  Upon the determination of maximum batch size, the participants can deduce the number of batch messages sent or received in each round by dividing the size of entire data set with the maximum size.
  </li>
  <li>The order of sending <tt>EcdhPsiBatch</tt> messages. 
  When both participants need to send batch messages in the same round, the requester will always send the first one.
  Then, they can send <tt>EcdhPsiBatch</tt> messages in turn, or let the requester send all batches in sequence before the responder sending its data.
  </li>
</ul>

<!--t>
It is possible that only one party sends doubly-masked data to its partner in the second round-trip,
since both participants may agree on only one of them has the privilege of obtaining the PSI result.
In the case that both participants decide to use multiple <tt>EcdhPsiBatch</tt> messages in the same round-trip, 
</t-->




<figure title="An Overview of the Two-Phase Specification of ECDH-PSI" anchor="fig-2">
<artwork>
<![CDATA[

                  A                                     B 
-----------------------------------------------------------------------
                  |                                     |
Handshake Phase:  |                                     |
                  |----------HandshakeRequest---------->|
                  |<---------HandshakeResponse----------|
                  |                                     |
Data Exchange     |
Phase:            |                                     |
                  |                                     |
                  |-------------EcdhPsiBatch----------->| 
                  |<--------EcdhPsiBatchResponse--------|
                  |                   .                 |
                  |                   .                 |
                  |                   .                 |
                  |-------------EcdhPsiBatch----------->| 
                  |<--------EcdhPsiBatchResponse--------|
                  |                   .                 |
                  |                   .                 |
                  |                   .                 |
]]></artwork></figure>

</section>

<section anchor="handshake"><name>Handshake</name><!-- Handshake 3.2-->
<t indent = "0">
The handshake phase includes a <tt>HandshakeRequest</tt> and a <tt>HandshakeResponse</tt> message. 
The structures of these messages are documented as follows.
</t>

<section anchor="hk-request"><!-- HandshakeRequest 3.2.1-->
<name>HandshakeRequest</name>

<t indent = "0">Structure of <tt>HandshakeRequest</tt>:
</t>
  <sourcecode>
  struct {
    uint8 version = 1;
    ProtocolProposal protocol_param;
    DataProposal data_param;
  } HandshakeRequest;
  </sourcecode>
<t indent = "0"><tt>version</tt>: The version of ECDH-PSI protocol.</t>
<!--t indent="0">
  requester_rank: Requester's rank, which is used to identify the requester during the ECDH-PSI protocol.
  The requester can choose any uint32 value as <tt>requester_rank</tt> except -1.
</t-->
<t indent = "0">
<tt>protocol_param</tt>: ECDH-PSI protocol configurations supported by the requester.</t>
<t indent = "0">
<tt>data_param</tt>: The requester's data information, including its data set size and proposals for data exchange pattern.</t>

<section anchor = "hk-request-protocol"><!-- protocol_proposal 3.2.1.1-->
<name>Protocol Proposal</name>
<t indent = "0">
The <tt>ProtocolProposal</tt> message describes ECDH-PSI protocol parameters supported by the requester.
</t>

<t indent = "0">Structure of this message:</t>
<sourcecode>
enum {
  null (0),
  P256_XMD:SHA-256_SSWU_NU_ (1),
  P384_XMD:SHA-384_SSWU_NU_ (2),
  P521_XMD:SHA-512_SSWU_NU_ (3),
  curve25519_XMD:SHA-512_ELL2_NU_ (4),
  (255)
} HashToCurveSuite

enum { compressed (0), uncompressed  (1), (255) } PointOctetFormat

enum { 
  no_truncation (0), 
  128_bit_truncation (1), 
  (255) 
  } TruncationOption

struct {
  HashToCurveSuite    suites&lt;1..255&gt;;
  PointOctetFormat    point_octet_formats&lt;1..255&gt;;
  TruncationOption    truncation_options&lt;1..255&gt;;
} ProtocolProposal
</sourcecode>

<!--t indent = "0">
supported_versions: The list of supported versions of <tt>ProtocolProposal</tt>.
</t-->
<t indent = "0">
<tt>suites</tt>: The list of supported <tt>HashToCurveSuite</tt> in order of the requester's preference.

<!--The suites except for <tt>curveSM2_XMD:SM3_SSWU_NU_</tt> are defined by <xref target = "RFC9380"/>
The definition of SM2Curve suite is given by <xref target = "cipher_suites"/>\-->.
 <!--following the definitions of hash_to_curve suites by  except for the suite which is defined by .-->
</t> 

<t indent = "0">
Different suites use different DST strings as required by <xref target = "RFC9380"/>.
In particular, ECDH-PSI uses "ECDH-PSI-V&lt;xx&gt;-&lt;suites&gt;" as its DST, where &lt;xx&gt; is a two-digit number indicating the current protocol version as specified by the <tt>version</tt> field of <tt>HandshakeRequest</tt>, and &lt;suites&gt; is the ASCII string representation of the currently adopted suite as defined by <xref target = "RFC9380"/>.
As an example, when both participants agree to use the suite for P256 curve, the corresponding DST is "ECDH-PSI-V01-P256_XMD:SHA-256_SSWU_NU_".
</t>

<!--Each ciphersuite definition contains a elliptic curve group, a hash algorithm and a <tt>hash_to_curve</tt> method as listed in <xref target="cs_list"/>.-->

<t indent = "0">
<tt>point_octet_formats</tt>: The list of octet string formats representing EC points, in the order of requester's preference.
This field enables the participants to weigh the tradeoffs between the costs of communication and computation as discussed by <xref target = "ic_format"/>.

<ul spacing="normal" bare="false" empty="false" indent="2">
<li>
For the curves defined in <xref target = "FIPS186-4"/>, the <tt>PointOctetFormat</tt> values refer to the corresponding compressed/uncompressed formats documented by <xref target="ECDSA"/>. 
</li>
<li>
Points on Curve25519 are always encoded as the input and output of X25519 function defined by Section 5 of <xref target = "RFC7748"/> as 32 byte strings.
Unlike the other curves, the scalar multiplication of curve25519 only relies on one 32-byte coordinate without the cost of decompressing to the (x,y)-coordinate representation, which eliminates the need of making a tradeoff.
</li>
</ul>
</t>
<t indent = "0">
<tt>truncation_options</tt>: 
Whether the requester supports truncation for data transferred in the second round.
The options are listed in the requester's preference.
The truncation could decrease the costs of data transmission and storage, and even accelerate the computation process of intersection, at the expense of a (negligible) false-positive rate.
</t>
<t>
In this document, only 128-bit truncation is allowed, with a restriction that the total number of data items owned by both participants <bcp14>SHOULD</bcp14> be no more than 2^40, ensuring that the probability of collision is smaller than 2^-48. See <xref target = "sc_data_truncation"/> for a detailed discussion.
The requester <bcp14>MUST</bcp14> set this field by a single <tt>no_truncation</tt> option when its data set size has already been equal or larger than 2^40.
</t>
<t>
The truncation process utilizes Key Derivation Functions (KDFs) as many key-exchange protocols that use shared secrets to derive shorter strings which can be seen as uniformly distributed cryptographic keys (e.g., <xref target = "RFC8446"/><xref target = "RFC9382"/>).
In this document, the KDFs are instantiated by Hashed Message Authentication Code (HMAC) <xref target = "RFC2104"/>, along with HMAC-based KDF (HKDF)<xref target = "RFC5869"/>, and the hash function included in hash_to_curve suite.
</t>
<t>
Following <xref target = "RFC5869"/>, a KDF function <tt>kdf()</tt> takes a input keying material <tt>ikm</tt>, a salt value <tt>salt</tt>, an application specific information <tt>info</tt> and output length <tt>len</tt> as its inputs.
Let <tt>mask_data</tt> be the string representation of a doubly-masked element, a participant <bcp14>SHOULD</bcp14> truncate <tt>mask_data</tt> with:
</t>
<artwork name="" type="" align="left" alt="">
truncated_mask_data = kdf(mask_data, nil, "ECDH-PSI", 128)
</artwork>
<t>
In particular, the KDF takes <tt>mask_data</tt> as the input keying material.
It does not take a salt value, uses ASCII string "ECDH-PSI" as the application specification information, and outputs a 128-bit string as the truncation result.
</t>

</section><!-- protocol_proposal 3.2.1.1-->

<section anchor = "hk-request-io"><!-- io_proposal 3.2.1.1-->
<name>Data Proposal</name>
<t indent = "0">
The <tt>data_param</tt> field describes requester's data size and provides supported options on how to exchange <tt>EcdhPsiBatch</tt> messages.</t>
<t indent = "0">
Structure of this message:</t>
<sourcecode>
enum { continuous (0), interactive (1), (255) } BatchMode

enum { both (0), requester (1), responder (2), (255) } OutputMode 

struct{
  BatchMode  supported_batch_modes&lt;1..255&gt;;
  OutputMode supported_output_modes&lt;1..255&gt;;
  uint64     max_batch_size;
  uint64     item_num;
} DataProposal
</sourcecode>

<t indent = "0">
<tt>supported_batch_modes</tt>: The list of interaction patterns supported by the requester in the order of preference.
<tt>BatchMode</tt> describes the message interaction pattern when both parties need to send their data sets with multiple <tt>EcdhPsiBatch</tt> messages in the same round.
<list style = "symbols">
<t>
<tt>continuous</tt>: A participant sends its entire data set with continuous <tt>EcdhPsiBatch</tt> messages.
</t>
<t>
<tt>interactive</tt>: The participants send <tt>EcdhPsiBatch</tt> messages in turn.
If one party has sent all its batch messages before its partner, the partner <bcp14>SHOULD</bcp14> send its messages continuously.
</t>
</list>
When both parties need to send data batches in the same round, the requester <bcp14>SHOULD</bcp14> always send the first <tt>EcdhPsiBatch</tt> message.
</t>

<t indent = "0">
<tt>supported_output_modes</tt>: The list of output modes supported by the requester in the order of its preference, 
where <tt>OutputMode</tt> describes which party has the privilege of obtaining the result.
</t>
<t indent = "0">
The meaning of <tt>OutputMode</tt> is explained as follows:
<list style = "symbols">
<t>
<tt>both</tt>: Both parties output the intersection result, which means <tt>EcdhPsiBatch</tt> are sent mutually in the second round.
</t>
<t>
<tt>requester</tt>: Only the requester outputs PSI result, which means only the responder sends message batches in the second round.
</t>
<t>
<tt>responder</tt>: Only the responder outputs PSI result, which means only the requester sends message batches in the second round.
</t>
</list>
</t>

<t indent = "0">
<tt>max_batch_size</tt>: The maximum byte size of a single <tt>EcdhPsiBatch</tt> message allowed by the requester.
That is, the requester will not send a batch message beyond this limit, and it cannot receive a batch message having larger size.
The requester <bcp14>SHOULD</bcp14> decide the value of this field comprehensively according to its hardware/software configuration and environment.
<!--To avoid the case that a <tt>EcdhPsiBatch</tt> message exceeds the resource limits, the requester <bcp14>SHOULD</bcp14> calculate this field with respect to the maximum possible EC point size, that is, the EC points are encoded without compression and truncation option is disabled.-->
</t>
<t indent = "0">
<tt>item_num</tt>: The total number of requester's data items.
</t>
</section><!-- io_proposal 3.2.1.1-->

</section><!-- HandshakeRequest 3.2.1-->

<section anchor="hk-response"><!-- HandshakeResponse 3.2.2-->
<name>HandshakeResponse</name>

<t indent = "0">
The responder sends <tt>HandshakeResponse</tt> to reply to a <tt>HandshakeRequest</tt> message.
It includes selected parameters and the responder's data information.
</t>
<t indent = "0">
Structure of this message:</t>
<sourcecode>

enum {
  success(0),
  generic_error         (0x01),
  unsupported_version   (0x02)
  invalid_request       (0x03),
  out_of_resource       (0x04),
  unsupported_parameter (0x05),
  (0xFF)
} HandshakeStatus

struct {
  HandshakeStatus status;
  ProtocolResult protocol_param;
  DataResult data_param;
} HandshakeResponse;
</sourcecode>

<t indent = "0">
<tt>status</tt>: Indicating the status of handshake. The meanings of error statuses are listed as follows:
</t>
<list style = "symbols">
<t>
<tt>generic_error</tt>: The error cannot be categorized to the rest error statuses defined by <tt>HandshakeStatus</tt>.</t>
<t><tt>unsupported_version</tt>: The responder does not support the ECDH-PSI protocol version given by <tt>version</tt>.</t>
<t><tt>invalid_request</tt>: The responder cannot parse the request correctly.
The message may be in wrong format and cannot be parsed as a normal <tt>HandshakeRequest</tt> message.
</t>
<t><tt>out_of_resource</tt>: The responder does not have enough resource to handle the ECDH-PSI process following to the options provided by the requester.</t>
<t><tt>unsupported_parameter</tt>: The responder rejects all options proposed by one of the suggested option lists included in <tt>HandshakeRequest</tt>.</t>
</list>
<t>
The responder <bcp14>MUST</bcp14> ignore all options or parameters that it cannot recognize when parsing the <tt>HandshakeRequest</tt> message.
If one of the suggested option lists is filled with unrecognized parameters, it <bcp14>SHOULD</bcp14> reply with a <tt>HandshakeResponse</tt> carrying <tt>unsupported_parameter</tt>.
</t>

<t>
Upon receiving a <tt>HandshakeResponse</tt> message without <tt>success</tt> status, the requester <bcp14>MUST</bcp14> ignore the other fields included in this message.
</t>

<t indent = "0">
<tt>protocol_param</tt>: The protocol parameter selected by the responder, including the hash_to_curve suite, EC point string format and truncation option.
</t>

<t indent = "0">
<tt>data_param</tt>: This message includes the data exchange pattern selected by the responder and the size of responder's dataset.</t>

<section anchor = "hk-result-protocol"><!-- protocol_result 3.2.2.1 -->
<name>Protocol Result</name>

<t indent = "0">
The structure of <tt>ProtocolResult</tt> is defined as follows:
</t>

<sourcecode>
struct {
  HashToCurveSuite    suite;
  PointOctetFormat    point_octet_format;
  TruncationOption    truncation_option;
} ProtocolResult;
</sourcecode>

<t indent = "0">
<tt>suite</tt>: The hash_to_curve suite selected by the responder.</t>

<t indent = "0" >
<tt>point_octet_format</tt>: The format of EC point octet string chosen by the responder.
</t>

<t indent = "0">
<tt>truncation_option</tt>: The truncation option selected by the responder.
When deciding the field, the responder <bcp14>SHOULD</bcp14> consider the sum of both participants' dataset sizes.
If the sum is larger than 2^40, truncation <bcp14>MUST</bcp14> no be used, which means the responder <bcp14>MUST</bcp14> set this field by <tt>no_truncation</tt>.
</t>

</section>

<section anchor = "hk-result-io"><!-- io_result 3.2.2.2 -->
<name>Data Result</name>

<t indent = "0" pn = "section-3.2.2.2-1">
The structure of <tt>DataInfoResult</tt> is defined as follows:
</t>

<sourcecode pn = "section-3.2.2.2-2">
struct  {
  BatchMode   batch_mode;
  OutputMode  output_mode;
  uint64      max_batch_size;
  uint64      item_num;
} DataInfoResult;
</sourcecode>

<t indent = "0" pn = "section-3.2.2.2-3">
<tt>batch_mode</tt>: The <tt>BatchMode</tt> selected by responder.</t>

<t indent = "0" pn = "section-3.2.2.2-4">
<tt>output_mode</tt>: The <tt>OutputMode</tt> selected by responder.</t>

<t indent = "0" pn = "section-3.2.2.2-5">
<tt>max_batch_size</tt>: The maximum size of a <tt>EcdhPsiBatch</tt> message, which <bcp14>SHOULD NOT</bcp14> be larger than the <tt>max_batch_size</tt> given by the requester.</t>

<t indent = "0" pn = "section-3.2.2.2-6">
<tt>item_num</tt>: The size of responder's dataset.</t>

</section>

</section><!-- HandshakeResponse 3.2.2 -->

</section><!-- Handshake 3.2 -->

<section anchor="data_exchange"><!-- Evaluation 3.3 -->
<name>Data Exchange</name>

<t indent = "0" pn = "section-3.3-1">
The data exchange phase consists of two rounds.
In each round, a participant may send or receive multiple <tt>EcdhPsiBatch</tt> messages.
Upon receiving a <tt>EcdhPsiBatch</tt> and handling the data properly, the participant <bcp14>SHOULD</bcp14> respond with a <tt>EcdhPsiBatchResponse</tt> message,
indicating its partner that it is ready to receive the next <tt>EcdhPsiBatch</tt> message.
</t>

<section anchor = "data_exchange_batch">
<name>EcdhPsiBatch</name>
<t indent = "0" pn = "section-3.3.1-1">
The structure of <tt>EcdhPsiBatch</tt> is defined as follows:</t>

<sourcecode pn = "section-3.3.1-2">
enum { transmit(0), retransmit(1), fatal_error(2), (255)} BatchStatus

struct {
  uint64 index;
  opaque octet;
} ECPointOctet;

struct {
  BatchStatus   status;
  uint32        batch_type;
  uint64        batch_index;
  uint64        batch_count;
  uint32        is_last_batch;
  ECPointOctet  data&lt;1..2^64-1&gt;;
} EcdhPsiBatch;
</sourcecode>

<t indent = "0">
<tt>status</tt>: Status of current batch message. Values of this field are explained as follows:
</t>
<list style = "symbols">
<t> <tt>transmit</tt>: It is a normal batch message which has not been transmitted before.
</t>
<t> <tt>retransmit</tt>: This message has been transmitted, but it is re-transmitted due to the receiver's request.
A batch message may be retransmitted several times before it is properly handled by the receiver.
For example, the receiver may need a relative long time to prepare the storage resource, and require the sender to re-send the batch until it has enough space.  
</t>
<t><tt>fatal_error</tt>: The sender of this batch message cannot continue the ECDH-PSI protocol procedure due to some fatal errors.
The receiver <bcp14>MUST</bcp14> ignore the other fields included in the current <tt>EcdhPsiBatch</tt> message and terminate the PSI process.
<vspace/>
Such fatal error may occur in the handshake phase or data exchange phase.
For example, if the responder sends a <tt>HandshakeRespond</tt> message with parameters unsupported by the requester, the requester should construct and send a <tt>EcdhPsiBatch</tt> message carrying <tt>fatal_error</tt> status so as to terminate the process.
</t>
</list>

<t indent = "0"> 
<tt>batch_type</tt>: This field indicates the mask status of current batch.
That is, value "1" stands for that the data included in the current batch are only masked by the owner's private key, and "2" means the data has been doubly-masked with both participants' private keys. 
</t>
<!--Values of this field are explained as follows:
</t>
<list style = "symbols">
<t>
single: The EC points are only masked by the sender's private key.</t>
<t>
double: The points in this message are masked by the private keys of both participants.</t>
</list>-->

<t indent = "0">
<tt>batch_index</tt>: The index of current <tt>EcdhPsiBatch</tt> message, which is an incremental counter starting with "1".
The participant <bcp14>SHOULD</bcp14> use independent counters for different rounds and protocol runs.
For example, if participant A needs to send dataset p_A in the first round by 10 batches, and sends p_AB in the second round by 5 batches, it should use <tt>batch_index</tt> from 1 to 10 for the first round, and 1 to 5 for the second.
<!-- A participant <bcp14>MAY</bcp14> divide its data items in many batches and use different <tt>batch_index</tt> to distinguish them.-->
</t>
<t indent = "0">
<tt>batch_count</tt>: Number of EC points included in the current <tt>EcdhPsiBatch</tt> message.
</t>
<t indent = "0">
<tt>is_last_batch</tt>: Indicating whether this batch is the last one, where "1" means the batch is the last one from the sender in current round, and "0" for there exists subsequent batches.
</t>
<t indent = "0">
<tt>data</tt>: 
This field carries multiple EC points with <tt>ECPointOctet</tt>, which number is specified by the <tt>batch_count</tt> field.
Each <tt>ECPointOctet</tt> structure includes an unique <tt>index</tt> allocated by the owner of the corresponding original data, and the encoded octet string.
</t>

<t>The purpose of <tt>index</tt> is to associate the original data item with the (doubly)-masked EC points, such that the participant can match its dataset with the intersection of masked datasets.
The values of <tt>index</tt> are generated by the owner of data so as to identify each data item uniquely. 
When masking the data from its partner, a participant <bcp14>MUST</bcp14> reserve the <tt>index</tt> for every record.
<xref target = "app_con_index"/> gives more discussions on the implementation and maintenance of such indexes.
</t>
<t>
The content of each octet string is determined by the selected hash_to_curve suite, octet format and truncation option.
In the first round, the receiver <bcp14>SHOULD</bcp14> decode the octet strings with the configurations negotiated in the handshake phase in order to mask the data provided by the sender.
However, in the second round where masking is not required, the receiver <bcp14>SHOULD</bcp14> treat the contents as octet strings rather than decode them to EC points, as such strings are enough for computing the intersection.
<!--The EC point data to be transferred in the current message, which number is specified by the <tt>batch_count</tt> field.
The format of each EC point octet string is determined by the selected EC group, point octet string format and the truncation option.
--> 
</t>
</section><!-- 3.3.1 EcdhPsiBatch-->

<section>
<name>EcdhPsiBatchResponse</name>
<t indent = "0">
The structure of <tt>EcdhPsiBatchResponse</tt> is defined as follows: </t>
<sourcecode>
enum { 
  success (0),
  retransmit (1),
  fatal_error (2),
  (255)
} BatchResponseStatus;

struct {
  BatchResponseStatus status;
  uint64 batch_index;
} EcdhPsiBatchResponse;
</sourcecode>

<t indent = "0">
<tt>status</tt>: Indicating whether the <tt>EcdhPsiBatch</tt> message identified by <tt>batch_index</tt> has been handled properly.
Values of this field are explained as follows:
</t>
<list style = "symbols">
<t>
<tt>success</tt>: The <tt>EcdhPsiBatch</tt> message has been handled in a proper way.
Upon receiving a response with this status, the sender of <tt>EcdhPsiBatch</tt> can send the subsequence batch
or prepare to receive the <tt>EcdhPsiBatch</tt> message from its partner.</t>
<t>
<tt>retransmit</tt>: Upon receiving <tt>retransmit</tt>, the participant <bcp14>MUST</bcp14> re-send the  <tt>EcdhPsiBatch</tt> message identified by <tt>batch_index</tt>.</t>
<t>
<tt>fatal_error</tt>: The ECDH-PSI process meets some fatal error such that both the participants <bcp14>MUST</bcp14> terminate the current session, and discard all data received.
</t>
</list>

</section><!-- 3.3.2 EcdhPsiBatchResponse-->

</section><!-- Evaluation 3.3 -->
</section><!-- Protocol 3 -->




<section anchor="ic"><name>Implementation Considerations</name>

<section anchor="ic_format"><!-- EC Point Format 3.3.1 -->
<name>The Representation of EC Point</name>
<!--t indent = "0">
The representation of SM2 curve point <bcp14>SHOULD</bcp14> follow <xref target="GBT-32918.1-2016"/>, which can be one of "uncompressed", "compressed" or "hybrid".
</t>
<t indent = "2"> 
- Uncompressed: The representation is defined by 0x04||X||Y, where X (resp. Y) is the binary representation of the x (resp. y) coordinate which has a length of 32 bytes.
</t>
<t indent = "2">
- Compressed: If the least significant bit of y coordinate is 0, the representation is defined by 0x02||X.
Otherwise, the representation is 0x03||X.
</t>
<t indent = "2">
- Hybrid: The representation is 0x06||X||Y if the least significant bit of y coordinate is 0, and 0x07||X||Y if the bit is 1.
</t>
<t indent = "0">
The receiver of such a representation can use the first byte to identify its type and decode the representation following the type.
</t>

<t indent = "0">
For curve25519, the representation of EC point is the binary representation of the x coordinate, which is sufficient for <tt>scalar_mul</tt> <xref target="CZZDL24"/>.
</t-->
<t indent = "0">
When deciding the point encoding format for the elliptic curves expect curve25519, the participants should consider the aspects of bandwidth, storage and computation comprehensively.
Compressed point format could decrease the costs of transmission and storage,
but it also needs more computation resources to "decompress" the point.
The "decompress" process may be as costly as scalar multiplication <xref target = "CZZDL24"/>.
Uncompressed format requires more storage spaces and needs more time to transmit, 
but the participant can perform scalar multiplications without extra effort to recover the points.
</t>

<t indent = "0">
For example, when both parties are deployed in the same data center and linked with a high-bandwidth local area network (LAN), they can choose to use the uncompressed format to achieve better performance.
</t>

<t indent = "0">
As another example, the parties may be deployed in geographically separated data centers connected with low bandwidth wide area network (WAN), and equipped with high-end computation acceleration devices such as Graphics Processing Units (GPUs). In this case, the computation resource may not be the bottleneck, and the participants can choose the compress format to minimize the costs of data transmission.
</t>
</section>


<section anchor = "app_con_index">
<name>The Management of Index</name>
<t indent = "0">
A <bcp14>RECOMMENDED</bcp14> method of maintaining indexes is storing the records with a database table and use the row numbers or prime keys as indexes.
The intersection result can be matched with original data items by a simple join operation.
The participant could also design a different indexing mechanism on its own, as long as guaranteeing its uniqueness.
</t>
<t>
This document uses explicit indexes to identify data items rather than treats the order of records as "implicit" indexes. 
Compare with the implicit counterpart, explicit indexes can be efficiently created and maintained by modern databases, and do not require the participants to implement extra logic to preserve the order of records.
</t>
<t>
When masking the EC points from its partner, a participant <bcp14>MUST</bcp14> send the doubly-masked data with correct indexes.
To achieve this, it keeps the indexes of each data items received in the first round, masks the records with its private key, and associates the masked records with the same indexes.
These operations can also be implemented easily with database operations by viewing the received records and masked records as columns in the same table, which enables them to be linked naturally via the primary key.
</t>
<!--t indent = "0">
The protocol flow of ECDH-PSI calculates the intersection of doubly-evaluated points, and requires the participant to map the points back to the original data in order to output correct results.  
That is, a participant <bcp14>SHOULD</bcp14> create a mapping table describing the relationship between original data items and doubly-evaluated points. 
</t>
<t>
An example of mapping method is described as follows:
<list style="numbers" type="1" >
  <t>The participant records the pairs of original data items and corresponding evaluated points.
  </t>
  <t>In the doubly-evaluation process, its partner keeps the order of points during data transmission and evaluation,
  such that the participant can map original data to the correct doubly-evaluated point. 
  </t>
  <t>The participant maps the intersection of evaluated data to the original data, and outputs the intersection result.
  </t>
</list>
</t-->
</section>

<section anchor = "ic_more_suite">
<name>Support More hash_to_curve Suites</name>
<t>
Participants can negotiate hash_to_curve suites besides the ones listed by <xref target = "hk-request-protocol"/>.
They can use other suites defined by <xref target = "RFC9380"/>, or use a self-defined suite following the syntax and convention given by Section 8.9 and 8.10 of <xref target = "RFC9380"/>.
</t>
<t> As an example, this document next defines a hash_to_curve suite for the ShangMi(SM) curve and cryptography algorithms.
The SM algorithms are becoming mandatory in China, and have been accepted by international standards such as <xref target = "ISO-SM2"/>, <xref target = "ISO-SM3"/> and <xref target = "RFC8998"/>.
</t>
<t>
The new suite, denoted by curveSM2_XMD:SM3_SSWU_RO, encodes data to points on the so-called curveSM2<xref target="GBT.32918.5-2017" format="default" sectionFormat="of" derivedContent="GBT.32918.5-2017"/> with SM3 hash algorithm<xref target = "GBT.32905-2016"/>, and reuses the expand_message_xmd and Simplified Shallue-van de Woestijne-Ulas (SSWU) methods for message expansion and mapping.
</t>

<t>
In particular, curveSM2_XMD:SM3_SSWU_RO_ is defined as follows:</t>

 <ul spacing="normal" bare="false" empty="false" indent="3" >
  <li >encoding type: hash_to_curve</li>
  <li>
    <t indent="0" >E: y^2 = x^3 + A * x + B, where
    </t>
    <ul spacing="normal" bare="false" empty="false" indent="3">
      <li >A = -3</li>
      <li >B = 0x28e9fa9e9d9f5e344d5a9e4bcf6509a7f39789f515ab8f92ddbcbd414d940e93</li>
    </ul>
  </li>
  <li>p: 2^256-2^224-2^96+2^64-1</li>
  <li>m: 1</li>
  <li>k: 128</li>
  <li>expand_message: expand_message_xmd (Section 5.3.1 of <xref target = "RFC9380"/>)</li>
  <li>H: SM3</li>
  <li>L: 48</li>
  <li>f: SSWU method (Section 6.6.2 of of <xref target = "RFC9380"/>)</li>
  <li>Z: -9</li>
  <li>h_eff: 1</li>
</ul>
<t>
The value Z is calculated by the sage script given by Appendix H.2 of <xref target = "RFC9380"/> with the p, A and B parameters of curveSM2.
</t>
<t>
The participants <bcp14>SHOULD</bcp14> agree on the meaning of <tt>HashToCurveSuite</tt> values.
In this document, suite curveSM2_XMD:SM3_SSWU_RO_ is identified as follows:
<sourcecode>
enum {
  null                              (0),
  ... // (1) to (4) follow section 3.2.1.1
  curveSM2_XMD:SM3_SSWU_RO_         (5),
  ... // other hash_to_curve suites
  (255)
} HashToCurveSuite;
</sourcecode>
</t>

</section>

</section> <!-- Cryptographic 6.3-->

<section anchor = "sc">
<name>Security Considerations</name>
<section anchor="sc_data_truncation"><name>Data Truncation </name>
<t>
This section provides a detailed discussion on the truncation mechanism presented in this document.
</t>
<t>
The truncation, undoubtedly, will raise the probability of message collision.
That is, two different data item may be mapped to the same string after the procedures of masking and truncation by coincidence.
The collision may happen across the datasets owned by different participants, which causes a false-positive case that two different records are matched by PSI, or happen in the same dataset.
The later situation may also lead to a false-positive case.
To be more specific, consider a participant A has two different data items data_X and data_Y which are mapped to the same record mask_data_XY.
Its partner, say B, also has record data_X which is mapped to mask_data_XY.
Finally, A outputs both data_X and data_Y as the result of PSI, as it cannot distinguish which one matches the record of mask_data_XY.
</t>
<t>
To avoid such false-positive case, we have to consider the collision probability with respect to the sum number of data items owned by A and B.
Such probability can be computed with the well-known birthday paradox bound.
Let <tt>n</tt> be the number of sampling and <tt>d</tt> be the output space, the probability of collision can be approximately computed with: 
</t>
<artwork>
p(n,d)=1-e^(-n(n-1)/2d)
</artwork>

<t>
This document uses a truncated length of 128 bit, which means <tt>d=2^128</tt>.
For different <tt>n</tt>, which is the sum size of records, the probability are calculated as follows:
</t>

<list style = "symbols">
<t>If <tt>n=2^50</tt>, <tt>p(2^50, 2^128) = 2^-29</tt></t>
<t>If <tt>n=2^45</tt>, <tt>p(2^45, 2^128) = 2^-33</tt></t>
<t>If <tt>n=2^41</tt>, <tt>p(2^41, 2^128) = 2^-47</tt></t>
<t>If <tt>n=2^40</tt>, <tt>p(2^40, 2^128) = 2^-49</tt></t>
<t>If <tt>n=2^39</tt>, <tt>p(2^39, 2^128) = 2^-51</tt></t>
</list>
<t>
That is, if the number of records is less than 2^40, the probability of false-positive will be smaller than 2^-48.
The participant can also decide the truncation option by calculating the collision probability, and only use truncation when they both agree that the probability is acceptable.
</t>
</section> <!-- Cryptographic 6.3.3-->
</section>

<section anchor = "iana_c">
<name>IANA Considerations</name>
<t>This document has no IANA actions.</t>
</section>

</middle>

<back>


<references title='Normative References' anchor="sec-normative-references">

<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="RFC2104" target="https://www.rfc-editor.org/info/rfc2104" quoteTitle="true" derivedAnchor="RFC2104">
<front>
  <title>HMAC: Keyed-Hashing for Message Authentication</title>
  <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
  <author fullname="M. Bellare" initials="M." surname="Bellare"/>
  <author fullname="R. Canetti" initials="R." surname="Canetti"/>
  <date month="February" year="1997"/>
  <abstract>
    <t indent="0">This document describes HMAC, a mechanism for message authentication using cryptographic hash functions. HMAC can be used with any iterative cryptographic hash function, e.g., MD5, SHA-1, in combination with a secret shared key. The cryptographic strength of HMAC depends on the properties of the underlying hash function. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind</t>
  </abstract>
</front>
<seriesInfo name="RFC" value="2104"/>
<seriesInfo name="DOI" value="10.17487/RFC2104"/>
</reference>

<reference anchor="RFC5869" target="https://www.rfc-editor.org/info/rfc5869" quoteTitle="true" derivedAnchor="RFC5869">
  <front>
    <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
    <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
    <author fullname="P. Eronen" initials="P." surname="Eronen"/>
    <date month="May" year="2010"/>
    <abstract>
      <t indent="0">This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications. The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions. This document is not an Internet Standards Track specification; it is published for informational purposes.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="5869"/>
  <seriesInfo name="DOI" value="10.17487/RFC5869"/>
</reference>

<reference anchor="RFC9380">
  <front>
    <title>Hashing to Elliptic Curves</title>
    <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
    <author fullname="S. Scott" initials="S." surname="Scott"/>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <author fullname="R. S. Wahby" initials="R. S." surname="Wahby"/>
    <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
    <date month="August" year="2023"/>
    <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>
</reference>

<!--reference anchor="GBT-32918.2-2016">
  <front>
    <title>Information security technology  Public key cryptographic algorithm
              SM2 based on elliptic curves  Part 2: Digital signature algorithm</title>
    <author fullname="Standardization Administration of China" initials="" surname="Standardization Administration of China"/>
    <date month="March" year="2017"/>
        <abstract>
      <t> &lt;http://www.gmbz.org.cn/upload/2018-07-24/1532401673138056311.pdf&gt;.</t>
    </abstract>
  </front>
</reference-->

<reference anchor="GBT.32905-2016" target="http://www.gmbz.org.cn/upload/2018-07-24/1532401392982079739.pdf" quoteTitle="true" derivedAnchor="GBT.32905-2016">
  <front>
    <title>Information security technology --- SM3 cryptographic hash algorithm</title>
    <author>
      <organization showOnFrontPage="true">Standardization Administration of China</organization>
    </author>
    <date year="2017" month="March"/>
  </front>
  <seriesInfo name="GB/T" value="32905-2016"/>
</reference>


<!--reference anchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author fullname="S. Bradner" initials="S." surname="Bradner"/>
    <date month="March" year="1997"/>
    <abstract>
      <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
    </abstract>
  </front>
  <seriesInfo name="BCP" value="14"/>
  <seriesInfo name="RFC" value="2119"/>
  <seriesInfo name="DOI" value="10.17487/RFC2119"/>
</reference-->

<!-- reference anchor="RFC3986">
  <front>
    <title>Uniform Resource Identifier (URI): Generic Syntax</title>
    <author fullname="T. Berners-Lee" initials="T." surname="Berners-Lee"/>
    <author fullname="R. Fielding" initials="R." surname="Fielding"/>
    <author fullname="L. Masinter" initials="L." surname="Masinter"/>
    <date month="January" year="2005"/>
    <abstract>
      <t>A Uniform Resource Identifier (URI) is a compact sequence of characters that identifies an abstract or physical resource. This specification defines the generic URI syntax and a process for resolving URI references that might be in relative form, along with guidelines and security considerations for the use of URIs on the Internet. The URI syntax defines a grammar that is a superset of all valid URIs, allowing an implementation to parse the common components of a URI reference without knowing the scheme-specific requirements of every possible identifier. This specification does not define a generative grammar for URIs; that task is performed by the individual specifications of each URI scheme. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="STD" value="66"/>
  <seriesInfo name="RFC" value="3986"/>
  <seriesInfo name="DOI" value="10.17487/RFC3986"/>
</reference-->

<!-- reference anchor="RFC4086">
  <front>
    <title>Randomness Requirements for Security</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <author fullname="J. Schiller" initials="J." surname="Schiller"/>
    <author fullname="S. Crocker" initials="S." surname="Crocker"/>
    <date month="June" year="2005"/>
    <abstract>
      <t>Security systems are built on strong cryptographic algorithms that foil pattern analysis attempts. However, the security of these systems is dependent on generating secret quantities for passwords, cryptographic keys, and similar quantities. The use of pseudo-random processes to generate secret quantities can result in pseudo-security. A sophisticated attacker may find it easier to reproduce the environment that produced the secret quantities and to search the resulting small set of possibilities than to locate the quantities in the whole of the potential number space.</t>
      <t>Choosing random quantities to foil a resourceful and motivated adversary is surprisingly difficult. This document points out many pitfalls in using poor entropy sources or traditional pseudo-random number generation techniques for generating such quantities. It recommends the use of truly random hardware techniques and shows that the existing hardware on many systems can be used for this purpose. It provides suggestions to ameliorate the problem when a hardware solution is not available, and it gives examples of how large such quantities need to be for some applications. 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="106"/>
  <seriesInfo name="RFC" value="4086"/>
  <seriesInfo name="DOI" value="10.17487/RFC4086"/>
</reference -->

<!--reference anchor="RFC4648">
  <front>
    <title>The Base16, Base32, and Base64 Data Encodings</title>
    <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
    <date month="October" year="2006"/>
    <abstract>
      <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="4648"/>
  <seriesInfo name="DOI" value="10.17487/RFC4648"/>
</reference-->

<!--reference anchor="RFC6234" target="https://www.rfc-editor.org/info/rfc6234" quoteTitle="true" derivedAnchor="RFC6234">
  <front>
    <title>US Secure Hash Algorithms (SHA and SHA-based HMAC and HKDF)</title>
    <author fullname="D. Eastlake 3rd" initials="D." surname="Eastlake 3rd"/>
    <author fullname="T. Hansen" initials="T." surname="Hansen"/>
    <date month="May" year="2011"/>
    <abstract>
      <t indent="0">Federal Information Processing Standard, FIPS</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="6234"/>
  <seriesInfo name="DOI" value="10.17487/RFC6234"/>
</reference-->

<reference anchor="GBT.32918.5-2017" target="http://www.gmbz.org.cn/upload/2018-07-24/1532401863206085511.pdf" quoteTitle="true" derivedAnchor="GBT.32918.5-2017">
  <front>
    <title>Information security technology --- Public key cryptographic algorithm SM2 based on elliptic curves --- Part 5: Parameter definition</title>
    <author>
      <organization showOnFrontPage="true">Standardization Administration of the People's Republic of China</organization>
    </author>
    <date year="2017" month="December"/>
  </front>
  <seriesInfo name="GB/T" value="32918.5-2017"/>
</reference>

<reference anchor="FIPS186-4" target="https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.186-4.pdf" quoteTitle="true" derivedAnchor="FIPS186-4">
  <front>
    <title>Digital Signature Standard (DSS)</title>
    <author>
      <organization showOnFrontPage="true">National Institute of Standards and Technology (NIST)</organization>
    </author>
    <date year="2013" month="July"/>
  </front>
  <seriesInfo name="FIPS" value="186-4"/>
  <seriesInfo name="DOI" value="10.6028/NIST.FIPS.186-4"/>
</reference>

<reference anchor="RFC7748" target="https://www.rfc-editor.org/info/rfc7748" quoteTitle="true" derivedAnchor="RFC7748">
  <front>
    <title>Elliptic Curves for Security</title>
    <author fullname="A. Langley" initials="A." surname="Langley"/>
    <author fullname="M. Hamburg" initials="M." surname="Hamburg"/>
    <author fullname="S. Turner" initials="S." surname="Turner"/>
    <date month="January" year="2016"/>
    <abstract>
      <t indent="0">This memo specifies two elliptic curves over prime fields that offer a high level of practical security in cryptographic applications, including Transport Layer Security (TLS). These curves are intended to operate at the ~128-bit and ~224-bit security level, respectively, and are generated deterministically based on a list of required properties.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="7748"/>
  <seriesInfo name="DOI" value="10.17487/RFC7748"/>
</reference>

<reference anchor="RFC2119" target="https://www.rfc-editor.org/info/rfc2119" quoteTitle="true" derivedAnchor="RFC2119">
  <front>
    <title>Key words for use in RFCs to Indicate Requirement Levels</title>
    <author initials="S." surname="Bradner" fullname="S. Bradner">
      <organization showOnFrontPage="true"/>
    </author>
    <date year="1997" month="March"/>
    <abstract>
      <t indent="0">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" target="https://www.rfc-editor.org/info/rfc8174" quoteTitle="true" derivedAnchor="RFC8174">
  <front>
    <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
    <author initials="B." surname="Leiba" fullname="B. Leiba">
      <organization showOnFrontPage="true"/>
    </author>
    <date year="2017" month="May"/>
    <abstract>
      <t indent="0">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 title='Informative References' anchor="sec-informative-references">

<reference anchor = "Meadows86" target = "https://doi.org/10.1109/SP.1986.10022" quoteTitle="true" derivedAnchor="Meadows86">
  <front>
  <title>A More Efficient Cryptographic Matchmaking Protocol for Use in the Absence of a Continuously Available Third Party</title>
  <author surname = "Meadows" fullname = "Catherine Meadows">
    <organization showOnFrontPage = "true">Naval Research Laboratory</organization>
  </author>
  </front>
  <refcontent>
  1986 IEEE Symposium on Security and Privacy
  </refcontent>
</reference>

<reference anchor = "IMC" target = "" quoteTitle="true" derivedAnchor="IMC">
  <front>
    <title>Introduction to Modern Cryptography, Third Edition</title>
    <author surname = "Katz" fullname = "Jonathan Katz">
      <organization showOnFrontPage = "true">University of Maryland</organization>
    </author>
    <author surname = "Lindell" fullname = "Yehuda Lindell">
      <organization showOnFrontPage = "true">Bar-Ilan University</organization>
    </author>
  </front>
</reference>

<reference anchor="MRH04" target="https://doi.org/10.1007/978-3-540-24638-1_2" quoteTitle="true" derivedAnchor="MRH04">
  <front>
    <title>Indifferentiability, Impossibility Results on Reductions, and Applications to the Random Oracle Methodology</title>
    <author initials="U." surname="Maurer" fullname="Ueli Maurer">
      <organization showOnFrontPage="true">ETH Zurich</organization>
    </author>
    <author initials="R." surname="Renner" fullname="Renato Renner">
      <organization showOnFrontPage="true">ETH Zurich</organization>
    </author>
    <author initials="C." surname="Holenstein" fullname="Clemens Holenstein">
      <organization showOnFrontPage="true">ETH Zurich</organization>
    </author>
    <date year="2004" month="February"/>
  </front>
  <refcontent>In TCC 2004: Theory of Cryptography, pages 21-39</refcontent>
  <seriesInfo name="DOI" value="10.1007/978-3-540-24638-1_2"/>
</reference>

<reference anchor = "LOGJAM" target = "https://doi.org/10.1145/2810103.2813707" 
  quoteTitle="true" derivedAnchor="LOGJAM" >
  <front>
    <title>Imperfect Forward Secrecy: How Diffie-Hellman Fails in Practice</title>
    <author surname = "Adrian" fullname = "David Adrian">
      <organization showOnFrontPage = "true">University of Michigan</organization>
    </author>
    <author surname = "Bhargavan" fullname = "Karthikeyan Bhargavan">
      <organization showOnFrontPage = "true">INRIA Paris-Rocquencourt</organization>
    </author>
    <author surname = "Durumeric" fullname = "Zakir Durumeric">
      <organization showOnFrontPage = "true">University of Michigan</organization>
    </author>
    <author surname = "Gaudry" fullname = "Pierrick Gaudry">
      <organization showOnFrontPage = "true">INRIA Nancy-Grand Est, CNRS, and Université de Lorraine</organization>
    </author>
    <author surname = "Green" fullname = "Matthew Green">
      <organization showOnFrontPage = "true">Johns Hopkins</organization>
    </author>
    <author surname = "Halderman" fullname = "J. Alex Halderman">
      <organization showOnFrontPage = "true">University of Michigan</organization>
    </author>
    <author surname = "Heninger" fullname = "Nadia Heninger">
      <organization showOnFrontPage = "true">University of Pennsylvania</organization>
    </author>
    <author surname = "Springall" fullname = "Drew Springall">
      <organization showOnFrontPage = "true">University of Michigan</organization>
    </author>
    <author surname = "Thomé" fullname = "Emmanuel Thomé">
      <organization showOnFrontPage = "true">INRIA Nancy-Grand Est, CNRS, and Université de Lorraine</organization>
    </author>
    <author surname = "Valenta" fullname = "Luke Valenta">
      <organization showOnFrontPage = "true">University of Pennsylvania</organization>
    </author>
    <author surname = "VanderSloot" fullname = "Benjamin VanderSloot">
      <organization showOnFrontPage = "true">University of Michigan</organization>
    </author>
    <author surname = "Wustrow" fullname = "Eric Wustrow">
      <organization showOnFrontPage = "true">University of Michigan</organization>
    </author>
    <author surname = "Zanella-Béguelin" fullname = "Santiago Zanella-Béguelin">
      <organization showOnFrontPage = "true">Microsoft Research</organization>
    </author>
    <author surname = "Zimmermann" fullname = "Paul Zimmermann">
      <organization showOnFrontPage = "true">University of Pennsylvania</organization>
    </author>
    <date year="2015" month="October"/>
  </front>
    <refcontent>
    Proceedings of the 22nd {ACM} {SIGSAC} Conference on Computer and
    Communications Security, Denver, CO, USA, October 12-16, 2015
    </refcontent>
</reference>

<reference anchor = "KKRT16" target = "https://doi.org/10.1145/2976749.2978381" 
quoteTitle="true" derivedAnchor="KKRT16">
  <front>
    <title>Efficient Batched Oblivious {PRF} with Applications to Private Set Intersection</title>
    <author surname="Kolesnikov" fullname="Vladimir Kolesnikov">
      <organization showOnFrontPage="true">Bell Labs</organization>
    </author>
    <author  surname="Kumaresan" fullname="Ranjit Kumaresan">
      <organization showOnFrontPage="true">MIT</organization>
    </author>
    <author surname="Rosulek" fullname="Mike Rosulek">
      <organization showOnFrontPage="true">Oregon State University</organization>
    </author>
    <author surname="Trieu" fullname="Ni Trieu">
      <organization showOnFrontPage="true">Oregon State University</organization>
    </author>
    <date year="2016" month="October"/>
  </front>
  <refcontent>
  Proceedings of the 2016 {ACM} {SIGSAC} Conference on Computer and
  Communications Security, Vienna, Austria, October 24-28, 2016
  </refcontent>
</reference>

<reference anchor = "CHLR18" target = "https://doi.org/10.1145/3243734.3243836" 
quoteTitle="true" derivedAnchor="CHLR18">
  <front>
    <title>Labeled PSI from Fully Homomorphic Encryption with Malicious Security</title>
    <author surname="Chen" fullname="Hao Chen">
      <organization showOnFrontPage="true">Microsoft Research</organization>
    </author>
    <author  surname="Huang" fullname="Zhicong Huang">
      <organization showOnFrontPage="true">École Polytechnique Fédérale de Lausanne</organization>
    </author>
    <author surname="Laine" fullname="Kim Laine">
      <organization showOnFrontPage="true">Microsoft Research</organization>
    </author>
    <author surname="Rindal" fullname="Peter Rindal">
      <organization showOnFrontPage="true">Oregon State University</organization>
    </author>
    <date year="2018" month="October"/>
  </front>
  <refcontent>
  Proceedings of the 2018 {ACM} {SIGSAC} Conference on Computer and
  Communications Security, {CCS} 2018, Toronto, ON, Canada, October
  15-19, 2018
  </refcontent>
</reference>

<reference anchor = "MS21" target = "https://www.microsoft.com/en-us/research/blog/password-monitor-safeguarding-passwords-in-microsoft-edge/"
  quoteTitle="true" derivedAnchor="MS21">
  <front>
    <title>Password Monitor: Safeguarding passwords in Microsoft Edge</title>
    <author surname = "Lauter" fullname = "Kristin Lauter">
      <organization showOnFrontPage="true">Microsoft</organization>
    </author>
    <author surname = "Kannepalli" fullname = "Sreekanth Kannepalli">
      <organization showOnFrontPage="true">Microsoft</organization>
    </author>
    <author surname = "Laine" fullname = "Kim Laine">
      <organization showOnFrontPage="true">Microsoft</organization>
    </author>
    <author surname = "Moreno" fullname = "Radames Cruz Moreno">
      <organization showOnFrontPage="true">Microsoft</organization>
    </author>
  </front>
</reference>

<reference anchor = "RR22" target = "https://doi.org/10.1145/3548606.3560658" 
quoteTitle="true" derivedAnchor="RR22">
  <front>
    <title>Blazing Fast PSI from Improved OKVS and Subfield VOLE</title>
    <author surname="Raghuraman" fullname="Srinivasan Raghuraman">
      <organization showOnFrontPage="true">Visa Research</organization>
    </author>
    <author  surname="Rindal" fullname="Peter Rindal">
      <organization showOnFrontPage="true">Visa Research</organization>
    </author>
    <date year="2022" month="November"/>
  </front>
  <refcontent>
  Proceedings of the 2022 {ACM} {SIGSAC} Conference on Computer and
  Communications Security, {CCS} 2022, Los Angeles, CA, USA, November
  7-11, 2022
  </refcontent>
</reference>

<reference anchor="CZZDL24" target="https://doi.org/10.1007/978-3-031-57725-3_13" quoteTitle="true" derivedAnchor="CZZDL24">
  <front>
    <title>Private Set Operations from Multi-query Reverse Private Membership Test</title>
    <author surname="Chen" fullname="Yu Chen">
      <organization showOnFrontPage="true">Shandong University</organization>
    </author>
    <author  surname="Zhang" fullname="Min Zhang">
      <organization showOnFrontPage="true">Shandong University</organization>
    </author>
    <author surname="Zhang" fullname="Cong Zhang">
      <organization showOnFrontPage="true">SKLOIS, IIE, Chinese Academy of Sciences</organization>
    </author>
    <author surname="Dong" fullname="Minglang Dong">
      <organization showOnFrontPage="true">Shandong University</organization>
    </author>
    <author surname="Liu" fullname="Weiran Liu">
      <organization showOnFrontPage="true">Alibaba Group</organization>
    </author>
    <date year="2024" month="April"/>
  </front>
  <refcontent>
  Public-Key Cryptography - {PKC} 2024 - 27th {IACR} International Conference on Practice and Theory of Public-Key Cryptography, 2024, Proceedings, Part {III}
  </refcontent>
  <!--seriesInfo name="DOI" value="10.1007/978-3-031-57725-3_13"/-->
</reference>

 <reference anchor="ISO-SM2" target="https://www.iso.org/standard/76382.html" quoteTitle="true" derivedAnchor="ISO-SM2">
  <front>
    <title>IT Security techniques -- Digital signatures with appendix -- Part 3: Discrete logarithm based mechanisms</title>
    <author>
      <organization showOnFrontPage="true">International Organization for Standardization</organization>
    </author>
    <date year="2018" month="November"/>
  </front>
  <seriesInfo name="ISO/IEC" value="14888-3:2018"/>
</reference>
<reference anchor="ISO-SM3" target="https://www.iso.org/standard/67116.html" quoteTitle="true" derivedAnchor="ISO-SM3">
  <front>
    <title>IT Security techniques -- Hash-functions -- Part 3: Dedicated hash-functions</title>
    <author>
      <organization showOnFrontPage="true">International Organization for Standardization</organization>
    </author>
    <date year="2018" month="October"/>
  </front>
  <seriesInfo name="ISO/IEC" value="10118-3:2018"/>
</reference>

<reference anchor="RFC8031" target="https://www.rfc-editor.org/info/rfc8031" quoteTitle="true" derivedAnchor="RFC8031">
  <front>
    <title>Curve25519 and Curve448 for the Internet Key Exchange Protocol Version 2 (IKEv2) Key Agreement</title>
    <author initials="Y." surname="Nir" fullname="Y. Nir">
      <organization showOnFrontPage="true"/>
    </author>
    <author initials="S." surname="Josefsson" fullname="S. Josefsson">
      <organization showOnFrontPage="true"/>
    </author>
    <date year="2016" month="December"/>
    <abstract>
      <t indent="0">This document describes the use of Curve25519 and Curve448 for ephemeral key exchange in the Internet Key Exchange Protocol Version 2 (IKEv2).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8031"/>
  <seriesInfo name="DOI" value="10.17487/RFC8031"/>
</reference>

<reference anchor="RFC8446" target="https://www.rfc-editor.org/info/rfc8446" quoteTitle="true" derivedAnchor="RFC8446">
  <front>
    <title>The Transport Layer Security (TLS) Protocol Version 1.3</title>
    <author initials="E." surname="Rescorla" fullname="E. Rescorla">
      <organization showOnFrontPage="true"/>
    </author>
    <date year="2018" month="August"/>
    <abstract>
      <t indent="0">This document specifies version 1.3 of the Transport Layer Security (TLS) protocol.  TLS allows client/server applications to communicate over the Internet in a way that is designed to prevent eavesdropping, tampering, and message forgery.</t>
      <t indent="0">This document updates RFCs 5705 and 6066, and obsoletes RFCs 5077, 5246, and 6961.  This document also specifies new requirements for TLS 1.2 implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8446"/>
  <seriesInfo name="DOI" value="10.17487/RFC8446"/>
</reference>

<reference anchor="RFC8998" target="https://www.rfc-editor.org/info/rfc8998" quoteTitle="true" derivedAnchor="RFC8998">
  <front>
    <title>ShangMi (SM) Cipher Suites for TLS 1.3</title>
    <author initials="P." surname="Yang" fullname="Paul Yang">
      <organization showOnFrontPage="true"/>
    </author>
    <date year="2021" month="March"/>
    <abstract>
      <t indent="0">This document specifies how to use the ShangMi (SM) cryptographic algorithms with Transport Layer Security (TLS) protocol version 1.3.</t>
      <t indent="0">The use of these algorithms with TLS 1.3 is not endorsed by the IETF. The SM algorithms are becoming mandatory in China, so this document provides a description of how to use the SM algorithms with TLS 1.3 and specifies a profile of TLS 1.3 so that implementers can produce interworking implementations.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="8998"/>
  <seriesInfo name="DOI" value="10.17487/RFC8998"/>
</reference>

<reference anchor="RFC9497" target="https://www.rfc-editor.org/info/rfc9497" quoteTitle="true" derivedAnchor="OPRF">
  <front>
    <title>Oblivious Pseudorandom Functions (OPRFs) Using Prime-Order Groups</title>
    <author fullname="A. Davidson" initials="A." surname="Davidson"/>
    <author fullname="A. Faz-Hernandez" initials="A." surname="Faz-Hernandez"/>
    <author fullname="N. Sullivan" initials="N." surname="Sullivan"/>
    <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
    <date month="December" year="2023"/>
    <abstract>
      <t indent="0">An Oblivious Pseudorandom Function (OPRF) is a two-party protocol between a client and a server for computing the output of a Pseudorandom Function (PRF). The server provides the PRF private key, and the client provides the PRF input. At the end of the protocol, the client learns the PRF output without learning anything about the PRF private key, and the server learns neither the PRF input nor output. An OPRF can also satisfy a notion of 'verifiability', called a VOPRF. A VOPRF ensures clients can verify that the server used a specific private key during the execution of the protocol. A VOPRF can also be partially oblivious, called a POPRF. A POPRF allows clients and servers to provide public input to the PRF computation. This document specifies an OPRF, VOPRF, and POPRF instantiated within standard prime-order groups, including elliptic curves. This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9497"/>
  <seriesInfo name="DOI" value="10.17487/RFC9497"/>
</reference>

<reference anchor="RFC9382" target="https://www.rfc-editor.org/info/rfc9382" quoteTitle="true" derivedAnchor="RFC9382">
  <front>
    <title>SPAKE2, a Password-Authenticated Key Exchange</title>
    <author fullname="W. Ladd" initials="W." surname="Ladd"/>
    <date month="September" year="2023"/>
    <abstract>
      <t indent="0">This document describes SPAKE2, which is a protocol for two parties that share a password to derive a strong shared key without disclosing the password.  This method is compatible with any group, is computationally efficient, and has a security proof.  This document predated the Crypto Forum Research Group (CFRG) password-authenticated key exchange (PAKE) competition, and it was not selected; however, given existing use of variants in Kerberos and other applications, it was felt that publication was beneficial. Applications that need a symmetric PAKE, but are unable to hash onto an elliptic curve at execution time, can use SPAKE2.  This document is a product of the Crypto Forum Research Group in the Internet Research Task Force (IRTF).</t>
    </abstract>
  </front>
  <seriesInfo name="RFC" value="9382"/>
  <seriesInfo name="DOI" value="10.17487/RFC9382"/>
</reference>

  <reference anchor="I-D.ietf-ppm-dap" target="https://datatracker.ietf.org/doc/html/draft-ietf-ppm-dap-12">
    <front>
      <title>Distributed Aggregation Protocol for Privacy Preserving Measurement</title>
    <author initials="T." surname="Geoghegan" fullname="Tim Geoghegan">
      <organization>ISRG</organization>
    </author>
      <author initials="C." surname="Patton" fullname="Christopher Patton">
      <organization>Cloudflare</organization>
    </author>
      <author initials="B." surname="Pitman" fullname="Brandon Pitman">
      <organization>ISRG</organization>
    </author>
      <author initials="E." surname="Rescorla" fullname="Eric Rescorla">
      <organization>Independent</organization>
    </author>
      <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
    </author>
      <date month="October" day="10" year="2024"/>
    </front>
    <seriesInfo name="Internet-Draft" value="draft-ietf-ppm-dap-12"/>
  </reference>

  <reference anchor="draft-irtf-cfrg-vdaf-12">
    <front>
      <title>Verifiable Distributed Aggregation Functions</title>
      <author fullname="Richard Barnes" initials="R." surname="Barnes">
        <organization>Cisco</organization>
      </author>
      <author fullname="David Cook" initials="D." surname="Cook">
        <organization>ISRG</organization>
      </author>
      <author fullname="Christopher Patton" initials="C." surname="Patton">
        <organization>Cloudflare</organization>
      </author>
      <author fullname="Phillipp Schoppmann" initials="P." surname="Schoppmann">
        <organization>Google</organization>
      </author>
      <date day="4" month="October" year="2024"/>
    </front>
    <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-vdaf-12"/>
  </reference>

</references>


<?line 340?>

</back>

</rfc>

