-
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
Flp: Let the circuit output be a vector? #262
Comments
This seems like a reasonable change to me, but we need to spend some time thinking about how it impacts existing security analysis. At first blush I can't see how this would possibly be a problem. I'm also slightly wary about feature creep. It's definitely worth including if it significantly improves performance for a concrete use case. |
I think having @divergentdave Regarding eliminating joint randomness specifically in Let's say the encoded measurement in Mathematically, I think there is only one "wire polynomial" here ( Now to verify One can argue eliminating joint randomness here is (marginally?) more secure, because now prover doesn't need to know joint randomness. Per the current FLP architecture that Another consideration on which approach we should take between this issue and #266 : if we try to tackle #177 in the future, I don't know yet which approach will accommodate an implementation for #177 better, because to do multiple proofs for a FLP that needs joint randomness, one needs the flexibility to evaluate @divergentdave @cjpatton What do you guys think? |
It's true the soundness error goes up, but not by very much. If there are a constant number of checks, then the soundness error increase is constant as well, something like
I think that we'd get the benefit either way.
I think it's a good idea to make the circuit output a vector, as @divergentdave suggests, but I don't think increasing the size of the size of the verifier shares by Combining the two ideas, we could do something like this?
|
We could borrow from #266, but fix the verifier-only |
That sounds like a good idea! WDYT @junyechen1996? |
So the current proposal would be:
While at it, I want to suggest that we do away with the |
I think it sounds good. For
I think using query randomness here sounds good. I don’t see a particular reason to introduce another type of randomness. |
Another question: Could/should Prio3Sum and Prio3Histogram be changed to drop joint rand in favor of query rand? |
I don't see any downside of dropping joint randomness. Ideally we should avoid using joint randomness in verification if it's not used in proof generation. It doesn't seem like joint randomness is needed by |
Prio3Sum and Prio3Histogram both use joint randomness in proof generation, it's passed in via the If the proposed change here were applied to these Prio3 instances, the |
right, the suggestion is that we change the To be clear: I'm not suggesting we do away with joint rand altogether. Wherever a gadget input takes in the joint rand the prover will need to know the value that's used. |
Yes I should be clearer as well. Regarding
I meant if the type doesn't need joint randomness during proof generation like @cjpatton said, i.e. joint randomness is not fed into any gadget. I think neither Joint randomness is still needed in |
I've spent some time thinking about this and I so no reason why this change would break anything. I'd only add one requirement: we need to document this in https://www.ietf.org/archive/id/draft-irtf-cfrg-vdaf-06.html#section-7.3.1.1 as an extension of the FLP from {{BBCGGI19}} so that it's clear to reviewers that we're doing something slightly different. That said, I'm not aware of any |
Are folks OK with punting this discussion until after the next draft? Or do we want it for draft-07? cc/ @junyechen1996 |
I don't think there is any rush to implement this for draft-07. |
This issue has been open for several months without much movement. Is there still interest in adding this feature to FLP? I believe the only circuits for which we get savings are those for which joint randomness is not passed into a gadget and used only to reduce the outputs:
|
I think these all sound right. I'm not particularly worried about computing a random linear combination of multiple circuit outputs, which only increases soundness error by a negligible amount if field size is large. But if we use joint randomness to do this reduction, it complicates the security analysis a bit, because now client has control over this reduction. Btw, I don't think this will be a breaking change for the wire format between client and server, assuming field size remains the same? If joint randomness is not used in proof generation, aggregators can just use their private randomness to reduce the circuit outputs. I believe all our VDAFs first generate joint randomness field elements used in proof generation, then generate more if they are needed to reduce circuit outputs. We can just avoid generating those joint randomness field elements for reducing circuit outputs? |
It complicates analysis insofar as we have to account for attacks on Fiat-Shamir, hence the larger field (or more proof). Did you have anything else in mind beyond this?
I agree, we can make this change without breaking changes to existing circuits. That said, we may consider modifying existing circuits to make them ore efficient, such as
This should work:
One problem is that we would like preparation to be de-randomized. To do this, we'd have each aggregator derive their verification randomness I would also simplify this further by having each aggregator compute a share of the same verification randomness
We only generate joint randomness if |
Not really. Maybe if the circuit already needs joint randomness to do proof generation, using more joint randomness to reduce circuit outputs isn't a terrible thing..?
I don't quite get this part. Shouldn't
|
Yeah that what I was suggesting here:
|
There's a PR up for extending FLP. I'm going to assume there's no appetite to modify the circuits for which we don't get any performance benefit. This leaves Prio3Sum as the only possible breaking change. I suggest we close this issue as completed once the PR lands and consider what to do with Prio3Sum in #306. |
@junyechen1996 noted to me offline that this optimization doesn't help all that much with PINE. |
While looking at #258, I was considering how one might implement the Prio2 or Prio3CountVec AFE while using Prio3 without joint randomness. No joint randomness means we can't use random linear combinations. Thus, I think we'd be left with taking the conjunction of multiple range check sub-circuits by raising each sub-circuit output to the power$p-1$ , which would be pretty expensive. (I think you'd have to split the exponentiation into multiple gadgets for it to be feasible)
This conjunction could be avoided entirely if we let the circuit output a vector instead of a single field element, and require that it be equal to$\vec{0}$ instead of $0$ . Circuits that take advantage of such a change would have a bigger verifier message, but it would give us more power/expressiveness without joint randomness.
I'm not sure if this change is actually worth making in the document, but I figure it would be a useful counterfactual in Prio2 vs. Prio3 benchmark conversations, and in the broader joint randomness discussion.
The text was updated successfully, but these errors were encountered: