data61 / MP-SPDZ

Versatile framework for multi-party computation
Other
916 stars 278 forks source link

Comparison algorithm used in Decision Tree #1164

Closed sandy9999 closed 1 year ago

sandy9999 commented 1 year ago

I'm trying to figure out the Secure Comparison protocol used in Decision Tree Training (Hamada et al.) based on Replicated Sharing Scheme.

I found a related issue: https://github.com/data61/MP-SPDZ/issues/924 . Quoting from the paper linked here,

image

This should mean that Local Share Conversion is enabled. But I tried that with:

./compile.py -Z 2 -R 64 breast_tree and the communication numbers differ from

./compile.py -R 64 breast_tree (Mohassel Rindal version)

I also tried the other Mixed Circuit settings such as:

./compile.py -Z 3 -R 64 breast_tree

./compile.py -Y -R 64 breast_tree

and

./compile.py -X -R 64 breast_tree

But these also have different communication numbers.

Which setting of Mixed Circuits is enabled then? Which is the comparison protocol being used? Can I get both paper and code link for the same?

mkskeller commented 1 year ago

Mohassel and Rindal propose two conversion methods that are captured by -Z 2 and -Z 3. Without any parameter no mixed circuit is used but an adapted version of the following: https://www.researchgate.net/profile/Sebastiaan-Hoogh/publication/225092133_Improved_Primitives_for_Secure_Multiparty_Integer_Computation/links/0c960533585ad99868000000/Improved-Primitives-for-Secure-Multiparty-Integer-Computation.pdf

-X and -Y are captured by the following paper: https://eprint.iacr.org/2020/338

All variants use the following function: https://github.com/data61/MP-SPDZ/blob/fd42b4a8b233d1f9dfa699a776518d0069b775ff/Compiler/comparison.py#L84C1-L105C1 You can see a branch on use_split() reflecting the use of -Z. The branch on -X/-Y happens in the masking here: https://github.com/data61/MP-SPDZ/blob/fd42b4a8b233d1f9dfa699a776518d0069b775ff/Compiler/comparison.py#L276C1-L288C1

sandy9999 commented 1 year ago

Thank you! This helps.