Skip to content
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

Idea: correction words for truncated weights #78

Open
cjpatton opened this issue Sep 26, 2024 · 9 comments · May be fixed by #110
Open

Idea: correction words for truncated weights #78

cjpatton opened this issue Sep 26, 2024 · 9 comments · May be fixed by #110
Assignees

Comments

@cjpatton
Copy link
Collaborator

cjpatton commented Sep 26, 2024

The FLP is run on the encoded measurement, which in general is longer than the truncated measurement. In some cases it might be much longer, e.g., for the Sum circuit, the encoded measurement is several field elements, while the truncated measurement is just one.

The encoded measurement is only needed when we verify the FLP. Suppose we modified Mastic as follows:

  1. Include shares of the encoded measurement, i.e., flp.encode(weight), in the input shares.
  2. Instead of setting beta to be the encoded measurement share, set beta to be the truncated measurement, i.e., beta = flp.truncate(flp.encode(weight)).
  3. Extend the path consistency check to make sure the left and right children of the root sum up to the encoded measurement.
@jimouris jimouris self-assigned this Oct 30, 2024
@jimouris
Copy link
Owner

jimouris commented Oct 31, 2024

How about:

  1. vidpf.gen takes both beta and beta_truncated and sets beta at level 0, and beta_truncated at all other levels.
  2. vidpf.eval:
    • level > 0: normal path checks (this would now check beta_truncated though)
    • level = 0: truncate beta to get beta_truncated and then perform the check.

@cjpatton
Copy link
Collaborator Author

I think that works. I believe we'll need to invoke flp.truncate() from vidpf.eval() in order to compute the path checks correctly. Alternatively, we could just pass beta to gen() and have it call flp.truncate() as well, which would be a little simpler.

It's sad that this means vidpf is no longer "black box" in the sense that its functionality depends on the details of flp. It would be nice if we could avoid this.

I wonder if we could do something like this: include shares of beta in the VDAF input shares and pass beta_trucnated to gen() and eval()? We would need to connect these somehow to make sure the beta in the input shares is consistent with the payload of the VIDPF output.

@jimouris
Copy link
Owner

I wonder if we could do something like this: include shares of beta in the VDAF input shares and pass beta_trucnated to gen() and eval()? We would need to connect these somehow to make sure the beta in the input shares is consistent with the payload of the VIDPF output.

Just to rephrase, the VIDPF beta will be the truncated one (at all levels) and then the VDAF will be responsible for checking if truncate(beta) is equal to the truncated beta from VIDPF at level 0?

Theoretically, this could work and keep VIDPF as a black box but we need to be sure we cannot find beta and beta' such that truncate(beta) == truncate(beta'). I guess this is important to be able to guarantee regardless of which of the two options we choose.

@cjpatton
Copy link
Collaborator Author

Excellent point. I think this property ought to hold for all weight types we're considering so far.

@jimouris
Copy link
Owner

Almost done but I ran into an issue. In prep_init we have access to both beta_share (from input share) and truncated_beta_share (from VIDPF) but these are shares, not the whole values. So how can we check that truncate(beta) == truncated_beta? Given access only to shares it won't work (e.g., truncate(beta_share) != truncated_beta_share).

@cjpatton
Copy link
Collaborator Author

Hmmmm yeah you're right. I don't think that quite works.

@cjpatton
Copy link
Collaborator Author

I'm not sure we should closet his -- It seems like we can't make this black box, but I think it might still worth doing.

@cjpatton cjpatton reopened this Oct 31, 2024
@cjpatton
Copy link
Collaborator Author

(I'd like to keep this open until I've had time to think it through.)

@cjpatton
Copy link
Collaborator Author

The idea of #109 is to apply VIDPF to the truncated weight and FLP to the untruncated weight. We would "link" them by incorporating the untruncated weight into the payload check.

This would allow for the following "attack": a client can modify a report by "resharing" the FLP weight shares, and the aggregators would accept the modified report. This isn't an attack against our current definition of robustness (ia.cr/2023/130), as the aggregators would still compute the same output shares. However, we're worried this could constitute an attack in the higher level protocol.

Our current approach isn't vulnerable to this attack because the sharing of the weight is determined by the VIDPF.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants