-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Prio3: Add guidance for choosing PROOFS
and Flp.Field
#311
Comments
(REVISED, see comment below.) I've written a sage script (#318) for plotting robustness of Prio3SumVec for various choices of field and number of proofs. The generated plot is below. What it shows is an upper bound of the probability that
Based on this analysis, I'd suggest the following text change. Top of Section 7.4:
|
This assumes the adversary donates 1000000000 reports? either control the number of devices or break authentication / rate limit. |
is there an explanation that Field64/1 prob is > 1? |
The bond actually says something slightly different: it tells us the maximum probability that, among 1 billion reports that we accepted, at least one of them is invalid. In other words, we must include benign (i.e., not malicious reports) as part of the attack. (Intuitively, this is because VDAF preparation depends on a secret key, and information about this key gets exposed to the adversary over the course of its attack. For details, see the robustness game in ia.cr/2023/130, Figure 3.)
The thing that's plotted is an upperbound of the probability, not the probability. If the bounds is > 1, then it's called "vacuous", meaning it tells us nothing about the chances of a successful attack. The way to interpret this is: the parameters are too weak to provide meaningful robustness. |
Thanks @junyechen1996 and @albertpl for your feedback on the PR. Due primarily to #318 (comment), we need to revise the bounds:
I'd revise the text change as follows:
|
Slight improvement after fixing a typo pointed out by @junyechen1996: |
To help with the tightness of the bound, here is a simple concrete attack. I do lack quite a bit of context, so I hope it's not too far off the actual problem. From what I understand the goal is to find field elements x_1, ..., x_n such that p(r) = 0, where r = H(x_1, ..., x_n) and p(s) = sum_i=1^n x_i (1 - x_i) x^(i-1), but where x_i not in {0,1} for some i. For the moment assume n is even, and there is a nth degree primitive root of unity zeta in the field — that is: there is a zeta with zeta^n = 1 and zeta^i ≠ 1 for all 0 ≤ i < n. Recall two basic facts about such a PROU:
Now, pick a random field element y not in {0,1}, and set x_1 = 0, x_2 = y, x_3 = y, ..., x_n = y. Then for any 0 < i < n, we have p(zeta^i) = y(1-y) ( zeta^i + zeta^(2i) + ... + zeta^(ni) ) = 0. Thus, first precompute Z = { zeta^1, ..., zeta^(n-1) }. Then search for an y ≠ 0, 1 such that H( 0, y, y, ..., y ) in Z. When found, we have broken robustness. Note that in any interesting case, essentially all time of the attack is spent in computing H. With n = 2^20, and we're using a 64 bit field, we expect only 2^44 calls to H. That's practical. When requiring two proofs for that 64 bit field, we're looking at 2^88 calls to H. That's possible to pull of, but very expensive (>10M$). |
This is roughly the idea, but let me make it a little more precise. (@divergentdave please fix any bugs that you see.) We're attacking Prio3SumVec, whose circuit We can think of
In fact,
The question is how much computation do we have to do in order to break robustness of Prio3SumVec with advantage significantly better than In fact, if we have multiple proofs, then we evaluate
This is the case for us :)
❤️
I.e., fix coins for secret sharing and generating blinds and for each
I'd like to come up with a formula. Modeling That means the success probability after This confirms your math. It does seem like you could pull off For the record, |
For Prio3, when joint randomness is used: * RECOMMEND Field128 * Field64 MAY be used, but `PROOFS` MUST be `3` The latter is motivated by issue #177. The recommendation is based on the upper bound given by {{DPRS23}}, Theorem 1 and a matching attack described by Bas Westerbaan (see issue #311). Co-authored-by: Shan <[email protected]>
For Prio3, when joint randomness is used: * RECOMMEND Field128 * Field64 MAY be used, but `PROOFS` MUST be `3` The latter is motivated by issue #177. The recommendation is based on the upper bound given by {{DPRS23}}, Theorem 1 and a matching attack described by Bas Westerbaan (see issue #311). Co-authored-by: Shan <[email protected]>
For Prio3, when joint randomness is used: * RECOMMEND Field128 * Field64 MAY be used, but `PROOFS` MUST be `3` The latter is motivated by issue #177. The recommendation is based on the upper bound given by {{DPRS23}}, Theorem 1 and a matching attack described by Bas Westerbaan (see issue #311). Co-authored-by: Shan <[email protected]>
If a small field is used, then it may be necessary to use a larger number of proofs in order to achieve the desired level of robustness. (Privacy is not significantly impacted by the choice of these parameters.) The draft needs to provide some guidance for choosing this.
We may also consider re-parameterizing the existing Prio3 variants.
See #177 for initial discussion and analysis.
cc/ @albertpl
The text was updated successfully, but these errors were encountered: