Concrete class for the FHE Multiparty algorithms on BFV. A version of this multiparty scheme built on the BGV scheme is seen here:
More...
|
| LPAlgorithmMultipartyBFV () |
|
LPKeyPair< Element > | MultipartyKeyGen (CryptoContext< Element > cc, const LPPublicKey< Element > pk1, bool makeSparse=false, bool fresh=false) override |
|
LPKeyPair< Element > | MultipartyKeyGen (CryptoContext< Element > cc, const vector< LPPrivateKey< Element >> &secretKeys, bool makeSparse=false) override |
|
Ciphertext< Element > | MultipartyDecryptMain (const LPPrivateKey< Element > privateKey, ConstCiphertext< Element > ciphertext) const override |
|
Ciphertext< Element > | MultipartyDecryptLead (const LPPrivateKey< Element > privateKey, ConstCiphertext< Element > ciphertext) const override |
|
DecryptResult | MultipartyDecryptFusion (const vector< Ciphertext< Element >> &ciphertextVec, NativePoly *plaintext) const override |
|
LPEvalKey< Element > | MultiKeySwitchGen (const LPPrivateKey< Element > originalPrivateKey, const LPPrivateKey< Element > newPrivateKey, const LPEvalKey< Element > ek) const override |
|
shared_ptr< std::map< usint, LPEvalKey< Element > > > | MultiEvalAutomorphismKeyGen (const LPPrivateKey< Element > privateKey, const shared_ptr< std::map< usint, LPEvalKey< Element >>> eAuto, const std::vector< usint > &indexList) const override |
|
shared_ptr< std::map< usint, LPEvalKey< Element > > > | MultiEvalSumKeyGen (const LPPrivateKey< Element > privateKey, const shared_ptr< std::map< usint, LPEvalKey< Element >>> eSum) const override |
|
LPEvalKey< Element > | MultiAddEvalKeys (LPEvalKey< Element > evalKey1, LPEvalKey< Element > evalKey2) const override |
|
LPEvalKey< Element > | MultiMultEvalKey (LPEvalKey< Element > evalKey, LPPrivateKey< Element > sk) const override |
|
template<class Archive > |
void | save (Archive &ar) const |
|
template<class Archive > |
void | load (Archive &ar) |
|
std::string | SerializedObjectName () const |
|
virtual DecryptResult | MultipartyDecryptFusion (const vector< Ciphertext< Element >> &ciphertextVec, Poly *plaintext) const |
|
virtual LPPublicKey< Element > | MultiAddPubKeys (LPPublicKey< Element > pubKey1, LPPublicKey< Element > pubKey2) const |
|
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > | MultiAddEvalSumKeys (const shared_ptr< std::map< usint, LPEvalKey< Element >>> es1, const shared_ptr< std::map< usint, LPEvalKey< Element >>> es2) const |
|
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > | MultiAddEvalAutomorphismKeys (const shared_ptr< std::map< usint, LPEvalKey< Element >>> es1, const shared_ptr< std::map< usint, LPEvalKey< Element >>> es2) const |
|
virtual LPEvalKey< Element > | MultiAddEvalMultKeys (LPEvalKey< Element > evalKey1, LPEvalKey< Element > evalKey2) const |
|
virtual shared_ptr< std::map< usint, LPEvalKey< Element > > > | MultiEvalAtIndexKeyGen (const LPPrivateKey< Element > secretShare, const shared_ptr< std::map< usint, LPEvalKey< Element >>> eAuto, const std::vector< int32_t > &indexList) const |
|
template<class Archive > |
void | save (Archive &ar, std::uint32_t const version) const |
|
template<class Archive > |
void | load (Archive &ar, std::uint32_t const version) |
|
std::string | SerializedObjectName () const |
|
template<class Element>
class lbcrypto::LPAlgorithmMultipartyBFV< Element >
Concrete class for the FHE Multiparty algorithms on BFV. A version of this multiparty scheme built on the BGV scheme is seen here:
- Asharov G., Jain A., López-Alt A., Tromer E., Vaikuntanathan V., Wichs D. (2012) Multiparty Computation with Low Communication, Computation and Interaction via Threshold FHE. In: Pointcheval D., Johansson T. (eds) Advances in Cryptology – EUROCRYPT 2012. EUROCRYPT 2012. Lecture Notes in Computer Science, vol 7237. Springer, Berlin, Heidelberg
During offline key generation, this multiparty scheme relies on the clients coordinating their public key generation. To do this, a single client generates a public-secret key pair. This public key is shared with other keys which use an element in the public key to generate their own public keys. The clients generate a shared key pair using a scheme-specific approach, then generate re-encryption keys. Re-encryption keys are uploaded to the server. Clients encrypt data with their public keys and send the encrypted data server. The data is re-encrypted. Computations are then run on the data. The result is sent to each of the clients. One client runs a "Leader" multiparty decryption operation with its own secret key. All other clients run a regular "Main" multiparty decryption with their own secret key. The resulting partially decrypted ciphertext are then fully decrypted with the decryption fusion algorithms.
- Template Parameters
-