<?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.25 (Ruby 3.1.3) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-wang-ppm-dap-taskprov-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.16.0 -->
  <front>
    <title>In-band Task Provisioning for DAP</title>
    <seriesInfo name="Internet-Draft" value="draft-wang-ppm-dap-taskprov-03"/>
    <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="March" day="13"/>
    <area>Security</area>
    <workgroup>Privacy Preserving Measurement</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <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>
    <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>
      <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="the-taskprov-extension">
      <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 its first aggregate request incident to the task. It <bcp14>MAY</bcp14>
also include the advertisement subsequent requests; if opted in, the Helper <bcp14>MUST</bcp14>
ignore these advertisements.</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>
      </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 extension payload and process
the qggregate 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"/>.</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="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">
            <organization/>
          </author>
          <author fullname="K. Bhargavan" initials="K." surname="Bhargavan">
            <organization/>
          </author>
          <author fullname="B. Lipp" initials="B." surname="Lipp">
            <organization/>
          </author>
          <author fullname="C. Wood" initials="C." surname="Wood">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <date month="March" year="1997"/>
          <abstract>
            <t>In many standards track documents several words are used to signify the requirements in the specification.  These words are often capitalized. This document defines these words as they should be interpreted in IETF documents.  This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="2119"/>
        <seriesInfo name="DOI" value="10.17487/RFC2119"/>
      </reference>
      <reference anchor="RFC8174">
        <front>
          <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
          <author fullname="B. Leiba" initials="B." surname="Leiba">
            <organization/>
          </author>
          <date month="May" year="2017"/>
          <abstract>
            <t>RFC 2119 specifies common key words that may be used in protocol  specifications.  This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the  defined special meanings.</t>
          </abstract>
        </front>
        <seriesInfo name="BCP" value="14"/>
        <seriesInfo name="RFC" value="8174"/>
        <seriesInfo name="DOI" value="10.17487/RFC8174"/>
      </reference>
      <reference anchor="RFC4648">
        <front>
          <title>The Base16, Base32, and Base64 Data Encodings</title>
          <author fullname="S. Josefsson" initials="S." surname="Josefsson">
            <organization/>
          </author>
          <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">
            <organization/>
          </author>
          <author fullname="P. Eronen" initials="P." surname="Eronen">
            <organization/>
          </author>
          <date month="May" year="2010"/>
          <abstract>
            <t>This document specifies a simple Hashed Message Authentication Code (HMAC)-based key derivation function (HKDF), which can be used as a building block in various protocols and applications.  The key derivation function (KDF) is intended to support a wide range of applications and requirements, and is conservative in its use of cryptographic hash functions.  This document is not an Internet  Standards Track specification; it is published for informational  purposes.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="5869"/>
        <seriesInfo name="DOI" value="10.17487/RFC5869"/>
      </reference>
    </references>
    <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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

-->

</rfc>
