In the practical application of secure multi-party computation, the operation of division is inevitable. But I don't know how to construct a division?
In order to make the problem more accurate and easy to understand and answer, the following three mainstream paths are used to directly benchmark specific algorithms to describe the problem. The three paths selected here are:
- Arithmetic modulo a prime;
- Arithmetic modulo $2^k$;
- Binary circuits.
Path 1: arithmetic module a prime, benchmarking SPDZ algorithm. Among the available papers at present, it seems that only the calculation methods of addition and multiplication are described. Addition is directly operated locally, and the multiplication method is calculated by beaver triple array. So, how should I do division? A more intuitive idea is to use the finite field $\mathbb{F}_p$ to calculate the inverse element of the divisor,such as finding the inverse $a^{-1}$ of a,then multiplying this inverse. The question is: how to calculate the inverse of a secret sharing [a]? What is the specific method here? Or is there any other way to do division without calculating the inverse?
Path 2:Arithmetic modulo $2^k$:benchmarking paper:"SPDZ 2k: Efficient MPC mod 2k for Dishonest Majority". What is confusing is that on modulo $2^k$, a ring is constructed instead of a finite field. That is, Fermat's theorem is no longer satisfied. On a finite ring, the elements in ring does not necessarily have an inverse. So, how should I do division?
Path 3:Binary circuits: There are two technical routes in Binary circuits: the technical route based on yao's garbled circuit and the technical route based on Boolean sharing (for example, GMW and tinyOT algorithms). For these two routes, can I divide as long as the corresponding circuit can be constructed? However, no relevant paper has been found to construct the circuit under division.