<?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.29 (Ruby 3.4.4) -->
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-ppm-dap-taskprov-03" category="info" consensus="true" submissionType="IETF" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.30.1 -->
  <front>
    <title abbrev="DAP-Taskprov">Task Binding and In-Band Provisioning for DAP</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-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="2025" month="September" day="05"/>
    <area>Security</area>
    <workgroup>Privacy Preserving Measurement</workgroup>
    <keyword>next generation</keyword>
    <keyword>unicorn</keyword>
    <keyword>sparkling distributed ledger</keyword>
    <abstract>
      <?line 47?>

<t>An extension for the Distributed Aggregation Protocol (DAP) is specified that
cryptographically binds the parameters of a task to the task's execution. In
particular, when a client includes this extension with its report, the servers
will only aggregate the report if all parties agree on the task parameters.
This document also specifies an optional mechanism for in-band task
provisioning that builds on the report extension.</t>
    </abstract>
    <note removeInRFC="true">
      <name>About This Document</name>
      <t>
        The latest revision of this draft can be found at <eref target="https://ietf-wg-ppm.github.io/draft-ietf-ppm-dap-taskprov/draft-ietf-ppm-dap-taskprov.html"/>.
        Status information for this document may be found at <eref target="https://datatracker.ietf.org/doc/draft-ietf-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/ietf-wg-ppm/draft-ietf-ppm-dap-taskprov"/>.</t>
    </note>
  </front>
  <middle>
    <?line 57?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>(RFC EDITOR: Remove this paragraph.) This draft is maintained in
https://github.com/ietf-wg-ppm/draft-ietf-ppm-dap-taskprov.</t>
      <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. See
<xref section="4.2" sectionFormat="of" target="DAP"/> for a complete listing.</t>
      <t>In order to execute a task securely, it is required that all parties agree on
all parameters associated with the task. However, the core DAP specification
does not specify a mechanism for accomplishing this. In particular, it is
possible that the parties successfully aggregate and collect a batch, but some
party does not know the parameters that were enforced.</t>
      <t>A desirable property for DAP to guarantee is that successful execution implies
agreement on the task parameters. On the other hand, disagreement between a
Client and the Aggregators should prevent reports uploaded by that Client from
being processed.</t>
      <t><xref target="definition"/> specifies a report extension (<xref section="4.5.3" sectionFormat="of" target="DAP"/>) that
endows DAP with this property. First, it specifies an encoding of all task
parameters that are relevant to all parties. This excludes cryptographic
assets, such as the secret VDAF verification key (<xref section="5" sectionFormat="of" target="VDAF"/>) or
the public HPKE configurations <xref target="RFC9180"/> of the aggregators or collector.
Second, the task ID is computed by hashing the encoded parameters. If a report
includes the extension, then each aggregator checks if the task ID was computed
properly: if not, it rejects the report. This cryptographic binding of the task
to its parameters ensures that the report is only processed if the Client and
Aggregator agree on the task parameters.</t>
      <t>One reason this task-binding property is desirable is that it makes the process
by which parties are provisioned with task parameters more robust. This is
because misconfiguration of a party would manifest in a server's telemetry as
report rejection. This is preferable to failing silently, as misconfiguration
could result in privacy loss.</t>
      <t><xref target="taskprov"/> specifies one possible mechanism for provisioning DAP tasks that
is built on top of the extension in <xref target="definition"/>. Its chief design goal is to
make task configuration completely in-band, via HTTP request headers. Note that
this mechanism is an optional feature of this specification; it is not required
to implement the DAP report extension in <xref target="definition"/>.</t>
      <section anchor="change-log">
        <name>Change Log</name>
        <t>(RFC EDITOR: Remove this section.)</t>
        <t>(*) Indicates a change that breaks wire compatibility with the previous draft.</t>
        <t>03:</t>
        <ul spacing="normal">
          <li>
            <t>Handle repeated extensions in the <tt>TaskprovExtension</tt> field of the
<tt>TaskConfig</tt> as an error.</t>
          </li>
          <li>
            <t>Go back to calling the extension "Taskprov". The name "Taskbind" didn't
stick.</t>
          </li>
          <li>
            <t>Add task enumeration attacks to security considerations.</t>
          </li>
          <li>
            <t>Add registration of the "DAP-Taskprov" to IANA considerations.</t>
          </li>
          <li>
            <t>Bump draft-ietf-ppm-dap-13 to 16 <xref target="DAP"/>.</t>
          </li>
          <li>
            <t>Bump draft-irtf-cfrg-vdaf-13 to 15 <xref target="VDAF"/>.</t>
          </li>
        </ul>
        <t>02:</t>
        <ul spacing="normal">
          <li>
            <t>Don't specify a lower limit for vector bounds.</t>
          </li>
          <li>
            <t>Update normative references.</t>
          </li>
          <li>
            <t>Recommend including the report extension in the public extensions list.</t>
          </li>
        </ul>
        <t>01:</t>
        <ul spacing="normal">
          <li>
            <t>Add an extension point to the <tt>TaskConfig</tt> structure and define rules for
processing extensions. (*)</t>
          </li>
          <li>
            <t>Remove DP mechanisms. (*)</t>
          </li>
          <li>
            <t>Add guidelines for extending this document to account for new VDAFs or DAP
batch modes. Improve the extension points for these in <tt>TaskConfig</tt> in order
to make this easier. (*)</t>
          </li>
          <li>
            <t>Add a salt to the task ID computation. (*)</t>
          </li>
          <li>
            <t>Harmonize task lifetime parameters with <xref target="DAP"/> by adding a task start time
and replacing the task end time with a task duration. (*)</t>
          </li>
          <li>
            <t>Harmonize batch mode parameters with <xref target="DAP"/> by removing the deprecated
<tt>max_batch_query_count</tt> and <tt>max_batch_size</tt> parameters. (*)</t>
          </li>
          <li>
            <t>Task provisioning: Remove guidance for per-task HPKE configurations, as this
feature was deprecated by DAP.</t>
          </li>
          <li>
            <t>Bump draft-ietf-ppm-dap-12 to 13 <xref target="DAP"/>. (*)</t>
          </li>
          <li>
            <t>Bump draft-irtf-cfrg-vdaf-12 to 13 <xref target="VDAF"/>.</t>
          </li>
        </ul>
      </section>
    </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 anchor="urn-space-errors">
        <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 in the provisioning mechanism of <xref target="taskprov"/>.</t>
        </dd>
      </dl>
    </section>
    <section anchor="definition">
      <name>The Taskprov Extension</name>
      <t>To use the Taskprov extension, the Client includes the following extension in
the report extensions for each Aggregator as described in <xref section="4.5.3" sectionFormat="of" target="DAP"/>:</t>
      <artwork><![CDATA[
enum {
    taskprov(0xff00),
    (2^16-1)
} ExtensionType;
]]></artwork>
      <t>The payload of the extension <bcp14>MUST</bcp14> be empty. If the payload is non-empty, then
the Aggregator <bcp14>MUST</bcp14> reject the report.</t>
      <t>When the client uses the Taskprov extension, it computes the task ID (<xref section="4.2" sectionFormat="of" target="DAP"/>) as follows:</t>
      <artwork><![CDATA[
task_id = SHA-256(SHA-256("dap-taskprov task id") || task_config)
]]></artwork>
      <t>where <tt>task_config</tt> is a <tt>TaskConfig</tt> structure defined in <xref target="task-encoding"/>.
Function SHA-256() is as defined in <xref target="SHS"/>.</t>
      <t>The task ID is bound to each report share (via HPKE authenticated and
associated data, see <xref section="4.5.2" sectionFormat="of" target="DAP"/>). Binding the parameters to the
ID this way ensures, in turn, that the report is only aggregated if the Client
and Aggregator agree on the parameters. This is accomplished by the Aggregator
behavior below.</t>
      <t>During aggregation (<xref section="4.6" sectionFormat="of" target="DAP"/>), each Aggregator processes a
report with the Taskprov extension as follows.</t>
      <t>First, it looks up the ID and parameters associated with the task. Note the
task has already been configured; otherwise the Aggregator would have already
aborted the request due to not recognizing the task.</t>
      <t>Next, the Aggregator encodes the parameters as a <tt>TaskConfig</tt> defined in
<xref target="task-encoding"/> and computes the task ID as above. If the derived task ID
does not match the task ID of the request, then it <bcp14>MUST</bcp14> reject the report with
error "invalid_message".</t>
      <t>During the upload interaction (<xref section="4.5" sectionFormat="of" target="DAP"/>), the Leader <bcp14>SHOULD</bcp14>
abort the request with "unrecognizedTask" if the derived task ID does not match
the task ID of the request.</t>
      <section anchor="task-encoding">
        <name>Task Encoding</name>
        <t>The task configuration is encoded as follows:</t>
        <artwork><![CDATA[
uint32 VdafType; /* As defined in Section 10 of [VDAF] */

struct {
    /* Info specific for a task. */
    opaque task_info<1..2^8-1>;

    /* Leader API endpoint. */
    Url leader_aggregator_endpoint;

    /* Helper API endpoint. */
    Url helper_aggregator_endpoint;

    /* Time precision. */
    Duration time_precision;

    /* Minimum batch size. */
    uint32 min_batch_size;

    /* The batch mode and its parameters. */
    BatchMode batch_mode;
    opaque batch_config<0..2^16-1>;

    /* The earliest timestamp that will be accepted for this task. */
    Time task_start;

    /* The duration of the task. */
    Duration task_duration;

    /* Determines the VDAF type and its config parameters. */
    VdafType vdaf_type;
    opaque vdaf_config<0..2^16-1>;

    /* Taskprov Extensions. */
    TaskprovExtension extensions<0..2^16-1>;
} TaskConfig;
]]></artwork>
        <t>The purpose of <tt>TaskConfig</tt> is to define all parameters that are necessary for
configuring each party. It includes all parameters listed in <xref section="4.2" sectionFormat="of" target="DAP"/> as well as two additional fields:</t>
        <ul spacing="normal">
          <li>
            <t><tt>task_info</tt> is an opaque field whose contents are specific to the deployment.
For example, this might be a human-readable string describing the purpose of
this task.</t>
          </li>
          <li>
            <t><tt>extensions</tt> is a list of extensions to this document. The format and
semantics of extensions are describe in <xref target="taskprov-extensions"/>.</t>
          </li>
        </ul>
        <t>This structure does not include cryptographic assets shared by only a subset of
the parties, including the secret VDAF verification key <xref target="VDAF"/> or public
HPKE configurations <xref target="RFC9180"/>.</t>
        <t>The <tt>batch_mode</tt> field indicates the DAP batch mode and corresponds to a
codepoint in the Batch Modes Registry.</t>
        <ul empty="true">
          <li>
            <t>TODO Add a reference to the IANA registry for batch modes created by
<xref target="DAP"/>.</t>
          </li>
        </ul>
        <t>The <tt>batch_config</tt> field contains any parameters that are required for
configuring the batch mode. For the time-interval and leader-selected batch
modes specified in <xref target="DAP"/>, the payload is empty. Batch modes defined by
future documents may specify a non-empty payload; see <xref target="extending-this-doc"/>
for details. The length prefix of the <tt>batch_config</tt> ensures that the batch
config can be decoded even if the batch mode is unrecognized.</t>
        <t>The <tt>vdaf_type</tt> field indicates the VDAF for the task and corresponds to a
codepoint in the VDAF Identifiers registry.</t>
        <ul empty="true">
          <li>
            <t>TODO: Add a reference to the IANA registry created by <xref target="VDAF"/>.</t>
          </li>
        </ul>
        <t>The <tt>vdaf_config</tt> field contains parameters necessary to configure an instance
of the VDAF. <xref target="vdaf-config"/> defines a suitable encoding of the configuration
for each VDAF specified in <xref target="VDAF"/>. VDAFs defined by future documents may
also use this field as well; see <xref target="extending-this-doc"/> for details.</t>
        <t>The length prefix of the <tt>vdaf_config</tt> ensures that VDAF config can be decoded
even if the VDAF type is not recognized.</t>
        <t>The definition of <tt>Time</tt>, <tt>Duration</tt>, <tt>Url</tt>, and <tt>BatchMode</tt> follow those in
<xref target="DAP"/>.</t>
      </section>
      <section anchor="vdaf-config">
        <name>VDAF config</name>
        <t>This section defines the payload of <tt>TaskConfig.vdaf_config</tt> for each VDAF
specified in <xref target="VDAF"/>. In some cases, the VDAF supports more than two
Aggregators; but since DAP only supports two Aggregators, we do not include the
number of Aggregators in the encoding.</t>
        <section anchor="prio3count">
          <name>Prio3Count</name>
          <t>The payload is empty.</t>
        </section>
        <section anchor="prio3sum">
          <name>Prio3Sum</name>
          <artwork><![CDATA[
struct {
    uint32 max_measurement; /* largest summand */
} Prio3SumConfig;
]]></artwork>
        </section>
        <section anchor="prio3sumvec">
          <name>Prio3SumVec</name>
          <artwork><![CDATA[
struct {
    uint32 length;       /* length of the vector */
    uint8 bits;          /* bit length of each summand */
    uint32 chunk_length; /* size of each proof chunk */
} Prio3SumVecConfig;
]]></artwork>
        </section>
        <section anchor="prio3histogram">
          <name>Prio3Histogram</name>
          <artwork><![CDATA[
struct {
    uint32 length;       /* number of buckets */
    uint32 chunk_length; /* size of each proof chunk */
} Prio3HistogramConfig;
]]></artwork>
        </section>
        <section anchor="prio3multihotcountvec">
          <name>Prio3MultihotCountVec</name>
          <artwork><![CDATA[
struct {
    uint32 length;       /* length of the vector */
    uint32 chunk_length; /* size of each proof chunk */
    uint32 max_weight;   /* largest vector weight /
} Prio3MultihotCountVecConfig;
]]></artwork>
        </section>
        <section anchor="poplar1">
          <name>Poplar1</name>
          <artwork><![CDATA[
struct {
    uint16 bits; /* bit length of the input string */
} Poplar1Config;
]]></artwork>
        </section>
      </section>
      <section anchor="taskprov-extensions">
        <name>Extensions</name>
        <t>The <tt>TaskConfig</tt> structure includes a list of extensions. In general,
extensions can be used to bind additional, application-specific information to
the task. For example, an extension might be used to encode the identity of the
Collector. (Only the Aggregators are identified in <tt>TaskConfig</tt>.)</t>
        <t>Each extension is structured as follows:</t>
        <sourcecode type="tls-presentation"><![CDATA[
struct {
  TaskprovExtensionType extension_type;
  opaque extension_data<0..2^16-1>;
} TaskprovExtension;

enum {
  reserved(0),
  (2^16-1)
} TaskprovExtensionType;
]]></sourcecode>
        <t>The <tt>extension_type</tt> identifies the extension and <tt>extension_data</tt> is
structured as specified by the extension.</t>
        <t>Extensions are treated as mandatory-to-implement in the protocol described in
<xref target="taskprov"/>. In particular, protocols participants <bcp14>MUST</bcp14> opt-out of tasks
containing unrecognized extensions. See <xref target="provisioning-a-task"/>.</t>
        <t>If the same extension type appears more than once among the Taskprov extensions
in the <tt>TaskConfig</tt> structure, then protocols participants <bcp14>MUST</bcp14> opt-out of tasks
with repeated extensions.</t>
        <t>Note that Taskprov extensions are semantically distinct from DAP report
extensions and do not share the same codepoint registry
(<xref target="taskprov-extension-registry"/>). Future documents may want to define both a
Taskprov extension and a report extension, but there may also be situations
where a document defines one but not the other.</t>
      </section>
    </section>
    <section anchor="taskprov">
      <name>In-band Task Provisioning with the Taskprov Extension</name>
      <t>Before a task can be executed, it is necessary to first provision the Clients,
Aggregators, and Collector with the task's configuration. The core DAP
specification does not define a mechanism for provisioning tasks. This section
describes a mechanism whose key feature is that task configuration is
performed completely in-band, via HTTP request headers.</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) are carried by HTTP
headers piggy-backed on the protocol flow.</t>
      <t>This mechanism 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 mechanism should presume the
Author is under the adversary's control. In fact, we expect in a real-world
deployment that the Author may be co-located with the Collector.</t>
      <t>The DAP protocol also 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>
          <t>The Collector's HPKE <xref target="RFC9180"/> configuration used by the Aggregators to
encrypt aggregate shares.</t>
        </li>
        <li>
          <t>Any assets required for authenticating HTTP requests.</t>
        </li>
      </ul>
      <t>This section 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 anchor="overview">
        <name>Overview</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.5" 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 Helper
during the aggregation interaction (<xref section="4.6" sectionFormat="of" target="DAP"/>). In particular, it
includes the task configuration in an HTTP header of each aggregation job
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>
      </section>
      <section anchor="task-advertisement">
        <name>Task Advertisement</name>
        <t>To advertise a task to its peer, a protocol participant includes the header
"DAP-Taskprov" with an HTTP request incident to the task execution. The value
is the <tt>TaskConfig</tt> structure defined <xref target="task-encoding"/>, 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>
      </section>
      <section anchor="vdaf-verify-key">
        <name>Deriving the VDAF Verification Key</name>
        <t>When a Leader and Helper implement this mechanism, 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(
        SHA-256("dap-taskprov"), # salt
        verify_key_init,         # IKM
    ),
    task_id,                     # info
    VERIFY_KEY_SIZE,             # L
)
]]></artwork>
        <t>where <tt>task_id</tt> is as defined in <xref target="definition"/>. Functions HKDF-Extract() and
HKDF-Expand() are as defined in <xref target="RFC5869"/>. Both functions are instantiated
with <tt>SHA-256()</tt> as defined in <xref target="SHS"/>.</t>
      </section>
      <section anchor="provisioning-a-task">
        <name>Opting into 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="definition"/>) 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>
            <t>The derived task ID corresponds to an already configured task, but the task
configuration disseminated by the Author does not match the existing
configuration.</t>
          </li>
          <li>
            <t>The VDAF config or other parameters are deemed insufficient for privacy.</t>
          </li>
          <li>
            <t>A secure connection to one or both of the Aggregator endpoints could not be
established.</t>
          </li>
          <li>
            <t>The task lifetime is too long.</t>
          </li>
        </ol>
        <t>A protocol participant <bcp14>MUST</bcp14> opt out if:</t>
        <ol spacing="normal" type="1"><li>
            <t>The task has ended.</t>
          </li>
          <li>
            <t>The DAP batch mode or VDAF is not implemented.</t>
          </li>
          <li>
            <t>One of the extensions is not recognized.</t>
          </li>
          <li>
            <t>One of the extension types appear more than once.</t>
          </li>
        </ol>
        <t>The behavior of each protocol participant is determined by whether or not they
opt in to a task.</t>
      </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 into the task as described in <xref target="provisioning-a-task"/>. If the Client opts
out, it <bcp14>MUST NOT</bcp14> attempt to upload reports for the task.</t>
        <t>Once the client opts into a task, it may begin uploading reports for the task to
the Leader. The extension codepoint <tt>taskprov</tt> <bcp14>MUST</bcp14> be offered in both the
Leader and the Helper's report extensions. The extension may be included in
either the public or private report extensions; it is <bcp14>RECOMMENDED</bcp14> that the
extension be included in the public extensions. In addition, each report's task
ID <bcp14>MUST</bcp14> be computed as described in <xref target="definition"/>.</t>
        <t>The Client <bcp14>SHOULD</bcp14> advertise the task configuration by specifying the encoded
<tt>TaskConfig</tt> described in <xref target="definition"/> in the "DAP-Taskprov" HTTP header, but
<bcp14>MAY</bcp14> choose to omit this header in order to save network bandwidth. However, the
Leader may respond with "unrecognizedTask" if it has not been configured with
this task. In this case, the Client <bcp14>MUST</bcp14> retry the upload request with the
"DAP-Taskprov" HTTP header.</t>
      </section>
      <section anchor="leader-behavior">
        <name>Leader Behavior</name>
        <section anchor="upload-protocol">
          <name>Upload Protocol</name>
          <t>Upon receiving a Client report, if the Leader does not support the <xref target="taskprov"/>
mechanism, it will ignore the "DAP-Taskprov" 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 this mechanism, it first checks if the
"DAP-Taskprov" HTTP header is specified. If not present, that means the Client
has skipped task advertisement. If the Leader recognizes the task ID, it will
include the client report in the aggregation of that task ID. Otherwise, it
<bcp14>MUST</bcp14> abort with "unrecognizedTask". The Client will then retry with the task
advertisement.</t>
          <t>If the Client advertises the task, the Leader checks that the task ID indicated
by the upload request matches the task ID derived from the "DAP-Taskprov" HTTP
header as specified in <xref target="definition"/>. 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>
          <t>Finally, once the Leader has opted in to the task, it completes the upload
request as usual.</t>
          <t>During the upload flow, if the Leader's report share does not present a
<tt>taskprov</tt> extension type, the Leader <bcp14>MUST</bcp14> abort the upload request with
"invalidMessage".</t>
        </section>
        <section anchor="aggregation-protocol">
          <name>Aggregation 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="collection-protocol">
          <name>Collection Protocol</name>
          <t>The Collector might create a collection job for a task provisioned by this
mechanism prior to opting into the task. In this case, the Leader would need to
abort the collect request with "unrecognizedTask". When it does so, it is up to
the Collector to retry its request.</t>
          <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 this mechanism 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="task-advertisement"/>.</t>
        </section>
      </section>
      <section anchor="helper-behavior">
        <name>Helper Behavior</name>
        <t>The Leader advertises a task to the Helper during each step of an aggregation
job and when it requests the Helper's aggregate share during a collection job.</t>
        <t>Upon receiving a task advertisement from the Leader, If the Helper does not
support this mechanism, it will ignore the "DAP-Taskprov" HTTP header and
process the request as usual. In particular, if the Helper does not recognize
the task ID, it <bcp14>MUST</bcp14> abort the request with error "unrecognizedTask".
Otherwise, if the Helper supports this mechanism, 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 "invalidMessage".</t>
        <t>Next, the Helper checks that the task ID indicated in the request matches the
task ID derived from the <tt>TaskConfig</tt> as defined in <xref target="definition"/>. 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 request with
"invalidTask".</t>
        <t>Finally, the Helper completes the request as usual, deriving the VDAF
verification key for the task as described in <xref target="vdaf-verify-key"/>. During an
aggregation job, for any report share that does not include the <tt>taskprov</tt>
extension with an empty payload, the Helper <bcp14>MUST</bcp14> mark the report as invalid
with error "invalid_message" and reject it.</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 into the task as described in <xref target="provisioning-a-task"/>. If the
Collector opts out, it <bcp14>MUST NOT</bcp14> attempt to initialize collection jobs 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="task-advertisement"/>.</t>
        <t>If the Leader responds to a collection request with an "unrecognizedTask"
error, the Collector <bcp14>MAY</bcp14> retry its request after waiting an appropriate
amount of time.</t>
      </section>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The Taskprov extension has the same security and privacy considerations as the
core DAP protocol. In addition, successful execution of a DAP task implies
agreement on the task configuration. This is provided by binding the
parameters to the task ID, which in turn is bound to each report uploaded for a
task. Furthermore, inclusion of the Taskprov extension in the report means
Aggregators that do not implement this extension will reject the report as
required by (<xref section="4.5.3" sectionFormat="of" target="DAP"/>).</t>
      <t>The task provisioning mechanism in <xref target="taskprov"/> extends the threat model of DAP
by including a new logical role, called the Author. The Author is responsible
for configuring Clients prior to task execution. 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>Another risk is that the Author could configure a unique task to fingerprint a
Client. Although Client anonymization is not guaranteed by DAP, some systems
built on top of DAP may hope to achieve this property by using a proxy server
with Oblivious HTTP <xref target="RFC9458"/> to forward Client reports to the Leader. If the
Author colludes with the Leader, the attacker can learn some metadata
information about the Client, e.g., the Client IP, user agent string, which may
deanonymize the Client. However, even if the Author succeeds in doing so, the
Author should learn nothing other than the fact that the Client has uploaded a
report, assuming the Client has verified the privacy parameters of the task
before opting into it. For example, if a task is uniquely configured for the
Client, the Client can enforce the minimum batch size is strictly more than 1.</t>
      <t>Another risk for the Aggregators is that 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. This can be mitigated by
limiting the rate at which new tasks are configured. In addition, deployments
<bcp14>SHOULD</bcp14> arrange for the Author to digitally sign the task configuration so that
Clients cannot forge task creation, e.g., via an extension to Taskprov
(<xref target="taskprov-extensions"/>).</t>
      <t>Support for the Taskprov extension may render a deployment of DAP more
susceptible to task enumeration attacks (<xref section="8.6.1" sectionFormat="of" target="DAP"/>). For
example, if the Leader's upload endpoint is unauthenticated, then any HTTP
client can learn if a Leader supports a particular task configuration by
uploading a report for it with the Taskprov extension. Aggregators can mitigate
these kinds of attack by:</t>
      <ol spacing="normal" type="1"><li>
          <t>Requiring authentication of all APIs, including the upload endpoint (see
<xref section="3.3" sectionFormat="of" target="DAP"/>);</t>
        </li>
        <li>
          <t>Enforcing rate limits on unauthenticated APIs; or</t>
        </li>
        <li>
          <t>Including entropy in the <tt>task_info</tt> field of the <tt>TaskConfig</tt> in order to
make the task ID harder to predict (e.g., 16 bytes of output of a CSPRNG).</t>
        </li>
      </ol>
    </section>
    <section anchor="operational-considerations">
      <name>Operational Considerations</name>
      <t>The Taskprov extension does not introduce any new operational considerations
for DAP.</t>
      <t>The task provisioning mechanism in <xref target="taskprov"/> 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 collection 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. Once an Aggregator
has opted-in to a task, the expectation is that the task is supported until it
ends. 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>
      <t>This document requests a codepoint for the <tt>taskprov</tt> report extension and for
creation of a new registry for Taskprov extensions.</t>
      <t>(RFC EDITOR: Replace "XXXX" with the RFC number assigned to this document.)</t>
      <section anchor="report-extension">
        <name>Report Extension</name>
        <t>The following entry will be (RFC EDITOR: change "will be" to "has been") added
to the "Report Extension Identifiers" registry of the "Distributed Aggregation
Protocol (DAP)" page created by <xref target="DAP"/>:</t>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t><tt>0xff00</tt></t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t><tt>taskprov</tt></t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>RFC XXXX</t>
          </dd>
        </dl>
      </section>
      <section anchor="taskprov-extension-registry">
        <name>Registry for Taskprov Extensions</name>
        <t>A new registry will be (RFC EDITOR: change "will be" to "has been") created for
the "Distributed Aggregation Protocol (DAP)" page called "Taskprov Extensions".
This registry contains the following columns:</t>
        <dl>
          <dt>Value:</dt>
          <dd>
            <t>The two-byte identifier for the extension</t>
          </dd>
          <dt>Name:</dt>
          <dd>
            <t>The name of the extension</t>
          </dd>
          <dt>Reference:</dt>
          <dd>
            <t>Where the mechanism is defined</t>
          </dd>
        </dl>
        <t>The initial contents of this registry are listed in the following table.</t>
        <table anchor="taskprov-extension-id">
          <name>Initial contents of the Taskprov Extensions registry.</name>
          <thead>
            <tr>
              <th align="left">Value</th>
              <th align="left">Name</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">
                <tt>0x0000</tt></td>
              <td align="left">
                <tt>reserved</tt></td>
              <td align="left">
                <xref target="taskprov-extensions"/> of RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
      <section anchor="dap-sub-namespace-for-dap">
        <name>DAP Sub-namespace for DAP</name>
        <ul empty="true">
          <li>
            <t>TODO Figure out how to ask IANA to register the errors in
<xref target="urn-space-errors"/>. See
https://github.com/ietf-wg-ppm/draft-ietf-ppm-dap-taskprov/issues/34</t>
          </li>
        </ul>
      </section>
      <section anchor="http-field-name-registration">
        <name>HTTP Field Name Registration</name>
        <t>A new entry to the "Hypertext Transfer Protocol (HTTP) Field Name Registry"
will be (RFC EDITOR: change "will be" to "has been") added for the in-band
task-provisioning header:</t>
        <table anchor="http-header">
          <name>Updates to the Hypertext Transfer Protocol (HTTP) Field Name Registry</name>
          <thead>
            <tr>
              <th align="left">Field Name</th>
              <th align="left">Status</th>
              <th align="left">Reference</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">DAP-Taskprov</td>
              <td align="left">permanent</td>
              <td align="left">
                <xref target="taskprov"/> of RFC XXXX</td>
            </tr>
          </tbody>
        </table>
      </section>
    </section>
    <section anchor="extending-this-doc">
      <name>Extending this Document</name>
      <t>The behavior of the <tt>taskprov</tt> extension may be extended by future documents
that define:</t>
      <ol spacing="normal" type="1"><li>
          <t>A new DAP batch mode</t>
        </li>
        <li>
          <t>A new VDAF</t>
        </li>
        <li>
          <t>A new Taskprov extension</t>
        </li>
      </ol>
      <t>Documents defining either a new DAP batch mode or VDAF <bcp14>SHOULD</bcp14> include a section
titled "Taskprov Considerations" that specifies the payload of
<tt>TaskConfig.batch_config</tt> or <tt>TaskConfig.vdaf_config</tt> respectively.</t>
      <t>Note that the registry for batch modes is defined by <xref target="DAP"/>; the registry for
VDAFs is defined by <xref target="VDAF"/>; and the registry for Taskprov extensions is defined in
<xref target="taskprov-extension-registry"/> of this document.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-normative-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="Brandon Pitman" initials="B." surname="Pitman">
            <organization>ISRG</organization>
          </author>
          <author fullname="Eric Rescorla" initials="E." surname="Rescorla">
            <organization>Independent</organization>
          </author>
          <author fullname="Christopher A. Wood" initials="C. A." surname="Wood">
            <organization>Cloudflare</organization>
          </author>
          <date day="2" month="September" year="2025"/>
          <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 on some server, 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 which
   can be used to collect aggregate data without revealing any
   individual contributor's data.

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-ietf-ppm-dap-16"/>
      </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="17" month="June" year="2025"/>
          <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 invalid
   measurement.  Two concrete VDAFs are specified, one for general-
   purpose aggregation (Prio3) and another for heavy hitters (Poplar1).

            </t>
          </abstract>
        </front>
        <seriesInfo name="Internet-Draft" value="draft-irtf-cfrg-vdaf-15"/>
      </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>
      <reference anchor="RFC9458">
        <front>
          <title>Oblivious HTTP</title>
          <author fullname="M. Thomson" initials="M." surname="Thomson"/>
          <author fullname="C. A. Wood" initials="C. A." surname="Wood"/>
          <date month="January" year="2024"/>
          <abstract>
            <t>This document describes Oblivious HTTP, a protocol for forwarding encrypted HTTP messages. Oblivious HTTP allows a client to make multiple requests to an origin server without that server being able to link those requests to the client or to identify the requests as having come from the same client, while placing only limited trust in the nodes used to forward the messages.</t>
          </abstract>
        </front>
        <seriesInfo name="RFC" value="9458"/>
        <seriesInfo name="DOI" value="10.17487/RFC9458"/>
      </reference>
    </references>
    <?line 819?>

<section numbered="false" anchor="contributors">
      <name>Contributors</name>
      <t>Junye Chen
Apple Inc.
junyec@apple.com</t>
      <t>David Cook
ISRG
divergentdave@gmail.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>
