<?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.7.7 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-mouris-cfrg-mastic-02" category="info" consensus="true" submissionType="IRTF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.20.0 -->
  <front>
    <title abbrev="Mastic">The Mastic VDAF</title>
    <seriesInfo name="Internet-Draft" value="draft-mouris-cfrg-mastic-02"/>
    <author fullname="Hannah Davis">
      <organization>Seagate</organization>
      <address>
        <email>hannah.e.davis@seagate.com</email>
      </address>
    </author>
    <author fullname="Dimitris Mouris">
      <organization>Nillion</organization>
      <address>
        <email>dimitris@nillion.com</email>
      </address>
    </author>
    <author initials="C." surname="Patton" fullname="Christopher Patton">
      <organization>Cloudflare</organization>
      <address>
        <email>chrispatton+ietf@gmail.com</email>
      </address>
    </author>
    <author fullname="Pratik Sarkar">
      <organization>Supra Research</organization>
      <address>
        <email>pratik93@bu.edu</email>
      </address>
    </author>
    <author fullname="Nektarios G. Tsoutsos">
      <organization>University of Delaware</organization>
      <address>
        <email>tsoutsos@udel.edu</email>
      </address>
    </author>
    <date year="2024" month="March" day="04"/>
    <area>IRTF</area>
    <workgroup>Crypto Forum</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 107?>

<t>This document describes Mastic, a two-party VDAF for the following aggregation
task: each client holds a string, and the collector wishes to count how many of
these strings begin with a given prefix. Such a VDAF can be used to solve the
private heavy hitters problem, where the goal is to compute the subset of the
strings that occur most frequently without learning which client holds which
string. This document also describes different modes of operation for Mastic
that support additional use cases and admit various performance and security
trade-offs.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-mouris-cfrg-mastic/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Crypto Forum Research Group mailing list (<eref target="mailto:cfrg@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/search/?email_list=cfrg"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/cfrg/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/jimouris/draft-mouris-cfrg-mastic"/>.</t>
    </note>
  </front>
  <middle>
    <?line 118?>

<section anchor="introduction">
      <name>Introduction</name>
      <ul empty="true">
        <li>
          <t>TO BE REMOVED BY RFC EDITOR: The source for this draft and the reference code
can be found at https://github.com/jimouris/draft-mouris-cfrg-mastic.</t>
        </li>
      </ul>
      <t>The "private heavy hitters" problem is to recover the most popular measurements
generated by clients without learning the measurements themselves. For
example, a browser vendor might want to know which websites are visited most
frequently without learning which clients visited which websites.</t>
      <t>For string measurements, this problem can be solved by combining a binary
search with a subroutine solving the "private prefix histogram" subproblem. The
goal of this subproblem is to compute a histogram over the fixed-length
prefixes of client measurement strings without revealing the prefixes. The
subproblem can be solved using a Verifiable Distributed Aggregation Function,
or VDAF <xref target="VDAF"/>. In particular, the Poplar1 VDAF
described in <xref section="8" sectionFormat="of" target="VDAF"/> describes how to distribute this
computation amongst a small set of aggregation servers such that, as long as
one server is honest, no individual measurement is observed in the clear. At
the same time, Poplar1 allows the servers to detect and remove any invalid
measurements that would otherwise corrupt the computation of the histogram.</t>
      <t>This document describes Mastic <xref target="MPDST24"/>, a VDAF that can be used as a drop-in
replacement for Poplar1, while offering improved performance and communication
cost. Based on the PLASMA protocol <xref target="MST24"/>, the scheme's design also improves
communication complexity, requiring just one round for report preparation
compared to Poplar1's two rounds. Mastic is specified in <xref target="vdaf"/>.</t>
      <t>Mastic is also highly extensible. Like Poplar1, Mastic's core functionality is
to compute prefix histograms. Mastic allows this basic counter data type to be
generalized to support a wide variety of secure aggregation tasks. In
particular, Mastic supports any data type that can be expressed as a type for
the Prio3 VDAF <xref section="7" sectionFormat="of" target="VDAF"/>. For example, the counter could be
replaced with a bounded weight (say, representing how much time was sepnt on a
website) such that the heaviest "weight" measurements are recovered. We
describe this mode of operation in <xref target="weighted-heavy-hitters"/>.</t>
      <t>This generalization also allows Mastic to support another important use case. A
desirable feature for a secure aggregation systems is the ability to "drill
down" on the data by splitting up the aggregate based on specific properties of
the clients. For example, a browser vendor may wish to partition aggregates by
version (different versions of the browser may have different performance
profiles) or geographic location. We will call these properties "attributes".
[CP: See https://github.com/ietf-wg-ppm/draft-ietf-ppm-dap/issues/489 for the
discussion that originally motivated this idea.]</t>
      <t>This requires representing the information in such a way that that measurements
submitted by clients with the same attribute are aggregated together. Prio3 can
be adapted for this purpose, but the communication cost would be linear in the
number of possible distinct attributes, which quickly becomes prohibitive if
the number of attributes is large or subject to change over time. For example,
attributes might encode the client's user agent (<xref section="10.1.5" sectionFormat="of" target="RFC9110"/>), which has many possible values that tend to change over time.</t>
      <t>Mastic encodes the attribute and measurement such that, for an arbitrary
sequence of attributes, the reports can be "queried" to reveal the aggregate
for each attribute without learning the attribute or measurement of any client.
We describe this mode of operation in <xref target="attribute-based-metrics"/>.</t>
      <t>Finally, we describe two modes of operation for Mastic that admit useful
performance and security trade-offs.</t>
      <t>First, we describe an optimization for plain (i.e., non-weighted) heavy hitters
that, in the best case, reduces the communication cost of preparation from
linear in the number of reports to constant, leading to a dramatic improvement
in performance compared to Poplar1. This best-case behavior is observed when
all clients behave honestly: if a fraction of the clients submit invalid
reports, then additional rounds of communication are required in order to
isolate the invalid reports and remove them. We describe this idea in detail in
<xref target="plain-heavy-hitters-with-proof-aggregation"/>.</t>
      <t>Second, in <xref target="malicious-security-with-three-aggregators"/> we describe an
enhancement that allows Mastic to achieve robustness in the presence of a
malicious Aggregator. Rather than two aggregation servers as in the previous
modes, this mode of operation involves three Aggregators, where every pair of
Aggregators communicate over a different channel. Using a third Aggregator, we
can lift the security of Mastic from the semi-honest setting to malicious
security. While more complex to implement than 2-party Mastic, this mode allows
achieves "full security", where both privacy and robustness hold in the honest
majority setting.</t>
      <section anchor="motivating-applications">
        <name>Motivating Applications</name>
        <t>Mastic has two modes of operation, i.e., Weighted Heavy-Hitters
<xref target="weighted-heavy-hitters"/> and Attribute-Based Metrics
<xref target="attribute-based-metrics"/>. We describe one applications of interest for each
mode.</t>
        <section anchor="NEL">
          <name>Network Error Logging</name>
          <t>Network Error Logging (NEL) is a mechanism used by web browsers to report errors
that occur while attempting to establish a connection to a server <xref target="W3C23"/>. Some
of these errors are visible to the server, but not all: failures in DNS, TCP,
TLS, and HTTP can occur without the server having any visibility into the issue.
A small amount of connection errors is expected, even under normal operating
conditions; but a sudden, substantial increase in errors may be an indication of
an outage, or a configuration issue impacting millions of users. Without a
reporting mechanism like NEL, these events would only manifest in the server's
telemetry as a drop in overall traffic.</t>
          <t>NEL is particularly important for content delivery networks that handle HTTP
traffic for a large number of websites (typically millions). A content delivery
network acts as a reverse proxy between clients and origin servers that provides
a layer of caching and security services, such as DDoS protection.</t>
          <t>Reports are comprised of the URL the client attempted to navigate to (e.g.,
"https://example.com"), the type of error that occurred, and metadata related to
the attempt, such as the time that elapsed between when the connection attempt
began and the error was observed (e.g., Section 7 of <xref target="W3C23"/>). Clients may
also report successful connection attempts to give the server a sense of the
error rate. The exact client behavior is determined by the reporting policy
specified by the server (see Section 5.1 of <xref target="W3C23"/>).</t>
          <t>NEL data is privacy-sensitive for two reasons. First, it exposes information
that the server would not otherwise have access to, which can be abused to probe
the client's network configuration as described in Section 9 of <xref target="W3C23"/>.
Second, for operational reasons, the reporting endpoint may be organizationally
separated from the server (i.e., run on different cloud infrastructures),
leading to an increased risk of the client's browsing history being exposed
(e.g., in a data breach).</t>
          <t>MPC helps mitigate these risks by revealing to the endpoint only the information
it needs to fulfill its service level objectives. This means, of course, we must
be satisfied with limited functionality. Fortunately, Mastic allows us to
preserve the most important functionality of NEL while minimizing privacy loss.</t>
          <t>Mastic can be applied to a simplified version of NEL where each client reports
a tuple <tt>(dom, err)</tt> consisting of a domain name dom (e.g., "example.com") and
a value err that represents an error (e.g., "dns.unreachable") or an indication
that no error occurred (e.g., "ok"). Notably, this can be easily extended in
Mastic to represent more elaborate metrics. e.g., where each weight includes
the time it took each browser to report the error (and the aggregate is the
average error reporting time), user agent (browser type and version), etc.
However, our main goal is to understand 1) the distribution of errors and 2)
which domains are impacted.</t>
          <t>We expect there to be a large number of distinct domain names (millions in the
case of content delivery networks) and only a small number of error variants
(the NEL spec <xref target="W3C23"/> defines 30 variants). The following Mastic parameters
are suitable for this application.</t>
          <t>Each input would encode the domain <tt>dom</tt> encoded with a number of bits
sufficient to uniquely represent most of the domains; and each weight would
represent the error variant <tt>dom</tt>. To compute the distribution of errors, we
would encode each error variant as a distinct bucket of a histogram so that
<tt>[1, 0, 0, ...]</tt> represents "ok", <tt>[0, 1, 0, ...]</tt> represents
"dns.unreachable", and so on. (See ection 6 of <xref target="W3C23"/>.), This is similar to
Prio3Histogram (<xref section="7" sectionFormat="of" target="VDAF"/>.)</t>
        </section>
        <section anchor="attribute-based-telemetry">
          <name>Attribute-Based Browser Telemetry</name>
          <t>Web browsers collect telemetry generated by users as they navigate the web to
gain insights into trends that guide product decisions. In many cases, Prio3
(<xref section="7" sectionFormat="of" target="VDAF"/>) can be used to privately aggregate this telemetry.
However, this comes at the cost of flexibility.</t>
          <t>For example, Prio3 can be used to collect page load metrics from Browser for a
list of known popular sites (e.g., "example.com"). The purpose of these metrics
is to detect if changes to these sites cause regressions that might be
correlated with an increased average load time or error rate. A subtle, but
important requirement for this system is the ability to break down the metrics
by client attributes. Suppose for example that we want to aggregate by 1) the
software version, and 2) the information about the client's location.</t>
          <t>Mastic provides a simple solution to this problem. For the sake of presentation,
we consider a simplified use case (the same approach can be applied to any
aggregation task for which Prio3 (<xref section="7" sectionFormat="of" target="VDAF"/>) is suitable). Each
client reports a tuple <tt>(ver, loc, site, time)</tt> where: <tt>ver</tt> is a string
representing the client's software version (e.g., "Browser/122.0"); <tt>loc</tt> is a
string encoding its country code (e.g., "GR", "US", "IN", etc.); <tt>site</tt> is one
of a fixed set of sites (e.g., "example.com", "example.org", etc.); and <tt>time</tt>
is the load time of the site in seconds. The version and location are included
in the Mastic input; the site and load time are encoded by the corresponding
weight. Notably, this is just one example of what Mastic can do; the same idea
can be applied to other types of metrics.</t>
          <t>Compared to the private NEL application in <xref target="NEL"/>, the number of possible
inputs here is relatively small: there are less than 200 country codes and a
handful of browser versions in wide use at any given time. This means the
aggregators can enumerate a set of inputs of interest and evaluate them
immediately. Consider the following parameters for Mastic, in its
attribute-based metrics mode of operation <xref target="attribute-based-metrics"/>:</t>
          <ul spacing="normal">
            <li>
              <t>Attributes: Two-letter country codes can easily be encoded in 2 bytes.
Likewise, the number of distinct browser versions is easily less than 216, so
2 bytes are sufficient. Therefore, each attribute can be encoded with just
<tt>32</tt> bits.</t>
            </li>
            <li>
              <t>Values: Similar to private NEL, each weight is a <tt>0</tt>-vector except for a
single <tt>1</tt> representing a bucket in a histogram. We represent <tt>(site, time)</tt>
as a histogram bucket as follows. First, we quantize time (in seconds) into
one of four buckets: <tt>[0, 0.1)</tt>, <tt>[0.1, 1)</tt>, <tt>[1, 5)</tt>, and <tt>[5, inf)</tt>. Let <tt>0
&lt; t &lt;= 4</tt> denote the time bucket for <tt>time</tt>. Next, suppose we wish to track
metrics for <tt>25</tt> sites. Let <tt>0 &lt; s &lt;= 25</tt> denote the index of <tt>site</tt> in this
list. Then the index of 1 is simply <tt>t * s</tt>.</t>
            </li>
          </ul>
        </section>
      </section>
    </section>
    <section anchor="conventions">
      <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>
      <?line -18?>

<t>This document uses the following terms as defined in <xref target="VDAF"/>:
"Aggregator",
"Client",
"Collector",
"aggregate result",
"aggregate share",
"aggregation parameter",
"batch",
"input share",
"measurement",
"order",
"output share",
"prep message",
"prep share", and
"report".</t>
      <t>In Mastic, a Client's VDAF measurement comprises two components, which we
denote <tt>alpha</tt> and <tt>beta</tt>. The function that each component serves depends on
the use case: for weighted (<xref target="weighted-heavy-hitters"/>) and plain
(<xref target="plain-heavy-hitters-with-proof-aggregation"/>) heavy-hitters, we shall refer
to <tt>alpha</tt> as the "payload" and <tt>beta</tt> as the payload's "weight"; for
attribute-based-metrics (<xref target="attribute-based-metrics"/>), we shall refer to
<tt>alpha</tt> as the "attribute" and to <tt>beta</tt> as the "payload". When doing so is
unambiguous, we may also refer to the payload as the "measurement".</t>
      <t>The DPF tree always has as a root the "empty string", which in turn has strings
"0" and "1" as the left and right children, respectively.</t>
    </section>
    <section anchor="preliminaries">
      <name>Preliminaries</name>
      <t>Mastic makes use of three primitives described in the base VDAF specification
<xref target="VDAF"/>: finite fields, eXtendable Output Functions (XOFs), and Fully Linear
Proofs (FLPs). It also makes use of a fourth primitive, which extends the
security properties of Incremental Distributed Point Functions (IDPFs), also
described in the base specification. All four primitives are described below.</t>
      <section anchor="field">
        <name>Finite fields</name>
        <t>An implementation of the <tt>Field</tt> interface in <xref section="6.1" sectionFormat="of" target="VDAF"/> is
required. This object implements arithmetic in a prime field with a modulus
suitable for use with the Number Theoretic Transform (called "FFT-friendly" in
<xref target="VDAF"/>).</t>
      </section>
      <section anchor="xof">
        <name>XOF</name>
        <t>An implementation of the <tt>Xof</tt> interface in <xref section="6.2" sectionFormat="of" target="VDAF"/> is
required. This object implements an XOF that takes a short seed and some
auxiliary data as input and outputs a string of any length required for the
application.</t>
      </section>
      <section anchor="flp">
        <name>FLP</name>
        <t>An implementation of the <tt>Flp</tt> interface in <xref section="7.1" sectionFormat="of" target="VDAF"/> is
required. This object implements a zero-knowledge proof system used to verify
that the measurement conforms to the data type required by the application: for
weighted heavy hitters (<xref target="weighted-heavy-hitters"/>), FLPs are used to check the
weight; in attribute-based-metrics (<xref target="attribute-based-metrics"/>), they are used
to check the measurement itself.</t>
        <t>The Client generates a proof and sends secret shares of this proof to each
Aggregator. Verification is split into two phases. In the first phase, each
Aggregator "queries" its share of the value and proof to obtain its "verifier
share". In the second phase, the Aggregators sum up the verifier shares and use
the sum to decide if the input is valid.</t>
      </section>
      <section anchor="order">
        <name>Ordering function <tt>order</tt></name>
        <t>The function <tt>order(list[Vidpf.Field]) -&gt; Integer</tt> defines a total ordering of
sums of weights. For plain heavy hitters, <tt>order</tt> is the identity function.</t>
      </section>
      <section anchor="vidpf">
        <name>Verifiable IDPF (VIDPF)</name>
        <t>Function secret sharing <xref target="GI14"/> allows secret sharing of the output of a
function <tt>f()</tt> into additive shares, where each function share is represented by
a separate key. These keys enable the Aggregators to efficiently generate an
additive share of the function’s output <tt>f(x)</tt> for a given input <tt>x</tt>.
Distributed Point Functions (DPF) are a particular case of function secret
sharing where <tt>f()</tt> is a "point function" for which <tt>f(x) = beta</tt> if <tt>x</tt> equals
<tt>alpha</tt> and <tt>0</tt> otherwise for some <tt>alpha</tt>, <tt>beta</tt>. The computation is
distributed in such a way that no one party knows either the point or what it
evaluates to.</t>
        <t>An IDPF (<xref section="8.1" sectionFormat="of" target="VDAF"/>) generalizes DPF by secret-sharing an
"incremental point function", i.e., the "point" in DPF is now a path on a full
binary tree from the root to one of the leaves. Here we take <tt>alpha</tt> to be a bit
string of fixed length, and we have that <tt>f(x) = beta</tt> if <tt>x</tt> is a prefix of
<tt>alpha</tt> and <tt>0</tt> otherwise.</t>
        <t>An IDPF has two main operations. The first is the key-generation algorithm,
which is run by the Client. It takes as input <tt>alpha</tt> and <tt>beta</tt> and returns
two values: a list of "key shares", one for each Aggregator; and the "public
share", to be distributed to both Aggregators. The second is the key-evaluation
algorithm, run by each Aggregator. It takes as input a candidate prefix string
<tt>x</tt>, the public share, and the Aggregator's key share and returns the
Aggregator's share of <tt>f(x)</tt>.</t>
        <t>Shares of the IDPF outputs can be aggregated together across multiple reports.
This is used in Poplar1 (<xref section="8" sectionFormat="of" target="VDAF"/>) to solve the private prefix
histogram problem. IDPFs are private in the sense that each Aggregator learns
nothing about the underlying inputs beyond the value of this sum. However,
IDPFs on their own do not provide robustness. For example, it is possible for a
malicious Client to fool the Aggregators into accepting malformed counter
(i.e., a value other than <tt>0</tt> or <tt>1</tt>). It is also possible for a Client to
"vote twice" by constructing key shares for which <tt>f(x) = f(x') = beta</tt>, where
<tt>x</tt> and <tt>x'</tt> are distinct, equal-length candidate prefixes.</t>
        <t>To mitigate these issues, IDPF must be composed with some interactive mechanism
for ensuring the IDPF outputs are well-formed. Mastic uses the VIDPF of
<xref target="MST24"/> for this purpose, which endows IDPF with the following properties:</t>
        <ol spacing="normal" type="1"><li>
            <t>One-hot Verifiability: There is at most one prefix of each length whose
value under f is non-zero. In particular, the output shares at each level
are additive shares of a one-hot vector.</t>
          </li>
          <li>
            <t>Path Verifiability: The One-hot Verifiability property alone is not
sufficient to guarantee that the keys are well-formed. The Aggregators still
need to verify that: a) the non-zero output values are across a single path
in the tree, and b) the value of the root node is consistently propagated
down the VIDPF tree. For example, if the root value is <tt>beta</tt>, then there is
only a single path from root to the leaves with non-zero values, and all
such values equal <tt>beta</tt>.</t>
          </li>
        </ol>
        <t>Below we describe the syntax of VIDPF; in <xref target="vidpf-construction"/> we specify the
concrete construction of <xref target="MST24"/>.</t>
        <t>A concrete <tt>Vidpf</tt> defines the types and constants enumerated in
<xref target="vidpf-param"/>. In addition, it implements the following methods:</t>
        <ul spacing="normal">
          <li>
            <t><tt>Vidpf.gen(alpha: Unsigned, beta: list[Vidpf.Field], binder: bytes, rand:
bytes) -&gt; tuple[PublicShare, list[bytes]]</tt> is the randomized key generation
algorithm. (<tt>rand</tt> denotes the random bytes consumed by the algorithm.) Its
inputs are the VIDPF index <tt>alpha</tt> (defined the same way as "IDPF index" in
<xref section="8" sectionFormat="of" target="VDAF"/>), the output value <tt>beta</tt>, and a binder string.  The
value of <tt>alpha</tt> <bcp14>MUST</bcp14> be in range <tt>[0, 2^Vidpf.BITS)</tt>; and <tt>len(rand)</tt> <bcp14>MUST</bcp14>
be <tt>Vidpf.RAND_SIZE</tt>. The outputs are the public share and the list of key
shares, one for each Aggregator. The length of each key share <bcp14>MUST</bcp14> be
<tt>Vidpf.KEY_SIZE</tt>.</t>
          </li>
          <li>
            <t><tt>Vidpf.eval(agg_id: Unsigned, public_share: Vidpf.PublicShare, key_share:
bytes, level: Unsigned, prefixes: tuple[Unsigned, ...], binder: bytes) -&gt;
tuple[list[Vidpf.Field], bytes]</tt> is the deterministic key evaluation
algorithm. It takes as input the Aggregator ID (which <bcp14>MUST</bcp14> be in range <tt>[0,
Vidpf.SHARES)</tt>, the public share, the Aggregator's key share, the VIDPF level
(defined the same way as "IDPF level" in <xref section="8" sectionFormat="of" target="VDAF"/>), the list of
prefixes to evaluate, and a binder string. Its outputs are the VIDPF output
share and the VIDPF proof.</t>
          </li>
        </ul>
        <t>The verifiability properties are guaranteed as long as each Aggregator computes
the same VIDPF proof. Note that One-hot Verifiability and Path Verifiability
are not sufficient to ensure robustness of Mastic; we will also need to ensure
that the <tt>beta</tt> chosen by the Client is "in range". We will rely on FLPs
(<xref target="flp"/>) for this purpose. (<xref target="MST24"/> describe a simple <tt>range(2)</tt> check, but
we would like more sophisticated range checks for Mastic.)</t>
        <t>Note that <tt>Vidpf</tt> is less general than <tt>Idpf</tt> as defined <xref section="8" sectionFormat="of" target="VDAF"/>
in that <tt>beta</tt> value is the same for each level of the tree. This constraint is
necessary for Path Verifiability.</t>
        <table anchor="vidpf-param">
          <name>Constants and types defined by a concrete VIDPF.</name>
          <thead>
            <tr>
              <th align="left">Parameter</th>
              <th align="left">Description</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">SHARES</td>
              <td align="left">Number of VIDPF keys output by VIDPF-key generator</td>
            </tr>
            <tr>
              <td align="left">BITS</td>
              <td align="left">Length in bits of each input string</td>
            </tr>
            <tr>
              <td align="left">VALUE_LEN</td>
              <td align="left">Number of field elements of each output value</td>
            </tr>
            <tr>
              <td align="left">RAND_SIZE</td>
              <td align="left">Size of the random string consumed by the VIDPF-key generator. Equal to twice the XOF's seed size.</td>
            </tr>
            <tr>
              <td align="left">KEY_SIZE</td>
              <td align="left">Size in bytes of each VIDPF key</td>
            </tr>
            <tr>
              <td align="left">Field</td>
              <td align="left">Implementation of <tt>Field</tt> (<xref target="field"/>) used for each value</td>
            </tr>
            <tr>
              <td align="left">PublicShare</td>
              <td align="left">Type of the VIDPF public share</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="vdaf">
      <name>Definition of <tt>Mastic</tt></name>
      <ul empty="true">
        <li>
          <t>NOTE We are pretty confident about the overall structure of the VDAF, but
there are some details to work out and security analysis to do. In the
meantime, check out the current reference implementation at
https://github.com/jimouris/draft-mouris-cfrg-mastic/tree/main/poc.</t>
        </li>
      </ul>
      <t>This section describes Mastic, a VDAF suitable for a plethora of aggregation
functions including sum, mean, histograms, heavy hitters, weighted
heavy-hitters (see <xref target="weighted-heavy-hitters"/>), attribute-based metrics (see
<xref target="attribute-based-metrics"/>), linear regression and more. Mastic allows
computing functions <em>à la</em> Prio3 VDAF <xref section="7" sectionFormat="of" target="VDAF"/>.</t>
      <t>The core component of Mastic is a VIDPF as defined in <xref target="vidpf"/>. VIDPFs
inherently have the "one-hot verifiability" property, meaning that in each
level of the tree there exists at most one non-zero value. To guarantee that
the Client's input is well-formed, Mastic first verifies that the Client
measurement is valid at the root level using an FLP, and then, it ensures
that this valid measurement is propagated correctly down the tree using the
one-hot verifiability and the path verifiability properties. Note that Mastic
allows the measurement to be of any type that can be verified by an arithmetic
circuit, not just a counter. For instance, the measurement can be a tuple of
values, a string, a secret number within a public range, etc.</t>
      <t>As described in <xref target="conventions"/>, each Client input consists of two components,
which we denote <tt>alpha</tt> and <tt>beta</tt>. At a high level, the Client generates VIDPF
keys that encodes <tt>alpha</tt> and <tt>beta</tt> and an FLP for the validity of <tt>beta</tt>.
Then the Client sends one VIDPF key to each Aggregator and also publishes the
VIDPF public share.
FLPs for certain validity functions, including most range proofs, rely on the
establishment of shared random coins (<tt>joint randomness</tt>) between the Client and
all Aggregators.
When it is necessary for the Client to generate joint randomness, it includes
generator seeds in its shares for each Aggregator, and the Aggregators confirm
that they have derived the same joint randomness during the FLP verification process.</t>
      <t>The Aggregators agree on an initial set of <tt>level</tt>-bit strings, where <tt>level &lt;
 BITS</tt>. We refer to these strings as "candidate prefixes". They evaluate their
 VIDPF key shares at each prefix in this set, to obtain an additive share of
 the VIDPF output.</t>
      <t>Mastic uses a combination of techniques to certify the validity of this output.</t>
      <ol spacing="normal" type="1"><li>
          <t>First, the Aggregators exchange VIDPF proofs. If they are equal, then
this implies One-hot Verifiability and Path Verifiability as described in
<xref target="vidpf"/>. One-hotness ensures that the VIDPF output contains <tt>beta</tt> at
most once (and every other output is <tt>0</tt>). Path Verifiability implies
that, if the previous level contained a non-zero value, then it is the
same value as the current level.</t>
        </li>
        <li>
          <t>Second, the Aggregators interactively verify the FLP (<xref target="flp"/>) to assert
that <tt>beta</tt> is valid. We instantiate the FLP with <tt>FlpGeneric</tt> from
<xref section="7.3" sectionFormat="of" target="VDAF"/>, which defines validity via an arithmetic
circuit (<xref section="7.3.2" sectionFormat="of" target="VDAF"/>) evaluated over (shares of) <tt>beta</tt>:
if the output of the circuit is <tt>0</tt>, then the value is said to be "valid";
otherwise it is "invalid".  </t>
          <t>
If none of the candidate prefixes are a prefix of <tt>alpha</tt>, then the VIDPF
output shares will not contain any shares of <tt>beta</tt>. Moreover, VIDPF
as specified in <xref target="vidpf-construction"/> does not as specified permit
evaluation at the root of the VIDPF tree. Instead, each Aggregator
computes a share of <tt>beta</tt> by evaluating the VIDPF tree at prefixes <tt>0</tt>
and <tt>1</tt> and <tt>level == 0</tt> and adding them up. One-hot Verifiability and
Path Verifiability imply that the sum is equal to the Aggregator's share
of <tt>beta</tt>.  </t>
          <ul empty="true">
            <li>
              <t>CP: An alternative way to spell this is to say that VIDPF evaluation
outputs a share of <tt>beta</tt>, which is what our current API does in the
reference code.</t>
            </li>
          </ul>
        </li>
      </ol>
      <t>The aggregate result is obtained by summing up the encoded measurement shares
for each prefix and computing some function of the sum. The aggregation
parameter contains the level and the set of candidate prefixes.</t>
      <t>The Aggregators send their aggregate shares to the Collector, who unshards them
to recover the results for each candidate prefix.</t>
      <section anchor="sharding">
        <name>Sharding</name>
        <ul empty="true">
          <li>
            <t>NOTE to be specified in full detail.</t>
          </li>
        </ul>
      </section>
      <section anchor="preparation">
        <name>Preparation</name>
        <ul empty="true">
          <li>
            <t>NOTE to be specified in full detail.</t>
          </li>
        </ul>
      </section>
      <section anchor="validity-of-aggregation-parameters">
        <name>Validity of Aggregation Parameters</name>
        <ul empty="true">
          <li>
            <t>NOTE to be specified in full detail.</t>
          </li>
        </ul>
      </section>
      <section anchor="aggregation">
        <name>Aggregation</name>
        <ul empty="true">
          <li>
            <t>NOTE to be specified in full detail.</t>
          </li>
        </ul>
      </section>
      <section anchor="unsharding">
        <name>Unsharding</name>
        <ul empty="true">
          <li>
            <t>NOTE to be specified in full detail.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="modes-of-operation-for-mastic">
      <name>Modes of Operation for <tt>Mastic</tt></name>
      <section anchor="weighted-heavy-hitters">
        <name>Weighted Heavy-Hitters</name>
        <ul empty="true">
          <li>
            <t>See <xref target="NEL"/> for a motivating application and
<tt>example_weighted_heavy_hitters_mode()</tt> in the reference implementation for an
end-to-end example.</t>
          </li>
        </ul>
        <t>The primary use case for Mastic is a variant of the heavy-hitters problem, in
which the prefix counts are replaced with a notion of weight that is specific to
some application. For example, when measuring the performance of an ad campaign,
it is useful to learn not only which ads led to purchases, but how much money
was spent.</t>
        <t>To support this use case, we view the Client's <tt>alpha</tt> value as its measurement
and the <tt>beta</tt> value as the measurement's "weight". The range of valid values
for <tt>beta</tt> are therefore determined by the FLP with which Mastic is
instantiated. Concretely, validity of <tt>beta</tt> is expressed by a validity circuit
(<xref section="7.3.2" sectionFormat="of" target="VDAF"/>).</t>
        <t>To compute the weighted heavy-hitters, the Collector and Aggregators proceed as
described in <xref section="8" sectionFormat="of" target="VDAF"/>, except that the threshold represents a
minimum weight rather than a minimum count. In addition:</t>
        <ol spacing="normal" type="1"><li>
            <t>The Aggregators <bcp14>MUST</bcp14> perform the range check (i.e., verify the FLP) at the
first round of aggregation and remove any invalid reports before proceeding.</t>
          </li>
          <li>
            <t>The level at which the reports are Aggregated <bcp14>MUST</bcp14> be strictly increasing.</t>
          </li>
        </ol>
        <section anchor="different-thresholds">
          <name>Different Thresholds</name>
          <ul empty="true">
            <li>
              <t>For an end-to-end example, see
<tt>example_weighted_heavy_hitters_mode_with_different_thresholds()</tt> in the
reference implementation.</t>
            </li>
          </ul>
          <t>So far, we have assumed that there is a single threshold for determining which
prefixes are "heavy". However, we can easily extend this to have different
thresholds for different prefixes. There exist use-cases where prefixes starting
with "000" may be significantly more popular than prefixes starting with "111".
Setting a low threshold may result in an overwhelmingly big set of heavy hitters
starting with "000", while setting a high threshold might prune anything
starting with "111". Consider the following examples:</t>
          <ol spacing="normal" type="1"><li>
              <t>Popular URLs: <tt>a.example.com</tt> receives a massive amount of traffic whereas
<tt>b.example.com</tt> may have lower traffic. To identify heavy-hitting search
queries on <tt>a.example.com</tt>, the Aggregators should set a high threshold,
while queries with different domain prefixes may require lower thresholds to
be considered popular.</t>
            </li>
            <li>
              <t>E-commerce: Grocery items are essential and have a high volume of sales. In
contrast, electronics, though popular, usually come with a higher price
compared to groceries. Meanwhile, luxury items command significantly higher
prices but generally experience lower sales volumes. To identify
heavy-hitting grocery items on an e-commerce website, Aggregators could use
different threshold for each of these categories. These thresholds are set to
ensure that only the top-selling grocery items qualify as heavy hitters while
electronics and luxury items are also considered heavy hitters on their own
categories.</t>
            </li>
          </ol>
          <t>To tackle this, Mastic can allow different prefixes having different thresholds.
When a specific prefix does not have an associated threshold, we first search if
any of its prefixes has a specified threshold, otherwise we use a default
threshold. For example, if the Aggregators have set the thresholds to be
<tt>{"000": 10, "111": 2, "default": 5}</tt> and the search for prefix "01", then
threshold 5 should be used. However, if the Aggregators search for prefix
"11101", then threshold 2 should be used.</t>
        </section>
      </section>
      <section anchor="attribute-based-metrics">
        <name>Attribute-based Metrics</name>
        <ul empty="true">
          <li>
            <t>See <xref target="attribute-based-telemetry"/> for a motivating application and
<tt>example_attribute_based_metrics_mode()</tt> in the reference implementation for
an end-to-end example.</t>
          </li>
        </ul>
        <t>In this mode of operation, we take the <tt>beta</tt> value to be the Client's
measurement and <tt>alpha</tt> to be an arbitrary "attribute". For a given sequence of
attributes, the goal of the Collector is to aggregate the measurements that
share the same attribute. This provides functionality similar to Prio3
<xref target="VDAF"/>, except that the aggregate is partitioned by Clients who share some
property. For example, the attribute might encode the Client's user agent
<xref target="RFC9110"/>.</t>
        <t>Mastic requires each <tt>alpha</tt> to have the same length (<tt>Vidpf.BITS</tt>). Thus, it
is necessary for each application to choose a scheme for encoding attributes as
fixed-length strings. The following scheme is <bcp14>RECOMMENDED</bcp14>. Choose a
cryptographically secure hash function, such as SHA256
<xref target="SHS"/>, compute the hash of the Client's input
string, and interpret each bit of the hash as a bit of the VIDPF index. [CP:
Are we comfortable recommending truncating the hash? Collisions aren't so bad
since the Client can just lie about <tt>alpha</tt> anyway. The main thing is to pick a
value for <tt>BITS</tt> that is large enough to avoid accidental collisions.]</t>
        <t>The Aggregators <bcp14>MAY</bcp14> aggregate a report any number times, but:</t>
        <ol spacing="normal" type="1"><li>
            <t>They <bcp14>MUST</bcp14> perform the range check (i.e., verify the FLP) the first time the
reports are aggregated and remove any invalid reports before aggregating
again.</t>
          </li>
          <li>
            <t>The aggregation parameter <bcp14>MUST</bcp14> specify the last level of the VIDPF tree
(i.e., <tt>level</tt> <bcp14>MUST</bcp14> be <tt>Vidpf.BITS-1</tt>).</t>
          </li>
        </ol>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE Figure out if these requirements are strict enough. We may need to
tighten aggregation parameter validity if we find out that aggregating at the
same level more than once is not safe.</t>
          </li>
        </ul>
      </section>
      <section anchor="plain-heavy-hitters-with-proof-aggregation">
        <name>Plain Heavy-Hitters with VIDPF-Proof Aggregation</name>
        <ul empty="true">
          <li>
            <t>NOTE to be specified in full detail. Proof aggregation is not yet implemented
by the reference code.</t>
          </li>
        </ul>
        <t>The total communication cost of using Mastic (or Poplar1 <xref target="VDAF"/>) for heavy
hitters is <tt>O(num_measurements * Vidpf.BITS)</tt> bits exchanged between the
Aggregators, where <tt>num_measurements</tt> is the number of reports being
aggregated. For plain heavy-hitters, this can be reduced to <tt>O(Vidpf.BITS)</tt> in
the best case.</t>
        <t>The idea is to take advantage of the feature of VIDPF evaluation whereby the
Aggregators compute identical VIDPF proofs if and only if the report is valid.
This allows the proofs themselves to be aggregated: if each report in a batch of
reports is valid, then the hash of their proofs will be equal as well; on the
other hand, if one report is invalid, then the hash of the proofs will not be
equal.</t>
        <t>To facilitate isolation of the invalid report(s), the proof strings are arranged
into a Merkle tree. During aggregation, the Aggregators interactively traverse
the tree to detect the subtree(s) containing invalid reports and remove them
from the batch.</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE Decide if we should spell this out in greater detail. This feature
is not compatible with <xref target="DAP"/>; if we wanted to
extend DAP to support this, then we'd need to specify the wire format of the
messages exchanged between the Aggregators.</t>
          </li>
        </ul>
        <t>In the worst case, isolating invalid reports requires <tt>O(num_measurements *
Vidpf.BITS)</tt> bits of communication and many <tt>Vidpf.BITS</tt> rounds of communication
between the Aggregators. However, this behavior would only be observed under
attack conditions in which the vast majority of Clients are malicious.</t>
        <t>In the simple case where the <tt>beta</tt> value is a constant (e.g., 1) we can replace
the FLP check with a simpler check. FLPs are not compatible with proof
aggregation the way VIDPFs are. In order to perform the range check without
FLPs, we use an extension of VIDPF described by <xref target="MST24"/>. The high-level idea
here is that the Aggregators can evaluate the empty string and verify that they
have shares of the constant <tt>beta</tt>. Next, as described in <xref target="vdaf"/>, we use the
"one-hot verifiability" and "path verifiability" checks to verify that each
level is non-zero at only a single point and that the same constant <tt>beta</tt> is
propagated down the tree correctly. Note that this trick is not suitable for
weighted heavy-hitters, since it expects that each <tt>beta</tt> value is constant
(e.g., 1).</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE Proof aggregation could work with plain Mastic, but we would need
to check the FLPs at the first round of aggregation, leading to best-case
communication cost would be <tt>O(num_measurements + Vidpf.BITS)</tt>. This would be
OK, but we would still want to support a mode for plain heavy-hitters that is
as good as we can get.</t>
            <t>One idea is to always do the PLASMA <tt>0</tt>/<tt>1</tt> check alongside the FLP. This
would be useful for another reason: Usually FLP decoding requires
<tt>num_measurements</tt> as a parameter. We currently don't support this because we
currently don't have a pure counter as part of the VIDPF output.</t>
          </li>
        </ul>
      </section>
    </section>
    <section anchor="malicious-security-with-three-aggregators">
      <name>Robustness Against a Malicious Aggregator</name>
      <t>Next, we describe an enhancement that allows Mastic to achieve robustness in the
presence of a malicious Aggregator. The two-party Mastic (as well as Poplar1) is
susceptible to additive attacks by a malicious Aggregator. In more detail, if
one of the Aggregators starts acting maliciously, they can arbitrarily add to
the aggregation result (simply by adding to their own aggregation shares)
without the honest Aggregator noticing.</t>
      <t>We can solve this problem in Mastic by using a technique from <xref target="MST24"/> that
lifts the two-party semi-honest secure PLASMA to the three-party maliciously secure
setting. Rather than having two Aggregators as in the previous setting, this
flavor involves three Aggregators, where every pair of Aggregators communicate
over a different channel. In essence, each pair of Aggregators will run one
session of the VDAF with unique randomness but on the same Client measurement.
The following changes are necessary:</t>
      <ol spacing="normal" type="1"><li>
          <t>The Client needs to generate three pairs of VIDPF keys all corresponding to
the same <tt>alpha</tt> and <tt>beta</tt> values. We represent the keys based on the
session as follows:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Session 0 (between Aggregators 0 and 1): <tt>key_01, key_10</tt></t>
            </li>
            <li>
              <t>Session 1 (between Aggregators 1 and 2): <tt>key_12, key_21</tt></t>
            </li>
            <li>
              <t>Session 2 (between Aggregators 2 and 0): <tt>key_20, key_02</tt></t>
            </li>
          </ol>
          <t>
Each pair of Aggregators cannot check that the Client input is consistent
across two sessions without the involvement of the third Aggregator. To
address this, we let two Aggregators (i.e., Aggregators 0 and 1) to run all
three sessions so that they can check that the Client input is consistent
across three sessions. The third Aggregator (i.e., Aggregator 2) is involved
as an attestator in two of the sessions. The check involves field addition
and subtraction and then hash comparisons.</t>
        </li>
        <li>
          <t>The Client sends the following keys to the Aggregators:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Aggregator 0 receives: <tt>key_01</tt>, <tt>key_02</tt>, and <tt>key_21</tt></t>
            </li>
            <li>
              <t>Aggregator 1 receives: <tt>key_10</tt>, <tt>key_12</tt>, and <tt>key_20</tt></t>
            </li>
            <li>
              <t>Aggregator 2 receives: <tt>key_21</tt> and <tt>key_20</tt></t>
            </li>
          </ol>
        </li>
        <li>
          <t>The Aggregators need to verify that the Client's input is consistent across
the different sessions (i.e., that all the keys correspond to the same
<tt>alpha</tt> and <tt>beta</tt> values). Aggregators 0 and 1 check that:
          </t>
          <ol spacing="normal" type="1"><li>
              <t>Their output shares of Session 0 minus their output shares of Session 1
 are shares of zero</t>
            </li>
            <li>
              <t>Their output shares of Session 1 minus their output shares of Session 2
are shares of zero.</t>
            </li>
          </ol>
          <t>
The subtraction is a local operation and verifying that two Aggregators possess
a sharing of zero requires exchanging one hash.</t>
        </li>
      </ol>
      <t>Using a third Aggregator, we can lift the security of Mastic from the
semi-honest setting to malicious security. While more complex to implement than
2-party Mastic, this mode allows achieves both privacy and robustness against a
malicious Aggregator.</t>
      <ul empty="true">
        <li>
          <t>NOTE to be specified in full detail.</t>
        </li>
      </ul>
    </section>
    <section anchor="vidpf-construction">
      <name>Definition of <tt>Vidpf</tt></name>
      <t>The construction of <xref target="MST24"/> builds on techniques from <xref target="CP22"/> to lift an IDPF
to a VIDPF with the properties described in <xref target="vidpf"/>. Instead of a 2-round
"secure sketch" MPC like that of Poplar1, the scheme relies on hashing.</t>
      <t>TODO(jimouris) Add an overview.</t>
      <ul empty="true">
        <li>
          <t>NOTE To be specified. The design is based on VIDPF from <xref target="MST24"/>.
https://github.com/jimouris/draft-mouris-cfrg-mastic/tree/main/poc for the
reference implementation.</t>
        </li>
      </ul>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>A security analysis of Mastic is provided in <xref target="MPDST24"/>.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <ul empty="true">
        <li>
          <t>NOTE to be specified.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="VDAF">
          <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="20" month="November" year="2023"/>
            <abstract>
              <t>   This document describes Verifiable Distributed Aggregation Functions
   (VDAFs), a family of multi-party protocols for computing aggregate
   statistics over user measurements.  These protocols are designed to
   ensure that, as long as at least one aggregation server executes the
   protocol honestly, individual measurements are never seen by any
   server in the clear.  At the same time, VDAFs allow the servers to
   detect if a malicious or misconfigured client submitted an
   measurement that would result in an invalid aggregate result.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-vdaf-08"/>
        </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="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="BBCGGI21" target="https://ia.cr/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="2021"/>
          </front>
          <seriesInfo name="IEEE S&amp;P 2021" value=""/>
        </reference>
        <reference anchor="CP22" target="https://iacr.org/cryptodb/data/paper.php?pubkey=31935">
          <front>
            <title>Lightweight, Maliciously Secure Verifiable Function Secret Sharing</title>
            <author initials="" surname="Leo de Castro">
              <organization/>
            </author>
            <author initials="" surname="Antigoni Polychroniadou">
              <organization/>
            </author>
            <date year="2022"/>
          </front>
          <seriesInfo name="EUROCRYPT 2022" value=""/>
        </reference>
        <reference anchor="GI14" target="https://link.springer.com/chapter/10.1007/978-3-642-55220-5_35">
          <front>
            <title>Distributed Point Functions and Their Applications</title>
            <author initials="N." surname="Gilboa">
              <organization/>
            </author>
            <author initials="Y." surname="Ishai">
              <organization/>
            </author>
            <date year="2014"/>
          </front>
          <seriesInfo name="EUROCRYPT 2014" value=""/>
        </reference>
        <reference anchor="MST24" target="https://ia.cr/2023/080">
          <front>
            <title>PLASMA: Private, Lightweight Aggregated Statistics against Malicious Adversaries</title>
            <author initials="" surname="Dimitris Mouris">
              <organization/>
            </author>
            <author initials="" surname="Pratik Sarkar">
              <organization/>
            </author>
            <author initials="" surname="Nektarios Georgios Tsoutsos">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="PETS 2024" value=""/>
        </reference>
        <reference anchor="MPDST24" target="https://ia.cr/2024/221">
          <front>
            <title>Mastic: Private Weighted Heavy-Hitters and Attribute-Based Metrics</title>
            <author initials="" surname="Dimitris Mouris">
              <organization/>
            </author>
            <author initials="" surname="Christopher Patton">
              <organization/>
            </author>
            <author initials="" surname="Hannah Davis">
              <organization/>
            </author>
            <author initials="" surname="Pratik Sarkar">
              <organization/>
            </author>
            <author initials="" surname="Nektarios Georgios Tsoutsos">
              <organization/>
            </author>
            <date year="2024"/>
          </front>
        </reference>
        <reference anchor="W3C23" target="https://www.w3.org/TR/network-error-logging">
          <front>
            <title>Network Error Logging</title>
            <author initials="" surname="W3C Working Group">
              <organization/>
            </author>
            <date year="2023"/>
          </front>
        </reference>
        <reference anchor="RFC9110">
          <front>
            <title>HTTP Semantics</title>
            <author fullname="R. Fielding" initials="R." role="editor" surname="Fielding"/>
            <author fullname="M. Nottingham" initials="M." role="editor" surname="Nottingham"/>
            <author fullname="J. Reschke" initials="J." role="editor" surname="Reschke"/>
            <date month="June" year="2022"/>
            <abstract>
              <t>The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems. This document describes the overall architecture of HTTP, establishes common terminology, and defines aspects of the protocol that are shared by all versions. In this definition are core protocol elements, extensibility mechanisms, and the "http" and "https" Uniform Resource Identifier (URI) schemes.</t>
              <t>This document updates RFC 3864 and obsoletes RFCs 2818, 7231, 7232, 7233, 7235, 7538, 7615, 7694, and portions of 7230.</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="97"/>
          <seriesInfo name="RFC" value="9110"/>
          <seriesInfo name="DOI" value="10.17487/RFC9110"/>
        </reference>
        <reference anchor="SHS">
          <front>
            <title>Secure Hash Standard</title>
            <author fullname="Quynh H. Dang" initials="Q." surname="Dang">
              <organization/>
            </author>
            <date month="July" year="2015"/>
          </front>
          <seriesInfo name="DOI" value="10.6028/nist.fips.180-4"/>
          <refcontent>National Institute of Standards and Technology</refcontent>
        </reference>
        <reference anchor="DAP">
          <front>
            <title>Distributed Aggregation Protocol for 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="14" month="September" year="2023"/>
            <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 distributed aggregation protocol
   (DAP) for privacy preserving measurement (PPM) which can be used to
   collect aggregate data without revealing any individual user's data.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-ppm-dap-07"/>
        </reference>
      </references>
    </references>
    <?line 843?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <ul empty="true">
        <li>
          <t>NOTE to be specified.</t>
        </li>
      </ul>
    </section>
  </back>
  <!-- ##markdown-source:
H4sIAAAAAAAAA7V963IbR7Lm/3qKWihiTc4BIIKyxzY19gwtUhbj6MIVKc/x
OrxCA90AetToxulukOJoFLGvsf/Os+y+yT7J5peZdekGKFuzu46JEQh01yUr
K/PLS2WNRiPT5m2RndjB9SqzL5Kmzef2p7PTpwOTzGZ1dkO/yLcDM0/abFnV
dyc2LxeVMWk1L5M1vZvWyaIdrattnTej+aJejtb8yujo2DTb2Tpvmrwq27sN
PXvx+vqpKbfrWVafmJRaPDHzqmyystk2J7att5mhPh+ZpM4S6huPD8xtVb9b
1tV2Q988qe82bWWfVvV2PTDvsjv6MT0x1o7sRdlmdZm1ozMMyNxk5TbDL/tf
tVZGNHidNVlSz1f2RzyHH9ZJXtAPmMpf8qxdjKt6ie/xFH2/attNc/LwIR7D
V/lNNnaPPcQXD6XBh3/O8MjbIm/a79AY2ljm7Wo7o1b+lgvFHt5HvoExybZd
VUQoO6I3rV1si0JI/iwpy2Rlz5KbvOGfqOukzP+etETpE3uVJUuiLf+SyWxW
/MY4G6d45y+NPDGeV+vd1s/ydd7SaOwLHtSeDl7mRUEf4g5SfekvpfwWNy3N
PlnRz221WWW1vUzaVt/vtvykqLbpgujaGf0cr274nX8Bqf+yxPf7R39ZU1Pv
7FVSv0vqfcTZburEulWPe9nwm98++stsO87S7W7TL7N3bVLnVWN/HNvrptq2
TbWPPG9K4om6yds7Wy3sWVYkt70JtfryX7ZpVnBnpqzqNb1/QzxrsMPCX9b+
8MOTH3+8OJ6ccBtuzz7Pl6v2NsP/2+tsvirzf99mjaVXiQj5Da2vfZYlN3f2
Wd7S1mgG/LZnKv5vRLuZdt7Z2P5Qldmq++05vr0rsu63z8b2SVXXOc149GM+
mzXdn1+O7Y95MauS7tc/j+1Fs0py/pZ3vj0+Op7wn01W51mDSZOEOD8/t1f/
+TL8SiRfZi2xsO67PBnP64f4+eHR5GuQ58nl8fG9pBmSXCvyeV5tm+KOtsZ8
W2f2J+pxkSezIrNPt+Ucy4af6qy1Vyta4nL5CWI9zyqbZvYJbdO66v50Wrb5
sipze1kVd8S19DFJq62ftOVZH+/M+vzN61dPXv98eR1+3p32vGYRM2c5ls4e
UoPJw02yyerxZrX582Y7I3n43aPJt4++AlV+vJh82aXKGe2/Op9t2yylAeZl
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
rsoOiNKCjKmkjFw+P716cYq0pIfIRxJ64Zz9Eh5SRzkZP7V1G7nHEAqXLAHB
GnIx1Yl9o75yyKI0UweAE/nwae2iTLaOvWHBhojmAHEiPdu1cZB8lskdCre8
NL0n1eu/2dbhLvtEPDJdA8vniZoH9nU4PngKK44z31/suTyV7Izff7ErrqN8
v3u38P/F9a6mc72r3X+9K1sct1XnXlJ7oAgRtFALA5cMmGbbcLUQvX3Sp+qK
nmskCL+/H1wQoskABG6AM02UQdgtsZAwwpq7qiTSmlS8z+7Eia7OQUQyaRT+
ar1IBmgU8EALRM/ufK5cFRz33dtsWbofmvg2TL37NVpTJJXMJfT8V9k9ruRM
uDTCemkjt67oVbQuLVmqJ4TTnux0xH20WnPAL0f3+ll2Wekm1CwuYSN5OKKU
Pmzcra+dS3w1zoAzD50E8p07fF3gUyCPWRTJDZ/q+Kyre3sRIn91r7n/6l5i
FY7NzV0h+H1NydFavoYO82yayLTgM1Es+OW6ozi9HoJU0QprQHV5RTJmbLre
RXczC0Mh59oMaRbagL8tzh8z0FKxNPamd3aUS2zHdztoiMsPas/pEEmy6VWZ
xwvcogQbKp/66AgS6stzkvAEudTyy5E9cFA3JuuRlau8TuwU5/qPJnK+fyKp
qMfh/cn+9yd6LYu+PzmW948n/P6j8P7x/veP+f0j9/7xkbx/dDzlNNPz+9iB
9iHDVNXhncNd4WBYqJnCLjipxYKN0LjbdeK9r5zuzq3IfuveJo0oKjeVprXc
dJALiC0Q5OrtMHXO7SM33+62LV2RFGEdPyi95SqIv39qmp02VfD3prM7RNyw
I04AkCLVPOtE7gIlSc1BFbkY3GW4dnqQkXqZIaeYXa6Sy25mk1vvf3dn6sTL
IHHynO/n9L7SzsGnbkKFHLTq5y175o/mdeQTKjyro+agMptelRCx7nHn7Un/
7cmRe3vSffvIMX5M0/7bxy69271iHu3mcO2pOLQn0NBdf118J1yCsPW8deAK
EQq0CCIlCCh/0TSJJs4suU86HY73MXfErW4drkX/dhL/iX2CbFrn5bZxavq+
xyZoTXzT/jeYP7pcv9HJ5Pd1cmzkkPpuN5L4fu1cRsq/bIDjNqAiuqolWJT+
OGxfOKByWiYrlcQlTNmeC7E5ca/wb6V44mgYn7rr3v7eu+7Nb91171/+fXfd
m9+6694B1+aTl9onDmGbvbjSfE7ade+wvla90EKz3XMi7uj0PYWjCEbkRSpJ
IOGwmcK6J5fHx0B1ldA9kfKXhp2XP3Vrt0UVU/o+A3foS0+ZCIY/HrElagaK
Bpt3GS59sLj/lkuASHrMwqF2cYZqfBTV7SWJC3wjEPb61dmrA3d4/9CepqlL
mkM+8dhT97pLXZFONOR8ySzv8YfMr4tvx/9PSgb40uCfTKl8gMNiwuIu506q
jKLS125dhM5heI3r6wK8uDzzRcIe2IvTl6c7Le7nPHp+NBoRSebv8Obp3JUP
ZwPWfDiRAEmWfjdYJEWTDe6NMI3N/wHBHRDQcaEAAA==

-->

</rfc>
