extensions/telemetry-aggregation.md: four measures over session metrics (Prio3SumVec, Prio3Sum, Prio3Histogram), the DAP task's task_info layout and id, the floor of fifty reports each aggregator enforces, the WQS1 statement each aggregator signs, the WQA1 receipt the collector signs, verification, and a room's cell. delivery-telemetry: a class and what it reveals for every CMCD key the mapping writes (§3.4), delivery-only Request mode (§4.3), §8.1 stated as facts with no consent gate, §8.4 pointing to aggregation. live-metering §4.7/§6.5: a room may aggregate its QoE instead of sending logs. wai-rs: HPKE base mode (RFC 9180 A.1.1), DAP-20 messages, a reference client, leader, helper and collector, the receipt verifier, and the corpus generator; live-conformance/aggregate/vectors.json from fixed seeds. Co-Authored-By: Claude Opus 5.5 <[email protected]>
61 lines
4.1 KiB
Markdown
61 lines
4.1 KiB
Markdown
# live-conformance/aggregate — quality of experience the service receives only as sums
|
|
|
|
The corpus of [`extensions/telemetry-aggregation.md`](../../extensions/telemetry-aggregation.md)
|
|
§12: sessions' measures secret-shared to a leader and a helper aggregator under DAP
|
|
(`draft-ietf-ppm-dap-20`) with Prio3 (`draft-irtf-cfrg-vdaf-22`), the aggregation and the
|
|
collection, the statement each aggregator signs and the aggregate receipt; and the
|
|
delivery-only reports of [`delivery-telemetry`](../../extensions/delivery-telemetry.md) §4.3.
|
|
|
|
## Files
|
|
|
|
- `vdaf-22/`: the test vectors `draft-irtf-cfrg-vdaf-22` Appendix C points to, for the
|
|
variants this extension uses or implements (Prio3Count, Prio3Sum, Prio3SumVec,
|
|
Prio3Histogram) and its XofTurboShake128 vector, each file as published.
|
|
- `vectors.json`, written by `wai_telemetry_aggregate_vectors gen`:
|
|
- `keys`: the leader's, the helper's and the collector's HPKE configurations and private
|
|
keys, the three Ed25519 statement keys and a stranger's, and the seed every task's
|
|
verification key is derived from (DAP §8.6.2). Test material, from fixed seeds;
|
|
- `sessions`: fifty sessions' metrics (delivery-telemetry §7.2) and each one's report time;
|
|
- `flows`, one per measure (§3): the task's configuration, id and verification key; the
|
|
reports, each with its kind (a session's, with the measurement its session gives; one out
|
|
of range, with its encoding; in `outcomes` one replayed, in `start_time` one whose helper
|
|
share does not decrypt); the upload request and the reports the leader refused; the
|
|
aggregation job's request and response and each report's outcome; in `outcomes`, the
|
|
collections each aggregator refuses, before or after the collection; the collection: its
|
|
request, the aggregate share request, the helper's aggregate share, the collection
|
|
response and both statements sealed to the collector; the result and the receipt;
|
|
- `receipts`: aggregate receipts (§7), with the batch's reports where a reader is given
|
|
them, and the outcome §8.2 gives each: accepted, or the reason and where;
|
|
- `cells`: a room's cell from its receipts (§9.2), with the plaintext cell of
|
|
live-metering §4.7 over the same sessions where it is accepted;
|
|
- `delivery_only`: observations with their full and delivery-only Request-mode reports and
|
|
header shards, and reports a reader refuses, each with the key it names;
|
|
- `codes`: the reasons of §11, in its order.
|
|
|
|
**Equivalence.** A conforming implementation passes `vdaf-22/`; recombines every report's
|
|
shares into the measurement stated (a session's report into its session's measurement);
|
|
reproduces each aggregation job's request and response byte for byte and each report's
|
|
outcome; gives each refusal its DAP problem type; opens every aggregate share and statement
|
|
and reaches each result; and gives every receipt, cell and delivery-only report its outcome.
|
|
|
|
**Provenance.** Generated here: `wai_telemetry_aggregate_vectors gen` writes `vectors.json`
|
|
from sessions authored in code, from fixed seeds: every key, salt, report id, Prio3 random
|
|
input, HPKE ephemeral seed and the room id is SHA-256 of `wai:telemetry-aggregate/corpus/`,
|
|
a name and a counter, joined by zero bytes; each session's metrics are a formula of its
|
|
index; times are constants. HPKE with a derived ephemeral key and Ed25519 signing are
|
|
deterministic, so the file is the same bytes on every machine. No recorded data. `vdaf-22/`
|
|
holds the test vectors of the `draft-irtf-cfrg-vdaf-22` repository (its `test_vec/` and
|
|
`test_vec/vdaf/`) at commit 888e4b127b5ba453a010c522c49a178941064919, the commit the draft's
|
|
[TestVectors] reference names, copied unchanged: code components of an IETF/IRTF
|
|
contribution, under the Simplified BSD License the IETF Trust Legal Provisions give them;
|
|
nothing in them is generated here.
|
|
|
|
## Checking
|
|
|
|
```
|
|
cd wai/wai-rs
|
|
cargo run --no-default-features --features telemetry_aggregate --bin wai_telemetry_aggregate_vectors -- verify ../live-conformance/aggregate
|
|
cargo test --no-default-features --features telemetry_aggregate --test telemetry_aggregate
|
|
cd ..
|
|
python3 -I live-conformance/telemetry_aggregate_verify.py live-conformance/aggregate
|
|
```
|