Skip to content

Rethink TaskConfiguration source-of-truth #4712

Description

@jcjones

I saw in other comments that the TaskConfiguration for Taskprov tasks "is not byte-reconstructible from the stored parameters", necessitating this column, because "it would drop DP strategies and unknown extensions". It seems like we have two different sources of truth for the TaskConfiguration, and we switch between them depending on provisioning mechanism. This seems potentially fraught -- could the same issues that keep us from reproducing a Taskprov task's config also affect other tasks? I think it would be preferable if we stick to one mechanism for producing the TaskConfiguration, either storing it or reconstructing it in a content-preserving way. Doing both seems like it's the worst of both worlds, as we both have to be careful about our data model mapping 1-1 to and from the TaskConfiguration bytes, and we have an extra set of code paths on top of that.

Always saving and using the serialized TaskConfiguration seems like it would be the easiest to maintain. If we were to go the other route, I think I'd want us to have a fuzzer that deserializes arbitrary TaskConfiguration objects, constructs a task from it as we would do in Taskprov, calls task_configuration(), encodes the result, and checks that it is equal to the original fuzzer input.

To address the specific reasons given, first, the differential privacy configuration used to be in older versions of Taskprov, but it has been removed from more recent ones. Thus, our differential privacy strategy field is an implementation-specific task parameter for the time being, until an updated differential privacy draft gets published to set out how to track this as a task extension. At that point, we could re-base our differential privacy support on that extension, and ensure agreement on the differential privacy mechanism between all parties. In the meantime, I think it should be fine for us to drop the dp_strategy field when serializing a TaskConfiguration struct. Second, I think unknown extensions in a Taskprov HTTP header ought to cause us to opt out of a task. The editor's copy says we MUST opt out if "the DAP batch mode or VDAF is not implemented" -- lack of support for a task extension should logically be a reason to opt out as well, since DAP says "extensions are mandatory to support." We ought to refuse to aggregate, rather than carry two conflicting representations of the task's extensions.

Originally posted by @divergentdave in #4698 (comment)

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions