## Homomorphic Encryption

In very simple words, Homomorphic Encryption (HE) is an encryption scheme that lets us compute on encrypted data/cipher text.

Generally Encryption Schemes have 3 methods/functions -:
1. Key Generation
2. Encryption
3. Decryption
But, Homomorphic Encryption comes with an additional capability to compute on encrypted data. More sophisticatedly, HE has an additional "Evaluation operation" that computes any arbitrary function f on cipher-text.

Let's understand it better with a scenario given below:

1. Alice has data m. She needs to compute some arbitrary function F over m. She does not have the capability/resources to compute F over m.
2. She does not want to take any risk with data m. So, she encrypts m with public key pk. She sends Enc(m) along with F over to the server.
3. The evaluation function has to be performed on the cloud. Evaluation operation in HE computes Function F over the Encrypted data i.e. F(C) i.e. F(Enc(m)).
` Result at Cloud = F(C)`
4. This result is sent back to Alice. But what Alice Needs is F(m) and not F(c). This is where the core property of HE comes in.
###### In HE, `The Evaluation of F over C = Encryption of F(m) `. F(C) = E(F(x))

This means, when you compute function F on ciphertext C, you get the encrypted form of computing F over plain text m.

5. Therefore, When Alice receives Result = F(C), she gets Enc(F(m)) which is decrypted to know F(m).

`HE can be defined in one line as an encryption scheme with the following property:F(E(x)) = E(F(x))`

F is the function that we need to compute on data.
E referes to Encryption. x is plain text.

I hope this clears the basic idea of Homomorphic Encryption (HE). 