diff --git a/api.bs b/api.bs
index e57a2c9..5f73acf 100644
--- a/api.bs
+++ b/api.bs
@@ -392,20 +392,12 @@ select a supported [=aggregation service=].
The page may select any of the supported services found in
aggregationServices.
The name of the selected service must be supplied as
-the `aggregator` member of the
+the {{PrivateAttributionConversionOptions/aggregator}} member of the
{{PrivateAttributionConversionOptions}} dictionary when calling the
measureConversion() method.
-
-This section needs to be more precise about [=site=] vs. [=origin=].
-
## Finding a Supported Aggregation Service ## {#find-aggregation-service}
-
Is any additional information required in the
-{{PrivateAttributionAggregationService}} dictionary? Do we want
-to rename `apiVersion` to `protocol`? And we should definitely
-define an enum for it.
-
The aggregationServices attribute
contains a list of aggregation services supported by the [=user agent=]. The page
must select and specify one of these services when calling the
@@ -416,14 +408,21 @@ but that is not required,
and impressions are not scoped to a single aggregation service.
+enum PrivateAttributionProtocol { "dap-12-histogram", "tee-00" };
+
dictionary PrivateAttributionAggregationService {
- required DOMString name;
- required DOMString apiVersion;
+ required DOMString url;
+ required DOMString protocol;
+};
+
+[SecureContext, Exposed=Window]
+interface PrivateAttributionAggregationServices {
+ readonly setlike;
};
[SecureContext, Exposed=Window]
interface PrivateAttribution {
- attribute FrozenArray aggregationServices;
+ readonly attribute PrivateAttributionAggregationServices aggregators;
};
@@ -431,21 +430,33 @@ The aggregationServices attribute
contains the following information about each supported aggregation service:
- - name
+ - url
-
- Name of the aggregation service. This is passed as the `aggregator`
- parameter to measureConversion().
+ A URL that identifies an [=aggregation service=].
+ This value is passed as the {{PrivateAttributionConversionOptions/aggregator}} parameter
+ to measureConversion() to select the identified aggregation service.
- - apiVersion
+ - protocol
-
- Version of the Private Attribution API supported by this aggregator. Even if
- an aggregator supports multiple versions of the API, it is expected to
- assign a unique aggregation service name for each supported version.
- Thus, the API version is implicit in the aggregator selection
- and does not need to be passed to measureConversion().
+ The {{PrivateAttributionProtocol|protocol}} that the [=aggregation service=] uses.
+ Different versions of the same protocol use different values.
+ Even if a single service provider supports multiple protocols,
+ each needs to use a different URL.
+ This ensures that each can be uniquely identified by URL
+ without also specifying the choice of protocol.
+The PrivateAttributionProtocol describes the submission protocol
+used by different [=aggregation services=]. This document defines two protocols:
+
+
+ - dap-12-histogram
+ - A DAP-based protocol [[DAP]] that uses [=MPC=]; see [[#s-mpc]].
+ - tee-00
+ - A protocol for submission to a [=TEE=]; see [[#s-tee]].
+
+
## Saving Impressions ## {#save-impression-api}
The saveImpression() method requests
@@ -591,7 +602,7 @@ The arguments to measureConversion() are as
aggregator
A selection from the [=aggregation services=] that can be found in aggregationServices.
+ attribute for=PrivateAttribution>aggregators.
epsilon
The amount of [=privacy budget=] to expend on this [=conversion report=].
@@ -889,7 +900,18 @@ The aggregation method also needs to define
how the aggregated result is obtained by a site.
-## Multi-Party Computation Aggregation ## {#mpc}
+## Multi-Party Computation Aggregation ## {#s-mpc}
+
+A Multi-Party Computation (MPC) system is one that
+involves multiple independent entities
+that cooperatively compute an agreed function.
+
+This specification uses an MPC system based on Prio [[PRIO]]
+and the Distributed Aggregation Protocol (DAP) [[DAP]].
+This is a two-party MPC system that is characterized by
+its reliance on client-provided proofs of correctness for inputs.
+This allows for very efficient MPC operation
+at a modest cost in the size of submissions to the system.
An aggregator that uses Multi-Party Computation (MPC)
comprises two or more independent services
@@ -904,7 +926,7 @@ a subset of the entities that participate are honest.
### Prio and DAP ### {#prio}
-The "prio3" aggregation method
+The "dap-12-histogram" aggregation method
uses Prio [[PRIO]]
and the Distributed Aggregation Protocol (DAP) [[DAP]].
Specifically, this aggregation method uses
@@ -940,24 +962,23 @@ User agents need to include all of these extensions in reports
that they generate.
+## Trusted Execution Environments ## {#s-tee}
-
-## Trusted Execution Environments ## {#tee}
+A Trusted Execution Environment (TEE) uses specialized hardware
+to ensure that computation is isolated
+from other programs that run on the same hardware.
TODO
-## Conversion Report Encryption ## {#encryption}
-
-TODO
-
## Anti-Replay Requirements ## {#anti-replay}
[=Conversion reports=] generated by browsers are bound
to the amount of [=privacy budget=]
that was expended by the site that requested the report.
-TODO
+An [=aggregation service=] MUST guarantee
+that it does not accept the same report more than once.
# Differential Privacy # {#dp}