Using FHE, zK, and MPC in combination can make cryptographic infrastructure more secure.
This was discussed on @VitalikButerin's x forum some time ago; those interested can look it up.
The Zama protocol also uses a similar approach, combining the advantages of three different algorithms to make Zama FHE more secure. Of course, FHE remains the core of Zama, while the other parts take on some important responsibilities.
A basic, easy-to-understand process:
User-side goal: ZK guarantees input validity
When a user submits a transaction, they will:
1/ Encrypt the input using the FHE public key
2/ Generate a ZK proof (the input was correctly encrypted)
3/ Send the ciphertext (encrypted input text) + proof to the blockchain
On-chain: FHE executes the smart contract
Validator node:
1/ Execute the smart contract in encrypted mode (FHE compute)
3/ Execute the smart contract in encrypted mode (FHE compute)
4/ Obtain the ciphertext output (still the output after ciphertext computation, still ciphertext)
Public verification: FHE allows everyone to replay the computation
1/ Any observer can:
2/ Take the ciphertext input
3/ Re-execute FHE according to the on-chain contract logic
4/ Check if the output ciphertext matches
Achieving transparent and public verification.
MPC (Threshold Decryption): Only the user can retrieve the plaintext.
When the user needs the plaintext result:
Nodes collaborate using their own secret key share (MPC)
to generate partial decryptions
1/ Combined into the final plaintext
2/ Sent back to the user
3/ No single node can decrypt it.
FHE is responsible for ciphertext computation, maintaining privacy and public verification.
MPC is responsible for the key, ensuring that no node can decrypt it alone.
ZK is responsible for input validity (it doesn't perform computation verification of the FHE contract, but instead performs ZK proofs of the FHE encryption process, ensuring both efficiency and security), ensuring that the user cannot forge the ciphertext.