# What's the differences among Blind Computation, Secure Multi-Party Computation, Secure Circuit Evaluation and Homomorphic Encryption

We know that Blind Computation, Secure Multi-Party Computation, Secure Circuit Evaluation and Homomorphic Encryption all can process the encrypted data, but I am puzzled by them. What are their differences?

In short,

A cryptography scheme is a homomorphic encryption scheme if it is somehow equivalent to manipulate its plaintexts and its ciphertexts.

Secure multi-party computation and secure circuit evaluation are protocols to calculate functions in a distributed way without disclosing the data owned by each party and blind computation is any technique for transforming the data in a manner such that a third-party can calculate a specific function $f$ over these transformed data without knowing the value of $f$ when applied over the real data.

It is not right to say that

all can process the encrypted data

In fact, the only one that must process encrypted data by definition is homomorphic encryption, because a scheme $\gamma$ is homomorphic for one operation $*$ if, considering $c_1 = E(m_1)$ and $c_2 = E(m_2)$, then $m_1 * m_2$ is equivalent to $c_1 * c_2$ (where equivalent means that $m_1 * m_2 = D(c_1 * c_2)$.

Secure Multi-Party is any protocol for doing distributed computations without revealing the data owned by each party.

For example, if I have $n$ numbers, you have $m$ numbers and we find out how to calculate the average of these $n + m$ numbers in such a way that we will get the result, but I will not know your numbers and you will not know mine, then we are doing Secure Multi-Party Computation. It doesn't require homomorphic encryption. But, homomorphic encryption is typically used because it makes things easier.

Blind computation (in this context) is a technique that aims to hide the input and the output values of a function, in such a way that this function can be calculated for one person and this person will not know the real values used as input and the real value of output. Note that in Secure Multi-Party Computation, unlike the blind computation, all the parties involved know the output value, and the function is typically calculated by all of them in some iterative process.

For example, if I have $n$ numbers $x_1, x_2, ..., x_n$ and I require you to calculate their average. Then, I generate random numbers $r_1, r_2, .., r_n$ and, instead of sending the real data to you, I send $x_1+r_1, x_2 + r_2, .., x_n + r_n$. Then, you will calculate an average $\mu'$ that is not the real answer and send it me. Finally, I just have to subtract the random numbers divided by $n$ to get the real $\mu$.

This example is too simple. Usually, the function to be computed is more complex and it's hard to figure out how to preprocess the data to hide them and come back to the result after the computation. So, again, homomorphic encryption is a good tool...