PKE Key-Switching documentation

Github Source: This folder contains the header files of the key-switching methods present in Open-FHE.

The documentation is based on Revisiting Homomorphic Encryption Schemes for Finite Fields

Intuition

Let c_t be a ciphertext c_t = (c_0, c_1) \in \mathbb{R}_Q^2, which can be decrypted with s_A.

Through key-switching, we create a new ciphertext, c_t' such that c_t' = (c_0', c_1') \in \mathbb{R}_Q^2, which contains the same message as c_t, but can be decrypted by a different secret key s_B.

Key switching

  • This feature is needed to compute automorphisms(rotations) of ciphertexts, or to relinearize ciphertexts

Key-Switching Class Inheritance

graph BT Key[Keyswitch: Base Class] --> |Inherited by|KeyRNS[Keyswitch: RNS]; KeyRNS[Keyswitch: RNS] --> |Inherited by|KeyBV[Keyswitch: BV]; KeyRNS[Keyswitch: RNS] --> |Inherited by|KeyHybrid[Keyswitch: Hybrid];

File Listings

Key-Switch Base (keyswitch-base.h)

  • Base class for key switching algorithms.

Key-Switch RNS (keyswitch-rns.h)

  • Abstract interface class for key switching algorithms in RNS

Key-Switch BV (keyswitch-bv.h)

Key-switch Hybrid (keyswitch-hybrid.h)