divviup / libprio-rs

Implementation of Prio in Rust.
Mozilla Public License 2.0
103 stars 31 forks source link

Implementing differential privacy for the bounded-norm vector type #440

Open MxmUrw opened 1 year ago

MxmUrw commented 1 year ago

We are now at the point where we would like to add differential privacy to our bounded-norm fixed-point vector type. As was pointed out to us, there has been some discussion about the best way to integrate dp with VDAF / DAP here and here.

Have there been any further developments with regards to dp since those two issues?

It looks like the simplest way to achieve our version of DP (each of the aggregators adds a pre-configured amount of noise to the aggregate share) would be by doing the following:

This approach seems to be the most straight-forward to us, but it possibly disregards the proposed solutions in the above-mentioned threads. We would like to discuss about how best to align our efforts with the future specification of dp in VDAF (if such a thing is indeed going to be specified).

MxmUrw commented 1 year ago

UPDATE: It looks like the proposed solution above is not enough if we want to use janus as aggregator; the Aggregator::aggregate() function is not used in janus, its functionality is (re-)implemented in aggregator/accumulator.rs.

As it currently stands, we need to use a custom fork of both janus and prio to get dp working for our type. We do have a working (and hacky) prototype which does what we want, but are posed with the following question:

Is the implementation of differential privacy in prio types already up for discussion? Or should we continue to develop on our fork(s) on a works-for-us basis?