In addition to the other answers: A secure secret-key homomorphic encryption scheme can be used to create a public-key encryption scheme.
If we consider encryption to be control of read and write abilities on data, then it's easy to see how this is the case.
With normal secret-key encryption:
- only the key holder(s) can create ciphertexts (write permissions)
*
- only the key holder(s) can decrypt ciphertexts (read permissions)
With normal public-key encryption:
- anyone with the public key (which is anyone, as it is public) can create ciphertexts
- only the private key holder can decrypt ciphertexts.
With homomorphic secret-key encryption:
- the key holder can create ciphertexts
- anyone can manipulate ciphertexts (another form of write permission)
- only the key holder can decrypt ciphertexts
This overlaps with the above definition for public-key encryption. While someone without the secret key cannot create a ciphertext for a given plaintext directly, they can do so if they are given pre-existing ciphertexts with known plaintext by the key holder.
An example
Assume the existence of a secure, secret-key, partially homomorphic encryption algorithm that supports integer addition on ciphertexts.
For the sake of simplicity, we will also assume that noise levels and resultant corruption of plaintext are not an issue (this is a real issue that many homomorphic encryption schemes suffer from).
A private key is simply a secret key $d$ for the secret-key encryption algorithm.
- The nature of which is unspecified in this example, it would depend on the concrete scheme being used whether $d$ is a scalar, vector, etc.
A public key $\mathbf{e}$ of is a vector of encryptions of $1$ of length $n$ created using the private key with the symmetric encryption algorithm.
The public key operation generates a vector $\mathbf{r}$ such that $$m = \sum_{i=0}^{n}r_i$$ (secret splitting of $m$ into $n$ shares) and computes $$c \leftarrow \mathbf{er}$$
The inner product of $\mathbf{e}$ and $\mathbf{r}$.
The private key operation applies the decryption procedure from the secret-key cryptosystem to $c$ to recover $$1 * r_0 + 1 * r_1 + 1 * r_2 + \dots + 1 * r_n$$
Which is of course simply equal to $$m = r_0 + r_1 + r_2 + \dots + r_n$$
There are other possible public-key operations, e.g. based on subset-sum problems and/or LWE.
* Only the user with the secret key can create meaningful ciphertexts; An arbitrary block of bits of correct size is a valid ciphertext, but picking such a block of bits arbitrarily is unlikely to yield a meaningful plaintext with overwhelming probability