<?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.36 (Ruby 3.2.2) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wang-ppm-dap-taskprov-04" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.17.4 -->
  <front>
    <title>In-band Task Provisioning for DAP</title>
    <seriesInfo name="Internet-Draft" value="draft-wang-ppm-dap-taskprov-04"/>
    <author fullname="Shan Wang">
      <organization>Apple Inc.</organization>
      <address>
        <email>shan_wang@apple.com</email>
      </address>
    </author>
    <author fullname="Christopher Patton">
      <organization>Cloudflare</organization>
      <address>
        <email>chrispatton+ietf@gmail.com</email>
      </address>
    </author>
    <date year="2023" month="July" day="07"/>
    <area>Security</area>
    <workgroup>Privacy Preserving Measurement</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 46?>

<t>An extension for the Distributed Aggregation Protocol (DAP) is specified that
allows the task configuration to be provisioned in-band.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://wangshan.github.io/draft-wang-ppm-dap-taskprov/draft-wang-ppm-dap-taskprov.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-wang-ppm-dap-taskprov/"/>.
      </t>
      <t>
        Discussion of this document takes place on the
        Privacy Preserving Measurement Working Group mailing list (<eref target="mailto:ppm@ietf.org"/>),
        which is archived at <eref target="https://mailarchive.ietf.org/arch/browse/ppm/"/>.
        Subscribe at <eref target="https://www.ietf.org/mailman/listinfo/ppm/"/>.
      </t>
      <t>Source for this draft and an issue tracker can be found at
        <eref target="https://github.com/wangshan/draft-wang-ppm-dap-taskprov"/>.</t>
    </note>
  </front>
  <middle>
    <?line 52?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>The DAP protocol <xref target="DAP"/> enables secure aggregation
of a set of reports submitted by Clients. This process is centered around a
"task" that determines, among other things, the cryptographic scheme to use for
the secure computation (a Verifiable Distributed Aggregation Function
<xref target="VDAF"/>), how reports are partitioned into
batches, and privacy parameters such as the minimum size of each batch. Before a
task can be executed, it is necessary to first provision the Clients,
Aggregators, and Collector with the task's configuration.</t>
      <t>The core DAP specification does not define a mechanism for provisioning tasks.
This document describes a mechanism designed to fill this gap. Its key feature
is that task configuration is performed completely in-band. It relies solely on
the upload channel and the metadata carried by reports themselves.</t>
      <t>This method presumes the existence of a logical "task author" (written as
"Author" hereafter) who is capable of pushing configurations to Clients. All
parameters required by downstream entities (the Aggregators and Collector) are
encoded in an extension field of the Client's report. There is no need for
out-of-band task orchestration between Leader and Helpers, therefore making
adoption of DAP easier.</t>
      <t>The extension is designed with the same security and privacy considerations of
the core DAP protocol. The Author is not regarded as a trusted third party: It
is incumbent on all protocol participants to verify the task configuration
disseminated by the Author and opt-out if the parameters are deemed insufficient
for privacy. In particular, adopters of this extension should presume the
Author is under the adversary's control. In fact, we expect in a real-world
deployment that the Author may be implemented by one of the Aggregators or
Collector.</t>
      <t>Finally, the DAP protocol requires configuring the entities with a variety of
assets that are not task-specific, but are important for establishing
Client-Aggregator, Collector-Aggregator, and Aggregator-Aggregator
relationships. These include:</t>
      <ul spacing="normal">
        <li>The Collector's HPKE <xref target="RFC9180"/> configuration used by the Aggregators to
encrypt aggregate shares.</li>
        <li>Any assets required for authenticating HTTP requests.</li>
      </ul>
      <t>This document does not specify a mechanism for provisioning these assets; as in
the core DAP protocol; these are presumed to be configured out-of-band.</t>
      <t>Note that we consider the VDAF verification key <xref target="VDAF"/>, used by the
Aggregators to aggregate reports, to be a task-specific asset. This document
specifies how to derive this key for a given task from a pre-shared secret,
which in turn is presumed to be configured out-of-band.</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>
      <?line -18?>

<t>This document uses the same conventions for error handling as <xref target="DAP"/>. In
addition, this document extends the core specification by adding the following
error types:</t>
      <table>
        <thead>
          <tr>
            <th align="left">Type</th>
            <th align="left">Description</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">invalidTask</td>
            <td align="left">An Aggregator has opted out of the indicated task as described in <xref target="provisioning-a-task"/></td>
          </tr>
        </tbody>
      </table>
      <t>The terms used follow those described in <xref target="DAP"/>. The following new terms are
used:</t>
      <dl>
        <dt>Task configuration:</dt>
        <dd>
          <t>The non-secret parameters of a task.</t>
        </dd>
        <dt>Task author:</dt>
        <dd>
          <t>The entity that defines a task's configuration.</t>
        </dd>
      </dl>
    </section>
    <section anchor="definition">
      <name>The Taskprov Extension</name>
      <t>The process of provisioning a task begins when the Author disseminates the task
configuration to the Collector and each of the Clients. When a Client issues an
upload request to the Leader (as described in <xref section="4.3" sectionFormat="of" target="DAP"/>), it
includes in an HTTP header the task configuration it used to generate the
report. We refer to this process as "task advertisement". Before consuming the
report, the Leader parses the configuration and decides whether to opt-in; if
not, the task's execution halts.</t>
      <t>Otherwise, if the Leader does opt-in, it advertises the task to the Helpers
during the aggregate protocol (<xref section="4.4" sectionFormat="of" target="DAP"/>). In particular, it
includes the task configuration in an HTTP header of its first aggregate request
for that task. Before proceeding, the Helper must first parse the configuration
and decide whether to opt-in; if not, the task's execution halts.</t>
      <t>To advertise a task to its peer, a Taskprov participant includes a header
"dap-taskprov" with a request incident to the task execution. The value is the
<tt>TaskConfig</tt> structure defined below, expanded into its URL-safe, unpadded Base
64 representation as specified in Sections <xref target="RFC4648" section="5" sectionFormat="bare"/> and <xref target="RFC4648" section="3.2" sectionFormat="bare"/> of <xref target="RFC4648"/>.</t>
      <artwork><![CDATA[
struct {
    /* Info specific for a task. */
    opaque task_info<1..2^8-1>;

    /* A list of URLs relative to which an Aggregator's API endpoints
    can be found. Defined in I-D.draft-ietf-ppm-dap-04. */
    Url aggregator_endpoints<1..2^16-1>;

    /* This determines the query type for batch selection and the
    properties that all batches for this task must have. */
    QueryConfig query_config;

    /* Time up to which Clients are allowed to upload to this task.
    Defined in I-D.draft-ietf-ppm-dap-04. */
    Time task_expiration;

    /* Determines the VDAF type and its config parameters. */
    VdafConfig vdaf_config;
} TaskConfig;
]]></artwork>
      <t>The purpose of <tt>TaskConfig</tt> is to define all parameters that are necessary for
configuring an Aggregator. It includes all the fields to be associated with a
task. In addition to the Aggregator endpoints, maximum batch query count, and
task expiration, the structure includes an opaque <tt>task_info</tt> field that is
specific to a deployment. For example, this can be a string describing the
purpose of this task.</t>
      <t>The <tt>query_config</tt> field defines the DAP query configuration used to guide batch
selection. It is defined as follows:</t>
      <artwork><![CDATA[
struct {
    QueryType query_type;         /* I-D.draft-ietf-ppm-dap-04 */
    Duration time_precision;      /* I-D.draft-ietf-ppm-dap-04 */
    uint16 max_batch_query_count; /* I-D.draft-ietf-ppm-dap-04 */
    uint32 min_batch_size;
    select (QueryConfig.query_type) {
        case time_interval: Empty;
        case fixed_size:    uint32 max_batch_size;
    }
} QueryConfig;
]]></artwork>
      <t>The <tt>vdaf_config</tt> defines the configuration of the VDAF in use for this task. It
is structured as follows (codepoints are as defined in <xref target="VDAF"/>):</t>
      <artwork><![CDATA[
enum {
    prio3_count(0x00000000),
    prio3_sum(0x00000001),
    prio3_histogram(0x00000002),
    poplar1(0x00001000),
    (2^32-1)
} VdafType;

struct {
    DpConfig dp_config;
    VdafType vdaf_type;
    select (VdafConfig.vdaf_type) {
        case prio3_count: Empty;
        case prio3_sum: uint8; /* bit length of the summand */
        case prio3_histogram: uint64<8..2^24-8>; /* buckets */
        case poplar1: uint16; /* bit length of input string */
    }
} VdafConfig;
]]></artwork>
      <t>Apart from the VDAF-specific parameters, this structure includes a mechanism for
differential privacy (DP). This field, <tt>dp_config</tt>, is structured as follows:</t>
      <artwork><![CDATA[
enum {
    reserved(0), /* Reserved for testing purposes */
    none(1),
    (255)
} DpMechanism;

struct {
    DpMechanism dp_mechanism;
    select (DpConfig.dp_mechanism) {
        case none: Empty;
    }
} DpConfig;
]]></artwork>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: Should spell out definition of <tt>DpConfig</tt> for various differential
privacy mechanisms and parameters. See issue
<eref target="https://github.com/cfrg/draft-irtf-cfrg-vdaf/issues/94">#94</eref> for discussion.</t>
        </li>
      </ul>
      <t>The definition of <tt>Time</tt>, <tt>Duration</tt>, <tt>Url</tt>, and <tt>QueryType</tt> follow those in
<xref target="DAP"/>.</t>
      <section anchor="construct-task-id">
        <name>Deriving the Task ID</name>
        <t>When using the Taskprov extension, the task ID is computed as follows:</t>
        <artwork><![CDATA[
task_id = SHA-256(task_config)
]]></artwork>
        <t>where <tt>task_config</tt> is the <tt>TaskConfig</tt> structure disseminated by the Author.
Function SHA-256() is as defined in <xref target="SHS"/>.</t>
      </section>
      <section anchor="vdaf-verify-key">
        <name>Deriving the VDAF Verification Key</name>
        <t>When a Leader and Helper implement the <tt>task_prov</tt> extension in the context of a
particular DAP deployment, they <bcp14>SHOULD</bcp14> compute the shared VDAF verification key
<xref target="VDAF"/> as described in this section.</t>
        <t>The Aggregators are presumed to have securely exchanged a pre-shared secret
out-of-band. The length of this secret <bcp14>MUST</bcp14> be 32 bytes. Let us denote this
secret by <tt>verify_key_init</tt>.</t>
        <t>Let <tt>VERIFY_KEY_SIZE</tt> denote the length of the verification key for the VDAF
indicated by the task configuration. (See <xref section="5" sectionFormat="comma" target="VDAF"/>.)</t>
        <t>The VDAF verification key used for the task is computed as follows:</t>
        <artwork><![CDATA[
verify_key = HKDF-Expand(
    HKDF-Extract(
        task_prov_salt,  # salt
        verify_key_init, # IKM
    ),
    task_id,             # info
    VERIFY_KEY_SIZE,     # L
)
]]></artwork>
        <t>where <tt>task_prov_salt</tt> is defined to be the SHA-256 hash of the octet string
"dap-taskprov" and <tt>task_id</tt> is as defined in <xref target="construct-task-id"/>. Functions
HKDF-Extract() and HKDF-Expand() are as defined in <xref target="RFC5869"/>. Both functions
are instantiated with SHA-256.</t>
      </section>
      <section anchor="provisioning-a-task">
        <name>Configuring a Task</name>
        <t>Prior to participating in a task, each protocol participant must determine if
the <tt>TaskConfig</tt> disseminated by the Author can be configured. The participant
is said to "opt in" to the task if the derived task ID (see
<xref target="construct-task-id"/>) corresponds to an already configured task or the task ID
is unrecognized and therefore corresponds to a new task.</t>
        <t>A protocol participant <bcp14>MAY</bcp14> "opt out" of a task if:</t>
        <ol spacing="normal" type="1"><li>The derived task ID corresponds to an already configured task, but the task
configuration disseminated by the Author does not match the existing
configuration.</li>
          <li>The VDAF, DP, or query configuration is deemed insufficient for privacy.</li>
          <li>A secure connection to one or both of the Aggregator endpoints could not be
established.</li>
          <li>The task lifetime is too long.</li>
        </ol>
        <t>A protocol participant <bcp14>MUST</bcp14> opt out if the task has expired.</t>
        <t>The behavior of each protocol participant is determined by whether or not they
opt in to a task.</t>
      </section>
      <section anchor="hpke-config-no-task-id">
        <name>Supporting HPKE Configurations Independent of Tasks</name>
        <t>In DAP, Clients need to know the HPKE configuration of each Aggregator before
sending reports. (See HPKE Configuration Request in <xref target="DAP"/>.) However, in a DAP
deployment that supports the Taskprov extension, if a Client requests the
Aggregator's HPKE configuration with the task ID computed as described in
<xref target="construct-task-id"/>, the task ID may not be configured in the Aggregator yet,
because the Aggregator is still waiting for the task to be advertised by a
Client.</t>
        <t>To mitigate this issue, if an Aggregator wants to support the Taskprov
extension, it <bcp14>SHOULD</bcp14> choose which HPKE configuration to advertise to Clients
independent of the task ID. It <bcp14>MAY</bcp14> continue to support per-task HPKE
configurations for other tasks that are configured out-of-band.</t>
        <t>In addition, if a Client intends to advertise a task via the Taskprov extension,
it <bcp14>SHOULD NOT</bcp14> specify the <tt>task_id</tt> parameter when requesting the HPKE
configuration from an Aggregator.</t>
      </section>
    </section>
    <section anchor="client-behavior">
      <name>Client Behavior</name>
      <t>Upon receiving a <tt>TaskConfig</tt> from the Author, the Client decides whether to
opt in to the task as described in <xref target="provisioning-a-task"/>. If the Client opts
out, it <bcp14>MUST</bcp14> not attempt to upload reports for the task.</t>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: In case of opt-out, would it be useful to specify how to report
this to the Author?</t>
        </li>
      </ul>
      <t>Once the client opts in to a task, it <bcp14>MAY</bcp14> begin uploading reports for the task.
Each upload request for that task <bcp14>MUST</bcp14> advertise the task configuration. In
addition, each report's task ID <bcp14>MUST</bcp14> be computed as described in
<xref target="construct-task-id"/>.</t>
    </section>
    <section anchor="leader-behavior">
      <name>Leader Behavior</name>
      <section anchor="upload-protocol">
        <name>Upload Protocol</name>
        <t>Upon receiving a task advertisement from a Client, if the Leader does not
support the extension, it will ignore the HTTP header. In particular, if the
task ID is not recognized, then it <bcp14>MUST</bcp14> abort the upload request with
"unrecognizedTask".</t>
        <t>Otherwise, if the Leader does support the extension, it first attempts to parse
the "dap-taskprov" HTTP header payload. If parsing fails, it <bcp14>MUST</bcp14> abort with
"unrecognizedMessage".</t>
        <t>Next, it checks that the task ID indicated by the upload request matches the
task ID derived from the extension payload as specified in
<xref target="construct-task-id"/>. If the task ID does not match, then the Leader <bcp14>MUST</bcp14> abort
with "unrecognizedTask".</t>
        <t>The Leader then decides whether to opt in to the task as described in
<xref target="provisioning-a-task"/>. If it opts out, it <bcp14>MUST</bcp14> abort the upload request with
"invalidTask".</t>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: In case of opt-out, would it be useful to specify how to report
this to the Author?</t>
          </li>
        </ul>
        <t>Finally, once the Leader has opted in to the task, it completes the upload
request as usual.</t>
      </section>
      <section anchor="aggregate-protocol">
        <name>Aggregate Protocol</name>
        <t>When the Leader opts in to a task, it <bcp14>SHOULD</bcp14> derive the VDAF verification key
for that task as described in <xref target="vdaf-verify-key"/>. The Leader <bcp14>MUST</bcp14> advertise
the task to the Helper in every request incident to the task as described in
<xref target="definition"/>.</t>
      </section>
      <section anchor="collect-protocol">
        <name>Collect Protocol</name>
        <t>The Collector might issue a collect request for a task provisioned by the
Taskprov extension prior to opting in to the task. In this case, the Leader
would need to abort the collect request with "unrecognizedTask". When it does
so, it <bcp14>SHOULD</bcp14> also include a "Retry-After" header in its HTTP response
indicating the time after which the Collector should retry its request.</t>
        <ul empty="true">
          <li>
            <t>TODO: Find RFC reference for "Retry-After".</t>
          </li>
        </ul>
        <ul empty="true">
          <li>
            <t>OPEN ISSUE: This semantics is awkward, as there's no way for the Leader to
distinguish between Collectors who support the extension and those that don't.</t>
          </li>
        </ul>
        <t>The Leader <bcp14>MUST</bcp14> advertise the task in every aggregate share request issued to
the Helper as described in <xref target="definition"/>.</t>
      </section>
    </section>
    <section anchor="helper-behavior">
      <name>Helper Behavior</name>
      <t>Upon receiving a task advertisement from the Leader, If the Helper does not
support the Taskprov extension, it will ignore the "dap-taskprov" HTTP header
and process the aggregate request as usual. In particular, if the Helper does
not recognize the task ID, it <bcp14>MUST</bcp14> abort the aggregate request with error
"unrecognizedTask". Otherwise, if the Helper supports the extension, it
proceeds as follows.</t>
      <t>First, the Helper attempts to parse payload of the "dap-taskprov" HTTP header.
If this step fails, the Helper <bcp14>MUST</bcp14> abort with "unrecognizedMessage".</t>
      <t>Next, the Helper checks that the task ID indicated in the upload request matches
the task ID derived from the <tt>TaskConfig</tt> as defined in <xref target="construct-task-id"/>.
If not, the Helper <bcp14>MUST</bcp14> abort with "unrecognizedTask".</t>
      <t>Next, the Helper decides whether to opt in to the task as described in
<xref target="provisioning-a-task"/>. If it opts out, it <bcp14>MUST</bcp14> abort the aggregate request
with "invalidTask".</t>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: In case of opt-out, would it be useful to specify how to report
this to the Author?</t>
        </li>
      </ul>
      <t>Finally, the Helper completes the aggregate initialize request as usual, deriving the VDAF
verification key for the task as described in <xref target="vdaf-verify-key"/>.</t>
    </section>
    <section anchor="collector-behavior">
      <name>Collector Behavior</name>
      <t>Upon receiving a <tt>TaskConfig</tt> from the Author, the Collector first decides
whether to opt in to the task as described in <xref target="provisioning-a-task"/>. If the
Collector opts out, it <bcp14>MUST</bcp14> not attempt to upload reports for the task.</t>
      <t>Otherwise, once opted in, the Collector <bcp14>MAY</bcp14> begin to issue collect requests for
the task. The task ID for each request <bcp14>MUST</bcp14> be derived from the <tt>TaskConfig</tt> as
described in <xref target="provisioning-a-task"/>. The Collector <bcp14>MUST</bcp14> advertise the task as
described in <xref target="definition"/>.</t>
      <t>If the Leader responds to a collect request with an "unrecognizedTask" error,
but the HTTP response includes a "Retry-After" header, the Collector <bcp14>SHOULD</bcp14>
retry its collect request after waiting for the duration indicated by the
header.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This document has the same security and privacy considerations as the core DAP
specification. In particular, for privacy we consider the Author to be under
control of the adversary. It is therefore incumbent on protocol participants to
verify the privacy parameters of a task before opting in.</t>
      <t>In addition, the Taskprov extension is designed to maintain robustness even when
the Author misbehaves, or is merely misconfigured. In particular, if the Clients
and Aggregators have an inconsistent view of the the task configuration, then
aggregation of reports will fail. This is guaranteed by the binding of the task
ID (derived from the task configuration) to report shares provided by HPKE
encryption.</t>
      <ul empty="true">
        <li>
          <t>OPEN ISSUE: What if the Collector and Aggregators don't agree on the task
configuration? Decryption should fail.</t>
        </li>
      </ul>
      <t>A malicious coalition of Clients might attempt to pollute an Aggregator's
long-term storage by uploading reports for many (thousands or perhaps millions)
of distinct tasks. While this does not directly impact tasks used by honest
Clients, it does present a Denial-of-Service risk for the Aggregators
themselves.</t>
      <ul empty="true">
        <li>
          <t>TODO: Suggest mitigations for this. Perhaps the Aggregators need to keep track
of how many tasks in total they are opted in to?</t>
        </li>
      </ul>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>The taskprov extension is designed so that the Aggregators do not need to store
individual task configurations long-term. Because the task configuration is
advertised in each request in the upload, aggregation, and colletion protocols,
the process of opting-in and deriving the task ID and VDAF verify key can be
re-run on the fly for each request. This is useful if a large number of
concurrent tasks are expected.</t>
      <t>Once an Aggregator has opted-in to a task, the expectation is that the task is
supported until it expires. In particular, Aggregators that operate in this
manner <bcp14>MUST NOT</bcp14> opt out once they have opted in.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <ul empty="true">
        <li>
          <t>NOTE(cjpatton) Eventually we'll have IANA considerations (at the very least
we'll need to allocate a codepoint) but we can leave this blank for now.</t>
        </li>
      </ul>
    </section>
  </middle>
  <back>
    <references>
      <name>Normative References</name>
      <reference anchor="SHS">
        <front>
          <title>Secure Hash Standard</title>
          <author>
            <organization/>
          </author>
          <date year="2015" month="August" day="04"/>
        </front>
        <seriesInfo name="FIPS PUB 180-4" value=""/>
      </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="13" month="March" 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-04"/>
      </reference>
      <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="13" month="March" 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 input that
   would result in an incorrect aggregate result.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-vdaf-05"/>
      </reference>
      <reference anchor="RFC9180">
        <front>
          <title>Hybrid Public Key Encryption</title>
          <author fullname="R. Barnes" initials="R." surname="Barnes"/>
          <author fullname="K. Bhargavan" initials="K." surname="Bhargavan"/>
          <author fullname="B. Lipp" initials="B." surname="Lipp"/>
          <author fullname="C. Wood" initials="C." surname="Wood"/>
          <date month="February" year="2022"/>
          <abstract>
            <t>This document describes a scheme for hybrid public key encryption (HPKE). This scheme provides a variant of public key encryption of arbitrary-sized plaintexts for a recipient public key. It also includes three authenticated variants, including one that authenticates possession of a pre-shared key and two optional ones that authenticate possession of a key encapsulation mechanism (KEM) private key. HPKE works for any combination of an asymmetric KEM, key derivation function (KDF), and authenticated encryption with additional data (AEAD) encryption function. Some authenticated variants may not be supported by all KEMs. We provide instantiations of the scheme using widely used and efficient primitives, such as Elliptic Curve Diffie-Hellman (ECDH) key agreement, HMAC-based key derivation function (HKDF), and SHA2.</t>
            <t>This document is a product of the Crypto Forum Research Group (CFRG) in the IRTF.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9180"/>
        <seriesInfo name="DOI" value="10.17487/RFC9180"/>
      </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>
      <reference anchor="RFC4648">
        <front>
          <title>The Base16, Base32, and Base64 Data Encodings</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson"/>
          <date month="October" year="2006"/>
          <abstract>
            <t>This document describes the commonly used base 64, base 32, and base 16 encoding schemes. It also discusses the use of line-feeds in encoded data, use of padding in encoded data, use of non-alphabet characters in encoded data, use of different encoding alphabets, and canonical encodings. [STANDARDS-TRACK]</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="4648"/>
        <seriesInfo name="DOI" value="10.17487/RFC4648"/>
      </reference>
      <reference anchor="RFC5869">
        <front>
          <title>HMAC-based Extract-and-Expand Key Derivation Function (HKDF)</title>
          <author fullname="H. Krawczyk" initials="H." surname="Krawczyk"/>
          <author fullname="P. Eronen" initials="P." surname="Eronen"/>
          <date month="May" year="2010"/>
          <abstract>
            <t>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>
    </references>
    <?line 496?>

<section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <ul empty="true">
        <li>
          <t>CP: Unless the order is meaningful, consider alphabetizing these names.</t>
        </li>
      </ul>
      <t>Junye Chen
Apple Inc.
junyec@apple.com</t>
      <t>Suman Ganta
Apple Inc.
sganta2@apple.com</t>
      <t>Gianni Parsa
Apple Inc.
gianni_parsa@apple.com</t>
      <t>Michael Scaria
Apple Inc.
mscaria@apple.com</t>
      <t>Kunal Talwar
Apple Inc.
ktalwar@apple.com</t>
      <t>Christopher A. Wood
Cloudflare
caw@heapingbits.net</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
gmXLOfKN5G7uaJuScXeU4d5jUWYhS/GepasjwHEGb3VVrEcTvLIxcNhmUip/
275mDFiBOxaJnMtDsRfd9LB+ZNUipe2pL3B2mszumXTr8s3JmyMJ4h/Lt8+O
uSeKbpsgiVs76qjiJecBl5g+iejmllq9X6kiHtrLSoW+Q3c2VqrJ0jm4yWCy
mGPhGmJKf1/Db7ukSyu9tsJmDLLSdlDHWXqnasPZNu/AC/BGk3kj0ChxyGsR
iH1XmTYF2r35GWdym9VvqDJ0IG8n67X7vXFa1wHYbi4F31Hhbreq1fzVga5+
1yHcn2j5DqGJ6sP77lKkN9QW2+dKyK4nYdduxa4tUgjbJVYGKVm6ogG+Ratt
rONneJNsA6rtNByLM5cHr3TunI1g7g2nQ37e6QgGftn5sIFvv/MhwjEd56MV
z3xN8hWP6TvjvuZozmh3zvVvdy26PYW82/9X7yJkdMt3aHZLsAI7/K2rjkPm
aFjiElvLIV/tBfCVC2cs/m/RsJ+GPXnLdPGHmP6lsLi5eNXD/z8UGQfgQm6f
8/M2D9OErdg5SS7Jhvkv/bVidicuAy2kWwYceDI7Xbz5JfUUX0eVtt+0zfB1
p9swYWetQK2dgu91dlTao/oM5UPhcuYtvyXsmehzdjbpzm6SaByXzX1Yn2cj
pRc3XcftgE048AaJd99JganU4Jbm5uWRhQrujnzNLU8V3AnBnGvrXkjHngY5
+849MFtE4NwkXX0U9qqjs0/+FqRrcqt8FaV1L3TbnVAR3AntuXbeFFI4Id34
zpuZv36/pHVfFo6xVCat4D9ZZNO6rFL0PzReJcM0ngiOvDQlZf7xSjznbpea
StbwQVjk6ndOXIa0fa2x5Oq3QqkgMuOl6kreGL3y+dPeFBKH1iL4aoPwGw3I
7ULzb5t78Mp5DSRMK93kCaaGE/lBnlZgca0DAN3V9xrjYm9DcsAT8+yU7LT3
JrmI1LZnv1AH52xDrzYpQ/4zmKBCa2m/BID2+KS9lx/kiXYruaCCjo6lniWY
rIgacaIMfnV0cpUQDucCZM5hN9j9sNGrLbB2NMJiDnhWWQFeEh6zP1sIgcca
b53DogqhCnVJFwuV43JJguq4h19DwWFGVNlvEwCimMQm8psvIzAAZBVe9F/m
yr3qb1ouILoEB8J9M4IL56Rtksfyik7BaGNm/AK/UwaMSWHwfqSFpIDaKOjN
tX8XgF3U8zm5cVxn8Ol43OVYnttjbUzV1Jc0OKFYFkeewYnRKSHq8DHIcFWK
upDXlNAPMho/IBq+yS2AwUtdQGRx+Ixyl1njsLYFi4jrtokc5eAVBLjG/XTk
vZReAPDWR1PL6b6KnclByQYju9DKttzkYfjVJNxxRbakMgE8lkPBSOivVDHg
jYy7uxM4X8664wdNPmZNLhjX48FujYo6dRo1S9YdV6ABDetYUgkFwAzEnr9e
Ca+Dw6nB7hSUZSF+Igf5gjtVSin3rvrv2I3a6SQOlnCkLyW3Iw3s1uHICkha
Q2CfoLBzVbbsIG7r9jHOk+V808r2JoklfhuGdUqwoOPKvi7LtmZUduJIlvls
8nrSEcInOPx0N/obf9nPnjzFW5w1etVgOO8ACNNENHbDIu/a81HYn2hVopvO
Y3xaB4JEdBTI1bE9wntU90ejDKSFYe4e9DRRKSt2mq3G/JU6U9Q8vrnMXxmD
ev7xiFmo4+8HM5WUenCL5zg+P5Lv0sQF31lBWR40cQodO5CCYeMHqCRfqCmI
6W/NhXT81iSEjv+u0zWgOhqn4AuY/oZPo+Ybl4S4qIEL8icwSSp8sZzjk3vh
mz8ZYJeR5xALt16d0/MrjJFV+P4rEy2UTuRFpArTGrEs6VH48osaweVSJStV
hK++r+hR+Gr4jVATwOssi0XwBVCRWv0InlwOJJmCVzhOdSX+F8F57u0yTQAA

-->

</rfc>
