Class MultipartyRNS
Defined in File rns-multiparty.h
Page Contents
Inheritance Relationships
Base Type
public lbcrypto::MultipartyBase< DCRTPoly >(Template Class MultipartyBase)
Derived Types
public lbcrypto::MultipartyBFVRNS(Class MultipartyBFVRNS)public lbcrypto::MultipartyBGVRNS(Class MultipartyBGVRNS)public lbcrypto::MultipartyCKKSRNS(Class MultipartyCKKSRNS)
Class Documentation
-
class lbcrypto::MultipartyRNS : public lbcrypto::MultipartyBase<DCRTPoly>
Inheritence diagram for lbcrypto::MultipartyRNS:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"3" [label="lbcrypto::MultipartyBFVRNS" tooltip="lbcrypto::MultipartyBFVRNS"]
"2" [label="lbcrypto::MultipartyBase< DCRTPoly >" tooltip="lbcrypto::MultipartyBase< DCRTPoly >"]
"1" [label="lbcrypto::MultipartyRNS" tooltip="lbcrypto::MultipartyRNS" fillcolor="#BFBFBF"]
"5" [label="lbcrypto::MultipartyCKKSRNS" tooltip="lbcrypto::MultipartyCKKSRNS"]
"4" [label="lbcrypto::MultipartyBGVRNS" tooltip="lbcrypto::MultipartyBGVRNS"]
"3" -> "1" [dir=forward tooltip="public-inheritance"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
"5" -> "1" [dir=forward tooltip="public-inheritance"]
"4" -> "1" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-58d022bede5af4c30ef63813c2e1da60aa7b2bec.png)
Collaboration diagram for lbcrypto::MultipartyRNS:
![digraph {
graph [bgcolor="#00000000"]
node [shape=rectangle style=filled fillcolor="#FFFFFF" font=Helvetica padding=2]
edge [color="#1414CE"]
"2" [label="lbcrypto::MultipartyBase< DCRTPoly >" tooltip="lbcrypto::MultipartyBase< DCRTPoly >"]
"1" [label="lbcrypto::MultipartyRNS" tooltip="lbcrypto::MultipartyRNS" fillcolor="#BFBFBF"]
"1" -> "2" [dir=forward tooltip="public-inheritance"]
}](../_images/graphviz-1bda49336c809e322c7ab332a8ddeb13d28d2251.png)
Abstract interface class for LBC Multiparty algorithms based on threshold FHE. 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
Element – a ring element.
Subclassed by lbcrypto::MultipartyBFVRNS, lbcrypto::MultipartyBGVRNS, lbcrypto::MultipartyCKKSRNS
Public Functions
-
virtual ~MultipartyRNS() = default
-
Ciphertext<DCRTPoly> MultipartyDecryptMain(ConstCiphertext<DCRTPoly> ciphertext, const PrivateKey<DCRTPoly> privateKey) const override
-
Ciphertext<DCRTPoly> MultipartyDecryptLead(ConstCiphertext<DCRTPoly> ciphertext, const PrivateKey<DCRTPoly> privateKey) const override
-
EvalKey<DCRTPoly> MultiMultEvalKey(PrivateKey<DCRTPoly> privateKey, EvalKey<DCRTPoly> evalKey) const override
-
virtual Ciphertext<DCRTPoly> IntBootDecrypt(const PrivateKey<DCRTPoly> privateKey, ConstCiphertext<DCRTPoly> ciphertext) const override
Does masked decryption as part of interactive bootstrapping.
For the case of Server, it expects a ciphertext with both polynomials a and b. For the case os Client, it expects only the polnomial a (for the linear term). Under the hood, the decryption also includes the rounding operation.
- Parameters
privateKey – secret key share
ciphertext – input ciphertext
- Returns
: Resulting masked decryption
-
virtual Ciphertext<DCRTPoly> IntBootEncrypt(const PublicKey<DCRTPoly> publicKey, ConstCiphertext<DCRTPoly> ciphertext) const override
Does public key encryption of Client’s masked decryption as part of interactive bootstrapping, which increases the ciphertext modulus and enables future computations. This operation is done by the Client.
- Parameters
publicKey – joint public key based on Threshold FHE
ciphertext – input ciphertext
- Returns
: Resulting encryption
-
virtual Ciphertext<DCRTPoly> IntBootAdd(ConstCiphertext<DCRTPoly> ciphertext1, ConstCiphertext<DCRTPoly> ciphertext2) const override
Adds up both masked decryptions (one encrypted with public key encryption), which is the last step of the interactive bootstrapping procedure.
- Parameters
ciphertext1 – encrypted masked decryption
ciphertext2 – unencrypted masked decryption
- Returns
: Refreshed ciphertext
-
inline std::string SerializedObjectName() const