Class MultipartyRNS

Inheritance Relationships

Base Type

Derived Types

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"]
}

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"]
}

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

template<class Archive>
inline void save(Archive &ar, std::uint32_t const version) const
template<class Archive>
inline void load(Archive &ar, std::uint32_t const version)
inline std::string SerializedObjectName() const