<?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.17 (Ruby 3.1.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-dss-star-02" category="std" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.15.1 -->
  <front>
    <title abbrev="STAR">STAR: Distributed Secret Sharing for Private Threshold Aggregation Reporting</title>
    <seriesInfo name="Internet-Draft" value="draft-dss-star-02"/>
    <author initials="A." surname="Davidson" fullname="Alex Davidson">
      <organization>Brave Software</organization>
      <address>
        <email>alex.davidson92@gmail.com</email>
      </address>
    </author>
    <author initials="S. K." surname="Sahib" fullname="Shivan Kaul Sahib">
      <organization>Brave Software</organization>
      <address>
        <email>shivankaulsahib@gmail.com</email>
      </address>
    </author>
    <author initials="P." surname="Snyder" fullname="Peter Snyder">
      <organization>Brave Software</organization>
      <address>
        <email>pes@brave.com</email>
      </address>
    </author>
    <author initials="C. A." surname="Wood" fullname="Christopher A. Wood">
      <organization>Cloudflare</organization>
      <address>
        <email>caw@heapingbits.net</email>
      </address>
    </author>
    <date year="2022" month="October" day="24"/>
    <area>SEC</area>
    <abstract>
      <t>Servers often need to collect data from clients that can be privacy-sensitive if
the server is able to associate the collected data with a particular user. In
this document we describe STAR, an efficient and secure threshold aggregation
protocol for collecting measurements from clients by an untrusted aggregation
server, while maintaining K-anonymity guarantees.</t>
    </abstract>
  </front>
  <middle>
    <section anchor="introduction">
      <name>Introduction</name>
      <t>Collecting user data is often fraught with privacy issues because without adequate
protections it is trivial for the server to learn sensitive information about the
client contributing data. Even when the client's identity is separated from the
data (for example, if the client is using the <xref target="Tor"/> network or
<xref target="OHTTP"/> to upload data), it's possible for the collected data
to be unique enough that the user's identity is leaked. A common solution to this
problem of the measurement being user-identifying is to make sure that the measurement
is only revealed to the server if there are at least K clients that have contributed
the same data, thus providing K-anonymity to participating clients. Such
privacy-preserving systems are referred to as threshold aggregation systems.</t>
      <t>In this document we describe one such system, namely Distributed Secret Sharing for
Private Threshold Aggregation Reporting (STAR) <xref target="STAR"/>.</t>
    </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 notation is used throughout the document.</t>
      <ul spacing="normal">
        <li>
          <tt>len(l)</tt>: Outputs the length of input list <tt>l</tt>, e.g., <tt>len([1,2,3]) = 3)</tt>.</li>
        <li>
          <tt>range(a, b)</tt>: Outputs a list of integers from <tt>a</tt> to <tt>b-1</tt> in ascending order, e.g., <tt>range(1, 4) = [1,2,3]</tt>.</li>
        <li>
          <tt>pow(a, b)</tt>: Outputs the integer result of <tt>a</tt> to the power of <tt>b</tt>, e.g., <tt>pow(2, 3) = 8</tt>.</li>
        <li>|| denotes concatenation of byte strings, i.e., <tt>x || y</tt> denotes the byte string <tt>x</tt>, immediately followed by
the byte string <tt>y</tt>, with no extra separator, yielding <tt>xy</tt>.</li>
        <li>
          <tt>str(x)</tt>: Outputs an ASCII string encoding of the integer input <tt>x</tt>, e.g., <tt>str(1) = "1"</tt>.</li>
        <li>nil denotes an empty byte string.</li>
      </ul>
      <t>In addition, the following terms are used:</t>
      <dl>
        <dt>Aggregation Server:</dt>
        <dd>
          <t>An entity that would like to learn aggregated data from users.</t>
        </dd>
        <dt>Randomness Server:</dt>
        <dd>
          <t>An entity that runs an oblivious pseudorandom function (<xref target="OPRF"/>)
service that allows clients to receive pseudorandom function evaluations on their
measurement and the server OPRF key, without the Randomness Server learning anything
about their measurement. The clients use the output as randomness to produce the
report that is then sent to the Aggregation Server.</t>
        </dd>
        <dt>Anonymizing Server:</dt>
        <dd>
          <t>An entity that clients use to decouple their identity (IP address) from their
messages sent to the Aggregation Server.</t>
        </dd>
        <dt>Client:</dt>
        <dd>
          <t>The entity that provides user data to the system.</t>
        </dd>
        <dt>Measurement:</dt>
        <dd>
          <t>The unencrypted, potentially-sensitive data that the client is asked to report.</t>
        </dd>
        <dt>Report:</dt>
        <dd>
          <t>The encrypted measurement being sent by the client.</t>
        </dd>
        <dt>Auxiliary Data:</dt>
        <dd>
          <t>Arbitrary data that clients may send as part of their report, but which is only
revealed when at least K encrypted measurements of the same value are received.</t>
        </dd>
        <dt>REPORT_THRESHOLD:</dt>
        <dd>
          <t>The minimum number of reports that an Aggregation Server needs before revealing
client data. This value is chosen by the application.</t>
        </dd>
      </dl>
    </section>
    <section anchor="cryptographic-dependencies">
      <name>Cryptographic Dependencies</name>
      <t>STAR depends on the following cryptographic protocols and primitives:</t>
      <ul spacing="normal">
        <li>Threshold secret sharing (TSS); <xref target="deps-tss"/></li>
        <li>Oblivious Pseudorandom Function (OPRF); <xref target="deps-oprf"/></li>
        <li>Key Derivation Function (KDF); <xref target="deps-kdf"/></li>
        <li>Key-Committing Authenticated Encryption with Associated Data (KCAEAD); <xref target="deps-aead"/></li>
      </ul>
      <t>This section describes the syntax for these protocols and primitives in more detail.</t>
      <section anchor="deps-tss">
        <name>Threshold Secret Sharing</name>
        <t>A threshold secret sharing scheme with the following important properties:</t>
        <ul spacing="normal">
          <li>Privacy: Secret shares reveal nothing unless k = REPORT_THRESHOLD shares are combined
to recover the secret.</li>
          <li>Authenticity: Combining at least k = REPORT_THRESHOLD shares will only succeed if all
shares correspond to the same underlying secret. Otherwise, it fails.</li>
        </ul>
        <t>A threshold secret sharing scheme with these properties has the following API syntax:</t>
        <ul spacing="normal">
          <li>Share(k, secret, rand): Produce a <tt>k</tt>-threshold share using randomness <tt>rand</tt> and <tt>secret</tt>,
along with a commitment to the secret, each of size <tt>Nshare</tt> and <tt>Ncommitment</tt> bytes long.
The value <tt>k</tt> is an integer, and <tt>secret</tt>  and <tt>rand</tt> are byte strings.</li>
          <li>Recover(k, share_set): Combine the secret shares in <tt>share_set</tt>, each of which correspond
to the same secret share commitment, which is of size at least <tt>k</tt>, and recover the corresponding
message <tt>secret</tt>. If recovery fails, this function returns an error.</li>
          <li>Nshare: The size in bytes of a secret share value.</li>
          <li>Ncommitment: The size in bytes of a secret share commitment value.</li>
        </ul>
        <t>A threshold secret sharing scheme is built on top of the scalar field of a prime-order group <tt>G</tt>, where
the order is a large prime <tt>p</tt>. The group operation for <tt>G</tt> is addition <tt>+</tt> with identity element <tt>I</tt>.
For any elements <tt>A</tt> and <tt>B</tt> of the group <tt>G</tt>, <tt>A + B = B + A</tt> is also a member of <tt>G</tt>. Also, for any
<tt>A</tt> in <tt>G</tt>, there exists an element <tt>-A</tt> such that <tt>A + (-A) = (-A) + A = I</tt>. Integers, taken modulo the group order <tt>p</tt>, are called
scalars; arithmetic operations on scalars are implicitly performed modulo <tt>p</tt>. Since <tt>p</tt> is prime,
scalars form a finite field. Scalar multiplication is equivalent to the repeated
application of the group operation on an element <tt>A</tt> with itself <tt>r-1</tt> times, denoted as
<tt>ScalarMult(A, r)</tt>. We denote the sum, difference, and product of two scalars using the <tt>+</tt>, <tt>-</tt>,
and <tt>*</tt> operators, respectively. (Note that this means <tt>+</tt> may refer to group element addition or
scalar addition, depending on types of the operands.) For any element <tt>A</tt>, <tt>ScalarMult(A, p) = I</tt>.
We denote <tt>B</tt> as a fixed generator of the group. Scalar base multiplication is equivalent to the repeated application
of the group operation <tt>B</tt> with itself <tt>r-1</tt> times, this is denoted as <tt>ScalarBaseMult(r)</tt>. The set of
scalars corresponds to <tt>GF(p)</tt>, which we refer to as the scalar field. This document uses types
<tt>Element</tt> and <tt>Scalar</tt> to denote elements of the group <tt>G</tt> and its set of scalars, respectively.
We denote Scalar(x) as the conversion of integer input <tt>x</tt> to the corresponding Scalar value with
the same numeric value. For example, Scalar(1) yields a Scalar representing the value 1.
We denote equality comparison as <tt>==</tt> and assignment of values by <tt>=</tt>. Finally, it is assumed that
group element addition, negation, and equality comparisons can be efficiently computed for
arbitrary group elements.</t>
        <t>We now detail a number of member functions that can be invoked on <tt>G</tt>.</t>
        <ul spacing="normal">
          <li>Identity(): Outputs the group identity element <tt>I</tt>.</li>
          <li>RandomScalar(): Outputs a random <tt>Scalar</tt> element in GF(p), i.e., a random scalar in [0, p - 1].</li>
          <li>HashToScalar(x, dst): Deterministically map an array of bytes <tt>x</tt> to a Scalar element.
This function is optionally parameterized by a domain separation tag dst.</li>
          <li>SerializeElement(A): Maps an <tt>Element</tt> <tt>A</tt> to a canonical byte array <tt>buf</tt> of fixed length <tt>Ne</tt>. This
function can raise an error if <tt>A</tt> is the identity element of the group.</li>
          <li>DeserializeElement(buf): Attempts to map a byte array <tt>buf</tt> to an <tt>Element</tt> <tt>A</tt>,
and fails if the input is not the valid canonical byte representation of an element of
the group. This function can raise an error if deserialization fails
or <tt>A</tt> is the identity element of the group.</li>
          <li>ScalarBaseMult(k): Output the scalar multiplication between Scalar <tt>k</tt> and the group generator <tt>B</tt>.</li>
          <li>SerializeScalar(s): Maps a Scalar <tt>s</tt> to a canonical byte array <tt>buf</tt> of fixed length <tt>Ns</tt>.</li>
          <li>DeserializeScalar(buf): Attempts to map a byte array <tt>buf</tt> to a <tt>Scalar</tt> <tt>s</tt>.
This function can raise an error if deserialization fails.</li>
        </ul>
        <t>[[OPEN ISSUE: specify validation steps somewhere, likely cribbing from other documents]]</t>
        <section anchor="unverifiable-secret-sharing">
          <name>Unverifiable Secret Sharing</name>
          <t>This section specifies traditional (unverifiable) Shamir secret sharing (SSS) <xref target="Shamir"/>
for implementing the sharing scheme. This functionality is implemented using
ristretto255 <xref target="RISTRETTO"/>.
Share and Recover are implemented as follows, where Nshare = 2*Nscalar and Ncommitment = 32.</t>
          <artwork><![CDATA[
def Share(k, secret, rand):
  # Construct the secret sharing polynomial
  poly = [G.HashToScalar(secret, str(0))]
  for i in range(1, k):
    poly.extend(G.HashToScalar(rand, str(i)))

  # Compute the secret commitment
  commitment = SHA256(secret)

  # Evaluate the polynomial at a random point
  x = G.RandomScalar()
  y = polynomial_evaluate(x, poly)

  # Construct the share
  x_enc = G.SerializeScalar(x)
  y_enc = G.SerializeScalar(y)
  share = x_enc || y_enc

  return share, commitment

def Recover(k, share_set):
  if share_set.length < k:
    raise RecoveryFailedError

  points = []
  for share in share_set:
    x = G.DeserializeScalar(share[0:Ns])
    y = G.DeserializeScalar(share[Ns:])
    points.append((x, y))

  poly = polynomial_interpolation(points)
  return poly[0]
]]></artwork>
          <t>The dependencies for Share and Recover are as follows:</t>
          <ul spacing="normal">
            <li>
              <tt>polynomial_evaluate(x, poly)</tt> from
<xref section="4.2.1" sectionFormat="comma" target="FROST"/> for evaluating a
given polynomial specified by <tt>poly</tt> on the input <tt>x</tt>.</li>
            <li>
              <tt>polynomial_interpolation(points)</tt> from
<xref section="4.2.3" sectionFormat="comma" target="FROST"/> for constructing a
polynomial of degree <tt>N-1</tt> from the set <tt>points</tt> of size <tt>N</tt> and returning
the coefficient list, where the 0-th coefficient of the polynomial is the
first element in the output list.</li>
          </ul>
        </section>
        <section anchor="dep-vss">
          <name>Verifiable Secret Sharing</name>
          <t>This section specifies Feldman's verifiable secret sharing (VSS) <xref target="Feldman"/>
for implementing the sharing scheme. This functionality is implemented using
ristretto255 <xref target="RISTRETTO"/>.
Share and Recover are implemented as follows, where Nshare = 2*Nscalar and Ncommitment = k*Ne,
where Ne is the size of a serialized group element.</t>
          <artwork><![CDATA[
def Share(k, secret, rand):
  # Construct the secret sharing polynomial
  poly = [G.HashToScalar(secret, str(0))]
  for i in range(1, k):
    poly.extend(G.HashToScalar(rand, str(i)))

  # Compute the secret (and polynomial) commitment
  commitment = Commit(secret)

  # Evaluate the polynomial at a random point
  x = G.RandomScalar()
  y = polynomial_evaluate(x, poly)

  # Construct the share
  x_enc = G.SerializeScalar(x)
  y_enc = G.SerializeScalar(y)
  share = x_enc || y_enc

  return share, commitment

def Recover(k, share_set):
  if share_set.length < k:
    raise RecoveryFailedError

  points = []
  for share in share_set:
    x = G.DeserializeScalar(share[0:Ns])
    y = G.DeserializeScalar(share[Ns:])
    points.append((x, y))

  poly = polynomial_interpolation(points)
  return poly[0]
]]></artwork>
          <t>The helper functions <tt>polynomial_evaluate</tt> and <tt>polynomial_interpolation</tt> are as defined
in the previous section. The helper function Commit is implemented as follows:</t>
          <artwork><![CDATA[
def Commit(poly):
  commitment = nil
  for coefficient in poly:
    C_i = G.ScalarBaseMult(coefficient)
    commitment = commitment || G.SerializeElement(C_i)
  return commitment
]]></artwork>
          <t>Moreover, VSS extends the syntax of SSS to add another function, Verify, that is
used to check that a share is correct for a given commitment. Verify is implemented
as follows.</t>
          <artwork><![CDATA[
def Verify(share, commitment):
  x = G.DeserializeScalar(share[0:Ns])
  y = G.DeserializeScalar(share[Ns:])
  S' = G.ScalarBaseMult(y)

  if len(commitment) % Ne != 0:
    raise Exception("Invalid commitment length")
  num_coefficients = len(commitment) % Ne
  commitments = []
  for i in range(0, num_coefficients):
    c_i = G.DeserializeElement(commitment[i*Ne:(i+1)*Ne])
    commitments.extend(c_i)

  S = G.Identity()
  for j in range(0, num_coefficients):
    S = S + G.ScalarMult(commitments[j], pow(x, j))
  return S == S'
]]></artwork>
        </section>
      </section>
      <section anchor="deps-oprf">
        <name>Verifiable Oblivious Pseudorandom Function</name>
        <t>A Verifiable Oblivious Pseudorandom Function (VOPRF) is a two-party protocol between client and
server for computing a PRF such that the client learns the PRF output and neither party learns
the input of the other. This specification depends on the prime-order VOPRF construction specified
in <xref target="OPRF"/>, draft version -10, using the VOPRF mode (0x01) from <xref section="3.1" sectionFormat="comma" target="OPRF"/>.</t>
        <t>The following VOPRF client functions are used:</t>
        <ul spacing="normal">
          <li>Blind(element): Create and output (<tt>blind</tt>, <tt>blinded_element</tt>), consisting of a blinded
representation of input <tt>element</tt>, denoted <tt>blinded_element</tt>, along with a value to revert
the blinding process, denoted <tt>blind</tt>.</li>
          <li>Finalize(element, blind, evaluated_element, proof): Finalize the OPRF evaluation using input <tt>element</tt>,
random inverter <tt>blind</tt>, evaluation output <tt>evaluated_element</tt>, and proof <tt>proof</tt>,
yielding output <tt>oprf_output</tt> or an error upon failure.</li>
        </ul>
        <t>Moreover, the following OPRF server functions are used:</t>
        <ul spacing="normal">
          <li>BlindEvaluate(k, blinded_element): Evaluate blinded input element <tt>blinded_element</tt> using
input key <tt>k</tt>, yielding output element <tt>evaluated_element</tt> and proof <tt>proof</tt>. This is equivalent to
the Evaluate function described in <xref section="3.3.1" sectionFormat="comma" target="OPRF"/>, where <tt>k</tt> is the private key parameter.</li>
          <li>DeriveKeyPair(seed, info): Derive a private and public key pair deterministically
from a seed and info parameter, as described in <xref section="3.2" sectionFormat="comma" target="OPRF"/>.</li>
        </ul>
        <t>Finally, this specification makes use of the following shared functions and parameters:</t>
        <ul spacing="normal">
          <li>SerializeElement(element): Map input <tt>element</tt> to a fixed-length byte array <tt>buf</tt>.</li>
          <li>DeserializeElement(buf): Attempt to map input byte array <tt>buf</tt> to an OPRF group element.
This function can raise a DeserializeError upon failure; see <xref section="2.1" sectionFormat="comma" target="OPRF"/>
for more details.</li>
          <li>SerializeScalar(scalar): Map input <tt>scalar</tt> to a unique byte array buf of fixed
length Ns bytes.</li>
          <li>DeserializeScalar(buf): Attempt to map input byte array <tt>buf</tt> to an OPRF scalar element.
This function raise a DeserializeError upon failure; see <xref section="2.1" sectionFormat="comma" target="OPRF"/>
for more details.</li>
          <li>Ns: The size of a serialized OPRF scalar element output from SerializeScalar.</li>
          <li>Noe: The size of a serialized OPRF group element output from SerializeElement.</li>
        </ul>
        <t>This specification uses the verifiable OPRF from <xref section="3" sectionFormat="comma" target="OPRF"/> with the
OPRF(ristretto255, SHA-512) as defined in <xref section="4.1.1" sectionFormat="comma" target="OPRF"/>.</t>
      </section>
      <section anchor="deps-kdf">
        <name>Key Derivation Function</name>
        <t>A Key Derivation Function (KDF) is a function that takes some source of initial
keying material and uses it to derive one or more cryptographically strong keys.
This specification uses a KDF with the following API and parameters:</t>
        <ul spacing="normal">
          <li>Extract(salt, ikm): Extract a pseudorandom key of fixed length <tt>Nx</tt> bytes from
input keying material <tt>ikm</tt> and an optional byte string <tt>salt</tt>.</li>
          <li>Expand(prk, info, L): Expand a pseudorandom key <tt>prk</tt> using the optional string <tt>info</tt>
into <tt>L</tt> bytes of output keying material.</li>
          <li>Nx: The output size of the <tt>Extract()</tt> function in bytes.</li>
        </ul>
        <t>This specification uses HKDF-SHA256 <xref target="HKDF"/> as the KDF function, where Nx = 32.</t>
      </section>
      <section anchor="deps-aead">
        <name>Key-Committing Authenticated Encryption with Associated Data</name>
        <t>A Key-Committing Authenticated Encryption with Associated Data (KCAEAD) scheme is an algorithm
for encrypting and authenticating plaintext with some additional data.
It has the following API and parameters:</t>
        <ul spacing="normal">
          <li>
            <tt>Seal(key, nonce, aad, pt)</tt>: Encrypt and authenticate plaintext
<tt>"pt"</tt> with associated data <tt>"aad"</tt> using symmetric key <tt>"key"</tt> and nonce
<tt>"nonce"</tt>, yielding ciphertext <tt>"ct"</tt> and tag <tt>"tag"</tt>.</li>
          <li>
            <tt>Open(key, nonce, aad, ct)</tt>: Decrypt <tt>"ct"</tt> and tag <tt>"tag"</tt> using
associated data <tt>"aad"</tt> with symmetric key <tt>"key"</tt> and nonce <tt>"nonce"</tt>,
returning plaintext message <tt>"pt"</tt>. This function can raise an
<tt>OpenError</tt> upon failure.</li>
          <li>
            <tt>Nk</tt>: The length in bytes of a key for this algorithm.</li>
          <li>
            <tt>Nn</tt>: The length in bytes of a nonce for this algorithm.</li>
          <li>
            <tt>Nt</tt>: The length in bytes of the authentication tag for this algorithm.</li>
        </ul>
        <t>This specification uses a KCAEAD built on AES-128-GCM <xref target="GCM"/>, HKDF-SHA256 <xref target="HKDF"/>, and
HMAC-SHA256 <xref target="HMAC"/>. In particular, Nk = 16, Nn = 12, and Nt = 16. The Seal
and Open functions are implemented as follows.</t>
        <artwork><![CDATA[
def Seal(key, nonce, aad, pt):
  key_prk = Extract(nil, key)
  aead_key = Expand(key_prk, "aead", Nk)
  hmac_key = Expand(key_prk, "hmac", 32) // 32 bytes for SHA-256

  ct = AES-128-GCM-Seal(key=aead_key, nonce=nonce, aad=aad, pt=pt)
  tag = HMAC(key=hmac_key, message=ct)
  return ct || tag

def Open(key, nonce, aad, ct_and_tag):
  key_prk = Extract(nil, key)
  aead_key = Expand(key_prk, "aead", Nk)
  hmac_key = Expand(key_prk, "hmac", 32) // 32 bytes for SHA-256

  ct || tag = ct_and_tag
  expected_tag = HMAC(key=hmac_key, message=ct)
  if !constant_time_equal(expected_tag, tag):
    raise OpenError
  pt = AES-128-GCM-Open(key=aead_key, nonce=nonce, aad=aad, ct=ct) // This can raise an OpenError
  return pt
]]></artwork>
      </section>
    </section>
    <section anchor="system-overview">
      <name>System Overview</name>
      <t>In STAR, clients generate encrypted measurements and send them to a single untrusted
Aggregation Server in a report. Each report is effectively a random k-out-of-n share of
the client data secret, along with some additional auxilary data. In a given amount of
time, if the Aggregation Server receives the same encrypted value from k = REPORT_THRESHOLD
clients, the server can recover the client data associated with each report. This ensures
that clients only have their measurements revealed if they are part of a larger crowd,
thereby achieving k-anonymity privacy (where k = REPORT_THRESHOLD).</t>
      <t>Each client report is as secret as the underlying client data. That means low
entropy client data values could be abused by an untrusted Aggregation Server in a
dictionary attack to recover client data with fewer than REPORT_THRESHOLD honestly generated
reports. To mitigate this, clients boost the entropy of their data using output from an Oblivious
Pseudorandom Function (OPRF) provided by a separate, non-colluding Randomness Server.</t>
      <t>STAR also requires use of a client Anonymizing Proxy when interacting with the Aggregation
Server so that the Aggregation Server cannot link a client report to a client which generated it.
This document does not require a specific type of proxy. In practice, proxies built on <xref target="OHTTP"/>
or <xref target="Tor"/> suffice; see <xref target="proxy-options"/> for more details.</t>
      <t>The overall architecture is shown in <xref target="arch"/>, where <tt>msg</tt> is the measurement and <tt>aux</tt> is
auxiliary data associated with a given client. The output of the interaction is a data value
<tt>msg</tt> shared amongst REPORT_THRESHOLD honest clients and a list of additional auxiliary data
values associated with each of the REPORT_THRESHOLD client reports, denoted <tt>&lt;aux&gt;</tt>.</t>
      <figure anchor="arch">
        <name>System Architecture</name>
        <artset>
          <artwork type="svg"><svg xmlns="http://www.w3.org/2000/svg" version="1.1" height="592" width="664" viewBox="0 0 664 592" class="diagram" text-anchor="middle" font-family="monospace" font-size="13px">
              <path d="M 16,32 L 16,80" fill="none" stroke="black"/>
              <path d="M 48,80 L 48,224" fill="none" stroke="black"/>
              <path d="M 48,272 L 48,456" fill="none" stroke="black"/>
              <path d="M 120,32 L 120,80" fill="none" stroke="black"/>
              <path d="M 200,32 L 200,80" fill="none" stroke="black"/>
              <path d="M 200,272 L 200,320" fill="none" stroke="black"/>
              <path d="M 256,80 L 256,216" fill="none" stroke="black"/>
              <path d="M 264,320 L 264,408" fill="none" stroke="black"/>
              <path d="M 320,32 L 320,80" fill="none" stroke="black"/>
              <path d="M 320,272 L 320,320" fill="none" stroke="black"/>
              <path d="M 352,128 L 352,192" fill="none" stroke="black"/>
              <path d="M 432,32 L 432,80" fill="none" stroke="black"/>
              <path d="M 488,80 L 488,480" fill="none" stroke="black"/>
              <path d="M 488,528 L 488,544" fill="none" stroke="black"/>
              <path d="M 544,32 L 544,80" fill="none" stroke="black"/>
              <path d="M 560,352 L 560,400" fill="none" stroke="black"/>
              <path d="M 560,496 L 560,512" fill="none" stroke="black"/>
              <path d="M 16,32 L 120,32" fill="none" stroke="black"/>
              <path d="M 200,32 L 320,32" fill="none" stroke="black"/>
              <path d="M 432,32 L 544,32" fill="none" stroke="black"/>
              <path d="M 16,80 L 120,80" fill="none" stroke="black"/>
              <path d="M 200,80 L 320,80" fill="none" stroke="black"/>
              <path d="M 432,80 L 544,80" fill="none" stroke="black"/>
              <path d="M 264,110 L 344,110" fill="none" stroke="black"/>
              <path d="M 264,114 L 344,114" fill="none" stroke="black"/>
              <path d="M 48,144 L 248,144" fill="none" stroke="black"/>
              <path d="M 56,192 L 256,192" fill="none" stroke="black"/>
              <path d="M 264,206 L 344,206" fill="none" stroke="black"/>
              <path d="M 264,210 L 344,210" fill="none" stroke="black"/>
              <path d="M 200,272 L 320,272" fill="none" stroke="black"/>
              <path d="M 200,320 L 320,320" fill="none" stroke="black"/>
              <path d="M 496,334 L 552,334" fill="none" stroke="black"/>
              <path d="M 496,338 L 552,338" fill="none" stroke="black"/>
              <path d="M 48,352 L 256,352" fill="none" stroke="black"/>
              <path d="M 272,352 L 480,352" fill="none" stroke="black"/>
              <path d="M 56,400 L 256,400" fill="none" stroke="black"/>
              <path d="M 272,400 L 488,400" fill="none" stroke="black"/>
              <path d="M 496,414 L 552,414" fill="none" stroke="black"/>
              <path d="M 496,418 L 552,418" fill="none" stroke="black"/>
              <path d="M 496,478 L 552,478" fill="none" stroke="black"/>
              <path d="M 496,482 L 552,482" fill="none" stroke="black"/>
              <path d="M 496,526 L 552,526" fill="none" stroke="black"/>
              <path d="M 496,530 L 552,530" fill="none" stroke="black"/>
              <polygon class="arrowhead" points="496,544 484,538.4 484,549.6 " fill="black" transform="rotate(90,488,544)"/>
              <polygon class="arrowhead" points="488,352 476,346.4 476,357.6 " fill="black" transform="rotate(0,480,352)"/>
              <polygon class="arrowhead" points="256,144 244,138.4 244,149.6 " fill="black" transform="rotate(0,248,144)"/>
              <polygon class="arrowhead" points="64,400 52,394.4 52,405.6 " fill="black" transform="rotate(180,56,400)"/>
              <polygon class="arrowhead" points="64,192 52,186.4 52,197.6 " fill="black" transform="rotate(180,56,192)"/>
              <g class="text">
                <text x="68" y="52">Client</text>
                <text x="260" y="52">Randomness</text>
                <text x="488" y="52">Aggregation</text>
                <text x="48" y="68">(msg,</text>
                <text x="92" y="68">aux)</text>
                <text x="260" y="68">Server</text>
                <text x="484" y="68">Server</text>
                <text x="352" y="116">\</text>
                <text x="136" y="132">Request(Blind(msg))</text>
                <text x="404" y="148">Randomness</text>
                <text x="300" y="164">Evaluate</text>
                <text x="384" y="164">Phase</text>
                <text x="192" y="180">Response(...)</text>
                <text x="352" y="212">/</text>
                <text x="256" y="228">...</text>
                <text x="36" y="244">Generate</text>
                <text x="100" y="244">Report</text>
                <text x="24" y="260">using</text>
                <text x="92" y="260">randomness</text>
                <text x="264" y="292">Anonymizing</text>
                <text x="256" y="308">Proxy</text>
                <text x="84" y="340">Report</text>
                <text x="560" y="340">\</text>
                <text x="520" y="372">Store</text>
                <text x="596" y="372">Report</text>
                <text x="416" y="388">Acknowledgement</text>
                <text x="524" y="388">Report</text>
                <text x="592" y="388">Phase</text>
                <text x="264" y="420">...</text>
                <text x="560" y="420">/</text>
                <text x="480" y="436">.</text>
                <text x="496" y="436">.</text>
                <text x="48" y="468">...</text>
                <text x="560" y="484">\</text>
                <text x="456" y="500">Recover</text>
                <text x="508" y="500">data</text>
                <text x="616" y="500">Aggregation</text>
                <text x="444" y="516">from</text>
                <text x="496" y="516">Reports</text>
                <text x="592" y="516">Phase</text>
                <text x="560" y="532">/</text>
                <text x="464" y="564">(msg,</text>
                <text x="516" y="564">&lt;aux&gt;)</text>
              </g>
            </svg>
          </artwork>
          <artwork type="ascii-art"><![CDATA[
     +------------+         +--------------+             +-------------+
     |   Client   |         |  Randomness  |             | Aggregation |
     | (msg, aux) |         |    Server    |             |   Server    |
     +---+--------+         +------+-------+             +------+------+
         |                         |                            |
         |                         |===========\                |
         | Request(Blind(msg))     |           |                |
         +------------------------>|           | Randomness     |
         |                         | Evaluate  | Phase          |
         |           Response(...) |           |                |
         |<------------------------+           |                |
         |                         |===========/                |
         |                        ...                           |
    Generate Report                                             |
    using randomness                                            |
         |                  +--------------+                    |
         |                  |  Anonymizing |                    |
         |                  |    Proxy     |                    |
         |                  +-------+------+                    |
         | Report                   |                           |========\
         +--------------------------|-------------------------->|        |
         |                          |                           | Store  | Report
         |                          |           Acknowledgement | Report | Phase
         |<-------------------------|---------------------------+        |
         |                         ...                          |========/
         |                                                     ...
         |                                                      |
        ...                                                     |
                                                                |========\
                                                         Recover data    | Aggregation
                                                         from Reports    | Phase
                                                                |========/
                                                                v
                                                           (msg, <aux>)
]]></artwork>
        </artset>
      </figure>
      <t>In the following subsections, we describe each of the phases of STAR in more detail.</t>
      <section anchor="randomness-phase">
        <name>Randomness Phase</name>
        <t>The randomness sampled from a client data <bcp14>MUST</bcp14> be a deterministic function of the measurement.
Clients sample this randomness by running an OPRF protocol with the Randomness Server.
This section describes how the Randomness Server is configured and then how clients
interact with it for computing the randomness.</t>
        <section anchor="randomness-configuration">
          <name>Configuration</name>
          <t>STAR clients are configured with a Randomness Server URI and the Randomness Server public key <tt>pkR</tt>.
Clients use this URI to send HTTP messages to the Randomness Server to complete the protocol.
As an example, the Randomness Server URI might be https://randomness.example.</t>
          <t>The Randomness Server only needs to configure an OPRF key pair per epoch. This is
done as follows:</t>
          <artwork><![CDATA[
seed = random(32)
(skR, pkR) = DeriveKeyPair(seed, "STAR")
]]></artwork>
        </section>
        <section anchor="randomness-protocol">
          <name>Randomness Protocol</name>
          <t>This procedure works as follows. Let <tt>msg</tt> be the client's measurement to be used for deriving
the randomness <tt>rand</tt>.</t>
          <t>Clients first generate the a context for invoking the OPRF protocol as follows:</t>
          <artwork><![CDATA[
client_context = SetupVOPRFClient(0x0001, pkR) // OPRF(ristretto255, SHA-512) ciphersuite
]]></artwork>
          <t>Clients then blind their measurement using this context as follows:</t>
          <artwork><![CDATA[
(blinded, blinded_element) = client_context.Blind(msg)
]]></artwork>
          <t>Clients then compute <tt>randomness_request = OPRF.SerializeElement(blinded_element)</tt> and send it
to the Randomness Server URI in a HTTP POST message using content type "application/star-randomness-request".
An example request is shown below.</t>
          <artwork><![CDATA[
:method = POST
:scheme = https
:authority = randomness.example
:path = /
accept = application/star-randomness-response
content-type = application/star-randomness-request
content-length = Noe

<Bytes containing a serialized blinded element>
]]></artwork>
          <t>Upon receipt, the Randomness Server evaluates and returns a response.
It does so by first creating a context for running the ORPF protocol as follows:</t>
          <artwork><![CDATA[
server_context = SetupVOPRFServer(0x0001, skR, pkR) // OPRF(ristretto255, SHA-512) ciphersuite
]]></artwork>
          <t>Here, <tt>skR</tt> and <tt>pkR</tt> are private and public keys generated as described in <xref target="randomness-configuration"/>.</t>
          <t>The Randomness Server then computes <tt>blinded_element = OPRF.DeserializeElement(randomness_request)</tt>.
If this fails, the Randomness Server returns an error in a 4xx response to the client. Otherwise,
the server computes:</t>
          <artwork><![CDATA[
evaluated_element, proof = server_context.BlindEvaluate(sk, blinded_element)
]]></artwork>
          <t>The Randomness Server then serializes the evaluation output and proof to produce a randomness response
as follows:</t>
          <artwork><![CDATA[
evaluated_element_enc = OPRF.SerializeElement(evaluated_element)
proof_enc = OPRF.SerializeScalar(proof[0]) || OPRF.SerializeScalar(proof[1])
randomness_response = evaluated_element_enc || proof_enc
]]></artwork>
          <t>This response is then sent to the client using the content type "application/star-randomness-response".
An example response is below.</t>
          <artwork><![CDATA[
:status = 200
content-type = application/star-randomness-response
content-length = Noe

<Bytes containing randomness_response>
]]></artwork>
          <t>Upon receipt, the client computes parses <tt>randomness_response</tt> to recover the evaluated element
and proof as follows:</t>
          <artwork><![CDATA[
evaluated_element_enc || proof_enc = parse(randomness_response)
evaluated_element = OPRF.DeserializeElement(evaluated_element_enc)
proof = [OPRF.DeserializeScalar(proof_enc[0:Ns]), OPRF.DeserializeScalar(proof_enc[Ns:])]
]]></artwork>
          <t>If any of these steps fail, the client aborts the protocol. Otherwise, the client
finalizes the OPRF protocol to compute the output <tt>rand</tt> as follows:</t>
          <artwork><![CDATA[
rand = client_context.Finalize(msg, blind, evaluated_element, proof)
]]></artwork>
        </section>
      </section>
      <section anchor="report-phase">
        <name>Reporting Phase</name>
        <t>In the reporting phase, the client uses its measurement <tt>msg</tt> with auxiliary data <tt>aux</tt>
and its derived randomness <tt>rand</tt> to produce a report for the Aggregation Server.</t>
        <section anchor="reporting-configuration">
          <name>Reporting Configuration</name>
          <t>The reporting phase requires the Aggregation Server to be configured with a URI for
accepting reports. As an example, the Aggregation Server URI might be https://aggregator.example.
The Aggregation Server is both an Oblivious HTTP Target and Oblivious Gateway Resource.</t>
          <t>Clients are also configured with an Anonymizing Proxy that clients can use to send
proxy reports to the Aggregation Server. The exact type of proxy is not specified here.
See <xref target="proxy-options"/> for more details.</t>
        </section>
        <section anchor="reporting-protocol">
          <name>Reporting Protocol</name>
          <t>This reporting protocol works as follows. First, the client stretches <tt>rand</tt> into three values
<tt>key_seed</tt> and <tt>share_coins</tt>, and additionally derives an KCAEAD key and nonce from <tt>key_seed</tt>.</t>
          <artwork><![CDATA[
// Randomness derivation
rand_prk = Extract(nil, rand)
key_seed = Expand(rand_prk, "key_seed", 16)
share_coins = Expand(rand_prk, "share_coins", 16)

// Symmetric encryption key derivation
key_prk = Extract(nil, key_seed)
key = Expand(key_prk, "key", Nk)
nonce = Expand(key_prk, "nonce", Nn)
]]></artwork>
          <t>The client then generates a secret share of <tt>key_seed</tt> using <tt>share_coins</tt> as randomness as follows:</t>
          <artwork><![CDATA[
random_share, share_commitment = Share(REPORT_THRESHOLD, key_seed, share_coins)
]]></artwork>
          <t>The client then encrypts <tt>msg</tt> and <tt>aux</tt> using the KCAEAD key and nonce as follows:</t>
          <artwork><![CDATA[
report_data = len(msg, 4) || msg || len(aux, 4) || aux
encrypted_report = Seal(key, nonce, nil, report_data)
]]></artwork>
          <t>The function <tt>len(x, n)</tt> encodes the length of input <tt>x</tt> as an <tt>n</tt>-byte big-endian integer.</t>
          <t>Finally, the client constructs a report consisting of <tt>encrypted_report</tt> and <tt>random_share</tt>,
as well as <tt>share_commitment</tt>, and sends this to the Anonymizing Server in the subsequent
epoch, i.e., after the Randomness Server has rotated its OPRF key.</t>
          <artwork><![CDATA[
struct {
  opaque encrypted_report<1..2^16-1>;
  opaque random_share[Nshare];
  opaque share_commitment[Ncommitment];
} Report;
]]></artwork>
          <t>Specifically, Clients send a Report to the Aggregation Server using an HTTP POST message
with content type "application/star-report". An example message is below.</t>
          <artwork><![CDATA[
:method = POST
:scheme = https
:authority = aggregator.example
:path = /
content-type = application/star-report
content-length = <Length of body>

<Bytes containing a Report>
]]></artwork>
          <t>This message is sent to the Aggregation Server through the Anonymizing Proxy. See <xref target="proxy-options"/>
for different types of proxy options.</t>
        </section>
      </section>
      <section anchor="aggregation-phase">
        <name>Aggregation Phase</name>
        <t>Aggregation is the final phase of STAR. It happens offline and does not require any
communication between different STAR entities. It proceeds as follows. First, the
Aggregation Server groups reports together based on their <tt>share_commitment</tt> value.
If applicable, the Aggregation Server also verifies that each share commitment is correct,
i.e., by invoking the Verify function on each <tt>share</tt> and <tt>share_commitment</tt> pair in
candidate set of reports. Let <tt>report_set</tt> denote a set of at least REPORT_THRESHOLD
reports that have a matching <tt>share_commitment</tt> value.</t>
        <t>Given this set, the Aggregation Server begins by running the secret share recovery algoritm
as follows:</t>
        <artwork><![CDATA[
key_seed = Recover(report_set)
]]></artwork>
        <t>If this fails, the Aggregation Server chooses a new candidate report share set and
reruns the aggregation process. See <xref target="bad-reports"/> for more details.</t>
        <t>Otherwise, the Aggregation Server derives the same KCAEAD key and nonce from <tt>key_seed</tt> to
decrypt each of the report ciphertexts in <tt>report_set</tt>.</t>
        <artwork><![CDATA[
key_prk = Extract(nil, key_seed)
key = Expand(key_prk, "key", Nk)
nonce = Expand(key_prk, "nonce", Nn)
]]></artwork>
        <t>Each report ciphertext is decrypted as follows:</t>
        <artwork><![CDATA[
report_data = Open(key, nonce, nil, ct)
]]></artwork>
        <t>The message <tt>msg</tt> and auxiliary data <tt>aux</tt> are then parsed from <tt>report_data</tt>.</t>
        <t>If this fails for any report, the Aggregation Server chooses a new candidate report share set and
reruns the aggregation process. Otherwise, the Aggregation Server then outputs the <tt>msg</tt> and <tt>aux</tt>
values for the corresponding reports.</t>
      </section>
      <section anchor="auxiliary-data">
        <name>Auxiliary data</name>
        <t>In <xref target="arch"/>, <tt>aux</tt> refers to auxiliary or additional data that may be sent by clients, and
is distinct from the measurement data protected by the K-anonymity guarantee. Auxiliary data
is only revealed when the k-condition is met but, importantly, is not part of the k-condition
itself. This data might be unique to some or all of the submissions, or omitted entirely. This
can even be the actual measured value itself. For example: if we're measuring tabs open on a
client, then the measurement being sent can be "city: Vancouver" and the aux data can be "7"
for a particular client. The idea being, that we only reveal all the measurements once we
know that there are at least K clients with city: Vancouver.</t>
      </section>
    </section>
    <section anchor="proxy-options">
      <name>Anonymizing Proxy Options</name>
      <t>The Anonymizing Proxy can be instantiated using <xref target="OHTTP"/>, <xref target="Tor"/>, or even a TCP-layer proxy.
The choice of which proxy to use depends on the application threat model. The fundamental
requirement is that the Anonymizing Proxy hide the client IP address and any other
unique client information from the Aggregation Server.</t>
      <t>In general, there are two ways clients could implement the proxy: at the application layer,
e.g., via <xref target="OHTTP"/>, or at the connection or transport layer, e.g., via <xref target="Tor"/> or similar
systems. We describe each below.</t>
      <section anchor="application-layer-proxy">
        <name>Application-Layer Proxy</name>
        <t>An application-layer proxy hides client identifying information from the Aggregation Server
via application-layer intermediation. <xref target="OHTTP"/> is the <bcp14>RECOMMENDED</bcp14> option for an application-layer
proxy. <xref target="OHTTP"/> ensures that a network adversary between the client and Anonymizing Proxy
cannot link reports sent to the Aggregation Server (up to what is possible by traffic analysis).</t>
        <t>OHTTP consists of four entities: client, Oblivious Relay Resource, Oblivious Gateway Resource,
and Target Resource. In this context, the Target Resource is the Aggregation Server. The
Aggregation Server can also act as the Oblvious Gateway Resource. Clients are configured with
the URI of the Oblivious Relay Resource, and use this to forward requests to a Oblivious
Gateway Resource. The Oblivious Gateway Resource then forwards requests to the Target as required.</t>
      </section>
      <section anchor="connection-layer-proxy">
        <name>Connection-Layer Proxy</name>
        <t>A connection-layer proxy hides client identifying information from the Aggregation Server via
connection-layer intermediation. <xref target="Tor"/> is perhaps the most commonly known example of such a proxy.
Clients can use Tor to connect to and send reports to the Aggregation Server. Other examples of
connection-layer proxies include CONNECT-based HTTPS proxies, used in systems like Private Relay
<xref target="PrivateRelay"/> and TCP-layer proxies. TCP proxies only offer weak protection in practice since
an adversary capable of eavesdropping on ingress and egress connections from the Anonymizing Proxy
can trivially link data together.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This section contains security considerations for the draft.</t>
      <section anchor="sec-randomness-sampling">
        <name>Randomness Sampling</name>
        <t>Deterministic randomness <bcp14>MUST</bcp14> be sampled by clients to construct their STAR report, as discussed
in <xref target="report-phase"/>. This randomness CANNOT be derived locally, and <bcp14>MUST</bcp14> be sampled from the
Randomness Server (that runs an <xref target="OPRF"/> service).</t>
        <t>For best-possible security, the Randomness Server <bcp14>SHOULD</bcp14> sample and use a new OPRF key for each
time epoch <tt>t</tt>, where the length of epochs is determined by the application. The previous OPRF
key that was used in epoch <tt>t-1</tt> can be safely deleted. As discussed in <xref target="leakage"/>, shorter
epochs provide more protection from Aggregation Server attacks, but also reduce the
window in which data collection occurs (and hence reduce the possibility that we will have
enough reports to decrypt) while increasing the reporting latency.</t>
        <t>In this model, for further security, clients <bcp14>SHOULD</bcp14> sample their randomness in epoch <tt>t</tt> and
then send it to the Aggregation Server in <tt>t+1</tt> (after the Randomness Server has rotated their
secret key). This prevents the Aggregation Server from launching queries after receiving the
client reports (<xref target="leakage"/>). It is also <bcp14>RECOMMENDED</bcp14> that the Randomness Server runs in
verifiable mode, which allows clients to verify the randomness that they are being served
<xref target="OPRF"/>.</t>
      </section>
      <section anchor="oblivious-submission">
        <name>Oblivious Submission</name>
        <t>The reports being submitted to an Aggregation Server in STAR <bcp14>MUST</bcp14> be detached from client identity.
This is to ensure that the Aggregation Server does not learn exactly what each client submits,
in the event that their measurement is revealed. This is achieved through the use of an Anonymizing
Server, which is an OHTTP Oblivious Relay Resource. This server <bcp14>MUST NOT</bcp14> collude with the Aggregation
Server. All the client responsibilities mentioned in section 7.1 of <xref target="OHTTP"/> apply.</t>
        <t>The OHTTP Relay Resource and Randomness Server <bcp14>MAY</bcp14> be combined into a single entity, since client
reports are protected by a TLS connection between the client and the Aggregation Server. Therefore,
OHTTP support can be enabled without requiring any additional non-colluding parties. In this mode,
the Randomness Server <bcp14>SHOULD</bcp14> allow two endpoints: (1) to evaluate the VOPRF functionality that
provides clients with randomness, and (2) to proxy client reports to the Aggregation Server.
However, this increases the privacy harm in case of collusion; see <xref target="collusion-aggregation-proxy"/>.</t>
        <t>If configured otherwise, clients can upload reports to the Aggregation Server using an existing
anonymizing proxy service such as <xref target="Tor"/>. However, use of OHTTP is likely to be the most efficient
way to achieve oblivious submission.</t>
      </section>
      <section anchor="bad-reports">
        <name>Malicious Clients</name>
        <t>Malicious clients can perform a denial-of-service attacks on the system by sending bogus reports to
the Aggregation Server. There are several types of bogus reports:</t>
        <ul spacing="normal">
          <li>Reports with invalid shares, or corrupt reports. These are reports that will yield the incorrect
secret when combined by the Aggregation Server.</li>
          <li>Reports with invalid ciphertext, or garbage reports. These are reports that contain an encryption
of the wrong measurement value (<tt>msg</tt>).</li>
        </ul>
        <t>Corrupt reports can be mitigated by using a verifiable secret sharing scheme, such as the one described
in <xref target="dep-vss"/>, and verifying that the share commitments are correct for each share. This ensures that
each share in a report set corresponds to the same secret.</t>
        <t>Garbage reports cannot easily be mitigated unless the Aggregation Server has a way to confirm that the
recovered secret is correct for a given measurement value (<tt>msg</tt>). This might be done by allowing the
Aggregation Server to query the Randomness Server on values of its choosing, but this opens the door to
dictionary attacks.</t>
        <t>In the absence of protocol-level mitigations, Aggregation Servers can limit the impact of malicious
clients by using higher-layer defences such as identity-based certification <xref target="Sybil"/>.</t>
      </section>
      <section anchor="malicious-aggregation-server">
        <name>Malicious Aggregation Server</name>
        <section anchor="dictionary-attacks">
          <name>Dictionary Attacks</name>
          <t>The Aggregation Server may attempt to launch a dictionary attack against the client measurement,
by repeatedly launching queries against the Randomness Server for measurements of its choice.
This is mitigated by the fact that the Randomness Server regularly rotates the VOPRF key that
they use, which reduces the window in which this attack can be launched (<xref target="sec-randomness-sampling"/>).
Note that such attacks can also be limited in scope by maintaining out-of-band protections
against entities that attempt to launch large numbers of queries in short time periods.</t>
        </section>
        <section anchor="sybil-attacks">
          <name>Sybil Attacks</name>
          <t>By their very nature, attacks where a malicious Aggregation Server injects clients into the
system that send reports to try and reveal data from honest clients are an unavoidable
consequence of building any threshold aggregation system. This system cannot provide
comprehensive protection against such attacks. The time window in which such attacks can
occur is restricted by rotating the VOPRF key (<xref target="sec-randomness-sampling"/>). Such attacks
can also be limited in scope by using higher-layer defences such as identity-based
certification <xref target="Sybil"/>.</t>
        </section>
      </section>
      <section anchor="leakage">
        <name>Leakage and Failure Model</name>
        <section anchor="size-of-anonymity-set">
          <name>Size of Anonymity Set</name>
          <t>Client reports immediately leak deterministic tags that are derived from the VOPRF output
that is evaluated over client measurement. This has the immediate impact that the size of
the anonymity set for each received measurement (i.e. which clients share the same measurement)
is revealed, even if the measurement is not revealed. As long as client reports are sent
via an <xref target="OHTTP"/> Relay Resource, then the leakage derived from the anonymity sets themselves
is significantly reduced. However, it may still be possible to use this leakage to reduce
a client's privacy, and so care should be taken to not construct situations where counts
of measurement subsets are likely to lead to deanonymization of clients or their data.</t>
        </section>
        <section anchor="collusion-aggregation-randomness-servers">
          <name>Collusion between Aggregation and Randomness Servers</name>
          <t>Finally, note that if the Aggregation and Randomness Servers collude and jointly learn the
VOPRF key, then the attack above essentially becomes an offline dictionary attack. As such,
client security is not completely lost when collusion occurs, which represents a safer mode
of failure when compared with Prio and Poplar.</t>
        </section>
        <section anchor="collusion-aggregation-proxy">
          <name>Collusion between Aggregation Server and Anonymizing Proxy</name>
          <t>As mentioned in <xref target="oblivious-submission"/>, systems that depend on a relaying server to remove
linkage between client reports and client identity rely on the assumption of non-collusion
between the relay and the server processing the client reports. Given that STAR depends on
such a system for guaranteeing that the Aggregation Server does not come to know which
client submitted the STAR report (once decrypted), the same collusion risk applies.</t>
          <t>It's worth mentioning here for completeness sake that if the OHTTP Relay Resource and
Randomness Server are combined into a single entity as mentioned in <xref target="oblivious-submission"/>,
then this worsens the potential leakage in case of collusion: if the entities responsible
for the Aggregation Server and the Randomness Server collude as described in
<xref target="collusion-aggregation-randomness-servers"/>, this results in the Aggregation Server in
effect colluding with the anonymizing proxy.</t>
        </section>
      </section>
    </section>
    <section anchor="comparisons-with-other-systems">
      <name>Comparisons with other Systems</name>
      <t>[[EDITOR NOTE: for information/discussion: consider removing before publication]]</t>
      <section anchor="private-heavy-hitter-discovery">
        <name>Private Heavy-Hitter Discovery</name>
        <t>STAR is similar in nature to private heavy-hitter discovery protocols, such as Poplar <xref target="Poplar"/>.
In such systems, the Aggregation Server reveals the set of client measurements that are shared
by at least K clients. STAR allows a single untrusted server to perform the aggregation process,
as opposed to Poplar which requires two non-colluding servers that communicate with each other.</t>
        <t>As a consequence, the STAR protocol is orders of magnitude more efficient than the Poplar
approach, with respect to computational, network-usage, and financial metrics. Therefore,
STAR scales much better for large numbers of client submissions. See the <xref target="STAR"/> paper for
more details on efficiency comparisons with the Poplar approach.</t>
      </section>
      <section anchor="general-aggregation">
        <name>General Aggregation</name>
        <t>In comparison to general aggregation protocols like Prio <xref target="Prio"/>,
the STAR protocol provides a more constrained set of functionality. However, STAR is
significantly more efficient for the threshold aggregation functionality, requires only a
single Aggregation Server, and is not limited to only processing numerical data types.</t>
      </section>
      <section anchor="protocol-leakage">
        <name>Protocol Leakage</name>
        <t>As we discuss in <xref target="leakage"/>, STAR leaks deterministic tags derived from the client
measurement that reveal which (and how many) clients share the same measurements, even
if the measurements themselves are not revealed. This also enables an online dictionary
attack to be launched by the Aggregation Server by sending repeated VOPRF queries to the
Randomness Server as discussed in <xref target="dictionary-attacks"/>.</t>
        <t>The leakage of Prio is defined as whatever is leaked by the function that the aggregation
computes. The leakage in Poplar allows the two Aggregation Servers to learn all heavy-hitting
prefixes of the eventual heavy-hitting strings that are output. Note that in Poplar it is
also possible to launch dictionary attacks of a similar nature to STAR by launching a
Sybil attack <xref target="Sybil"/> that explicitly injects multiple measurements that share the same
prefix into the aggregation. This attack would result in the aggregation process learning
more about client inputs that share those prefixes.</t>
        <t>Finally, note that under collusion, the STAR security model requires the adversary to
launch an offline dictionary attack against client measurements. In Prio and Poplar,
security is immediately lost when collusion occurs.</t>
      </section>
      <section anchor="support-for-auxiliary-data">
        <name>Support for auxiliary data</name>
        <t>It should be noted that clients can send auxiliary data (<xref target="auxiliary-data"/>) that is
revealed only when the aggregation including their measurement succeeds (i.e. K-1 other
clients send the same value). Such data is supported by neither Prio, nor Poplar.</t>
      </section>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <section anchor="protocol-message-media-types">
        <name>Protocol Message Media Types</name>
        <t>This specification defines the following protocol messages, along with their
corresponding media types types:</t>
        <ul spacing="normal">
          <li>Randomness request <xref target="randomness-phase"/>: "application/star-randomness-request"</li>
          <li>Randomness response <xref target="randomness-phase"/>: "application/star-randomness-response"</li>
          <li>Report <xref target="report-phase"/>: "application/star-report"</li>
        </ul>
        <t>The definition for each media type is in the following subsections.</t>
        <t>Protocol message format evolution is supported through the definition of new
formats that are identified by new media types.</t>
        <t>IANA [shall update / has updated] the "Media Types" registry at
https://www.iana.org/assignments/media-types with the registration information
in this section for all media types listed above.</t>
        <t>[OPEN ISSUE: Solicit review of these allocations from domain experts.]</t>
        <section anchor="applicationstar-randomness-request-media-type">
          <name>"application/star-randomness-request" media type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>star-randomness-request</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>only "8bit" or "binary" is permitted</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl>
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationstar-report-media-type">
          <name>"application/star-report" media type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>star-report</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>only "8bit" or "binary" is permitted</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl>
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IESG</t>
            </dd>
          </dl>
        </section>
        <section anchor="applicationstar-randomness-response-media-type">
          <name>"application/star-randomness-response" media type</name>
          <dl>
            <dt>Type name:</dt>
            <dd>
              <t>application</t>
            </dd>
            <dt>Subtype name:</dt>
            <dd>
              <t>star-randomness-response</t>
            </dd>
            <dt>Required parameters:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Optional parameters:</dt>
            <dd>
              <t>None</t>
            </dd>
            <dt>Encoding considerations:</dt>
            <dd>
              <t>only "8bit" or "binary" is permitted</t>
            </dd>
            <dt>Security considerations:</dt>
            <dd>
              <t>see <xref target="security-considerations"/></t>
            </dd>
            <dt>Interoperability considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Published specification:</dt>
            <dd>
              <t>this specification</t>
            </dd>
            <dt>Applications that use this media type:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Fragment identifier considerations:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Additional information:</dt>
            <dd>
              <dl>
                <dt>Magic number(s):</dt>
                <dd>N/A</dd>
                <dt>Deprecated alias names for this type:</dt>
                <dd>N/A</dd>
                <dt>File extension(s):</dt>
                <dd>N/A</dd>
                <dt>Macintosh file type code(s):</dt>
                <dd>N/A</dd>
              </dl>
            </dd>
            <dt>Person and email address to contact for further information:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Intended usage:</dt>
            <dd>
              <t>COMMON</t>
            </dd>
            <dt>Restrictions on usage:</dt>
            <dd>
              <t>N/A</t>
            </dd>
            <dt>Author:</dt>
            <dd>
              <t>see Authors' Addresses section</t>
            </dd>
            <dt>Change controller:</dt>
            <dd>
              <t>IESG</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references>
        <name>Normative References</name>
        <reference anchor="GCM">
          <front>
            <title>Recommendation for block cipher modes of operation :: GaloisCounter Mode (GCM) and GMAC</title>
            <author fullname="M J Dworkin" initials="M." surname="Dworkin">
              <organization/>
            </author>
            <date year="2007"/>
          </front>
          <seriesInfo name="National Institute of Standards and Technology" value="report"/>
          <seriesInfo name="DOI" value="10.6028/nist.sp.800-38d"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner">
              <organization/>
            </author>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba">
              <organization/>
            </author>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
        <reference anchor="OPRF">
          <front>
            <title>Oblivious Pseudorandom Functions (OPRFs) using Prime-Order Groups</title>
            <author fullname="Alex Davidson" initials="A." surname="Davidson">
              <organization>Brave Software</organization>
            </author>
            <author fullname="Armando Faz-Hernández" initials="A." surname="Faz-Hernández">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Nick Sullivan" initials="N." surname="Sullivan">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare, Inc.</organization>
            </author>
            <date day="6" month="October" year="2022"/>
            <abstract>
              <t>   An Oblivious Pseudorandom Function (OPRF) is a two-party protocol
   between client and server for computing the output of a Pseudorandom
   Function (PRF).  The server provides the PRF secret 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
   secret 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.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-voprf-14"/>
        </reference>
        <reference anchor="RISTRETTO">
          <front>
            <title>The ristretto255 and decaf448 Groups</title>
            <author fullname="Henry de Valence" initials="H." surname="de Valence">
         </author>
            <author fullname="Jack Grigg" initials="J." surname="Grigg">
         </author>
            <author fullname="Mike Hamburg" initials="M." surname="Hamburg">
         </author>
            <author fullname="Isis Lovecruft" initials="I." surname="Lovecruft">
         </author>
            <author fullname="George Tankersley" initials="G." surname="Tankersley">
         </author>
            <author fullname="Filippo Valsorda" initials="F." surname="Valsorda">
         </author>
            <date day="14" month="October" year="2022"/>
            <abstract>
              <t>   This memo specifies two prime-order groups, ristretto255 and
   decaf448, suitable for safely implementing higher-level and complex
   cryptographic protocols.  The ristretto255 group can be implemented
   using Curve25519, allowing existing Curve25519 implementations to be
   reused and extended to provide a prime-order group.  Likewise, the
   decaf448 group can be implemented using edwards448.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-ristretto255-decaf448-04"/>
        </reference>
        <reference anchor="FROST">
          <front>
            <title>Two-Round Threshold Schnorr Signatures with FROST</title>
            <author fullname="Deirdre Connolly" initials="D." surname="Connolly">
              <organization>Zcash Foundation</organization>
            </author>
            <author fullname="Chelsea Komlo" initials="C." surname="Komlo">
              <organization>University of Waterloo, Zcash Foundation</organization>
            </author>
            <author fullname="Ian Goldberg" initials="I." surname="Goldberg">
              <organization>University of Waterloo</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="October" year="2022"/>
            <abstract>
              <t>   In this draft, we present the two-round signing variant of FROST, a
   Flexible Round-Optimized Schnorr Threshold signature scheme.  FROST
   signatures can be issued after a threshold number of entities
   cooperate to issue a signature, allowing for improved distribution of
   trust and redundancy with respect to a secret key.  Further, this
   draft specifies signatures that are compatible with [RFC8032].
   However, unlike [RFC8032], the protocol for producing signatures in
   this draft is not deterministic, so as to ensure protection against a
   key-recovery attack that is possible when even only one signer
   participant is malicious.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-frost-11"/>
        </reference>
        <reference anchor="HKDF">
          <front>
            <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="P. Eronen" initials="P." surname="Eronen">
              <organization/>
            </author>
            <date month="May" year="2010"/>
            <abstract>
              <t>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="HMAC">
          <front>
            <title>HMAC: Keyed-Hashing for Message Authentication</title>
            <author fullname="H. Krawczyk" initials="H." surname="Krawczyk">
              <organization/>
            </author>
            <author fullname="M. Bellare" initials="M." surname="Bellare">
              <organization/>
            </author>
            <author fullname="R. Canetti" initials="R." surname="Canetti">
              <organization/>
            </author>
            <date month="February" year="1997"/>
            <abstract>
              <t>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>
      </references>
      <references>
        <name>Informative References</name>
        <reference anchor="STAR" target="https://arxiv.org/abs/2109.10074">
          <front>
            <title>STAR: Distributed Secret Sharing for Private Threshold Aggregation Reporting</title>
            <author initials="A." surname="Davidson">
              <organization/>
            </author>
            <author initials="P." surname="Snyder">
              <organization/>
            </author>
            <author initials="E." surname="Quirk">
              <organization/>
            </author>
            <author initials="J." surname="Genereux">
              <organization/>
            </author>
            <author initials="H." surname="Haddadi">
              <organization/>
            </author>
            <author initials="B." surname="Livshits">
              <organization/>
            </author>
            <date year="2022" month="April" day="10"/>
          </front>
        </reference>
        <reference anchor="Tor" target="https://svn-archive.torproject.org/svn/projects/design-paper/tor-design.pdf">
          <front>
            <title>Tor: The Second-Generation Onion Router</title>
            <author initials="R." surname="Dingledine">
              <organization/>
            </author>
            <author initials="N." surname="Mathewson">
              <organization/>
            </author>
            <author initials="P." surname="Syverson">
              <organization/>
            </author>
            <date year="2004"/>
          </front>
        </reference>
        <reference anchor="PrivateRelay" target="https://www.apple.com/icloud/docs/iCloud_Private_Relay_Overview_Dec2021.pdf">
          <front>
            <title>iCloud Private Relay Overview</title>
            <author>
              <organization/>
            </author>
            <date year="2021"/>
          </front>
        </reference>
        <reference anchor="Brave" target="https://brave.com">
          <front>
            <title>Brave Browser</title>
            <author>
              <organization/>
            </author>
            <date>n.d.</date>
          </front>
        </reference>
        <reference anchor="ADSS" target="https://eprint.iacr.org/2020/800">
          <front>
            <title>Reimagining Secret Sharing: Creating a Safer and More Versatile Primitive by Adding Authenticity, Correcting Errors, and Reducing Randomness Requirements</title>
            <author initials="M." surname="Bellare">
              <organization/>
            </author>
            <author initials="W." surname="Dai">
              <organization/>
            </author>
            <author initials="P." surname="Rogaway">
              <organization/>
            </author>
            <date year="2020" month="June" day="27"/>
          </front>
        </reference>
        <reference anchor="Shamir" target="https://dl.acm.org/doi/10.1145/359168.359176">
          <front>
            <title>How to share a secret</title>
            <author initials="A." surname="Shamir">
              <organization/>
            </author>
            <date year="1979" month="November" day="01"/>
          </front>
        </reference>
        <reference anchor="Poplar" target="https://eprint.iacr.org/2021/017">
          <front>
            <title>Lightweight Techniques for Private Heavy Hitters</title>
            <author initials="D." surname="Boneh">
              <organization/>
            </author>
            <author initials="E." surname="Boyle">
              <organization/>
            </author>
            <author initials="H." surname="Corrigan-Gibbs">
              <organization/>
            </author>
            <author initials="N." surname="Gilboa">
              <organization/>
            </author>
            <author initials="Y." surname="Ishai">
              <organization/>
            </author>
            <date year="2022" month="January" day="04"/>
          </front>
        </reference>
        <reference anchor="SGCM" target="https://eprint.iacr.org/2011/326">
          <front>
            <title>SGCM: The Sophie Germain Counter Mode</title>
            <author initials="M.-J. O." surname="Saarinen">
              <organization/>
            </author>
            <date year="2011" month="November" day="04"/>
          </front>
        </reference>
        <reference anchor="Sybil" target="https://link.springer.com/chapter/10.1007/3-540-45748-8_24">
          <front>
            <title>The Sybil Attack</title>
            <author initials="J." surname="Douceur">
              <organization/>
            </author>
            <date year="2002" month="October" day="10"/>
          </front>
        </reference>
        <reference anchor="OHTTP">
          <front>
            <title>Oblivious HTTP</title>
            <author fullname="Martin Thomson" initials="M." surname="Thomson">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="26" month="September" year="2022"/>
            <abstract>
              <t>   This document describes a system for forwarding encrypted HTTP
   messages.  This allows a client to make multiple requests to an
   origin server without that server being able to link those requests
   to the client or to identify the requests as having come from the
   same client, while placing only limited trust in the nodes used to
   forward the messages.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ohai-ohttp-05"/>
        </reference>
        <reference anchor="Feldman">
          <front>
            <title>A practical scheme for non-interactive verifiable secret sharing</title>
            <author fullname="Paul Feldman" initials="P." surname="Feldman">
              <organization/>
            </author>
            <date month="October" year="1987"/>
          </front>
          <seriesInfo name="28th Annual Symposium on Foundations of Computer Science (sfcs" value="1987)"/>
          <seriesInfo name="DOI" value="10.1109/sfcs.1987.4"/>
        </reference>
        <reference anchor="Prio">
          <front>
            <title>Privacy Preserving Measurement</title>
            <author fullname="Tim Geoghegan" initials="T." surname="Geoghegan">
              <organization>ISRG</organization>
            </author>
            <author fullname="Christopher Patton" initials="C." surname="Patton">
              <organization>Cloudflare</organization>
            </author>
            <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
              <organization>Mozilla</organization>
            </author>
            <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
              <organization>Cloudflare</organization>
            </author>
            <date day="7" month="March" year="2022"/>
            <abstract>
              <t>   There are many situations in which it is desirable to take
   measurements of data which people consider sensitive.  In these
   cases, the entity taking the measurement is usually not interested in
   people's individual responses but rather in aggregated data.
   Conventional methods require collecting individual responses and then
   aggregating them, thus representing a threat to user privacy and
   rendering many such measurements difficult and impractical.  This
   document describes a multi-party privacy preserving measurement (PPM)
   protocol which can be used to collect aggregate data without
   revealing any individual user's data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-gpew-priv-ppm-01"/>
        </reference>
      </references>
    </references>
    <section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The authors would like to thank the authors of the original <xref target="STAR"/> paper, which forms the basis for this document.</t>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA+19a3MbR5Lg9/4VtXRcmFgB4MOyLXNM71AUJfEsiVyCno0J
WUc00AWih0A3tqtBECPrfsv9lvtll6969AMQ5dnduLgzI2yR3V2vrHxnVlav
14vKtJzpI7UzuD65OlIvUlMW6WhZ6kQN9LjQpRpM4yLNbtUkL9Rlkd7HpVbX
00KbaT5L1MntbaFv4zLNM3WlF3lRwrc7UTwaFfpeut2JxtDoNi/WR8qUSQRD
6Hh+pM7Prl9GUZKPs3gOU0iKeFL2EmN6poyL3v5hlC6KI1UWS1Me7u//AA9i
aHikBmenEXQSZ8lNPMszaLrWJjLzuChv/n2Zl9ocqSyPFumRel/m464yMK1C
Twz8tp7jLx+iKF6W07w4ilQvUvDDU9g5mekH9SK+TxOTZzv0Ji9u4yz9Oy3x
SD0v4nutBvmkXMFk6AM9j9MZtI2hbT+Rtj8c/vkWn/fH+XynNshgClDM1M/x
cqYG8TQdfeFAhtrfQXODrTcPdKlLXahBtk508YVjLLT58whfc7+1jk+nBSBK
vphC9yd99W95nrT1fzrLl8lkVut7HK/+PNXxAhBllJamn+kyirK8mEOre30E
Y6lXp28BFy/O+wf7/e/2D5/tvTsfXPcHl/1n+/u9b569iKI0m/gWShH20iD/
OfiMPSfw5ZE63D887O0/7R3s83BxcatLGG9algtztLcXFw/pfR/gsBePzN7h
wf4PsIj9759yHw7r6Ken0gxwFSBoUa764rIvm1d9fNZX/7pMi7vq0//eV690
pgu9fKi+eN1Xr+MkiZO0+vx5X71J7wGZSgMvru20LADxAQBGI9zyLOlR5wyY
i4zAkwNYiyps9p+2Q8XcZ724GAPi6n6ZF4si/5selwQmeLUnf5u9RJv0Nust
4oUu9uDDHj/oL5LJFgBeAQBhm2Y6STNdffWur97G5VSvWoG7vtcFvxBMuNKz
eF2FQ0pY7FCFvlAX0PA+1asaZhxUVm8Xv1qt+vFiMSNa2kvH2N8esD2zx33f
SN831PeN7fvmhR5jn7h4JAqi1srcmH6fF/nKCI7Uh3YkjB2cvBgMqmu70uk8
vk0zpIcqeQDxAq9F5FcxMKkJEDrwW/U2L7T6CwANXs00AmWeIg2q0VqdJAl+
fgI7pLMyHafluqtO86KAncUXZ0WRF8CDsZ8rnSzH+PAK/srnmTYGnv07YLWe
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
ZMAAAA==

-->

</rfc>
