D-2 BFV Scheme

The BFV scheme is designed for homomorphic addition and multiplication of integers. BFV’s encoding scheme does not require such approximation issues because BFV is designed to encode only integers. Therefore, BFV guarantees exact encryption and decryption. BFV is suitable for use cases where the encrypted and decrypted values should exactly match (e.g., voting, financial computation), whereas CKKS is suitable for the use cases that tolerate tiny errors (e.g., data analytics, machine learning).

In BFV, each plaintext is encrypted as an RLWE ciphertext. Therefore, BFV’s ciphertext-to-ciphertext addition, ciphertext-to-plaintext addition, and ciphertext-to-plaintext multiplication are implemented based on GLWE’s homomorphic addition and multiplication (as we learned in 𝑃𝑎𝑟𝑡 𝐼𝐼𝐼), with k = 1 to make GLWE an RLWE.

Required Background


D-2.1 Single Value Encoding
D-2.2 Batch Encoding
D-2.2.1 Encoding1
D-2.2.2 Encoding2
D-2.2.3 Decoding1
D-2.2.4 Decoding2
D-2.2.5 Summary
D-2.3 Encryption and Decryption
D-2.4 Ciphertext-to-Ciphertext Addition
D-2.5 Ciphertext-to-Plaintext Addition
D-2.6 Ciphertext-to-Plaintext Multiplication
D-2.7 Ciphertext-to-Ciphertext Multiplication
D-2.7.1 ModRaise
D-2.7.2 Polynomial Multiplication
D-2.7.3 Relinearization
D-2.7.4 Rescaling
D-2.7.5 Summary
D-2.8 Homomorphic Key Switching
D-2.9 Homomorphic Rotation of Input Vector Slots
D-2.9.1 Rotating Input Vector Slots by Updating the Plaintext Polynomial
D-2.9.2 Updating the Plaintext Polynomial by Updating the Ciphertext Polynomials
D-2.9.3 Summary
D-2.9.4 Encoding Example
D-2.9.5 Rotation Example
D-2.10 Application: Matrix Multiplication
D-2.11 Noise Bootstrapping
D-2.11.1 High-level Idea
D-2.11.2 Modulus Switch
D-2.11.3 Homomorphic Decryption
D-2.11.4 CoeffToSlot and SlotToCoeff
D-2.11.5 Digit Extraction
D-2.11.6 Scaling Factor Re-interpretation
D-2.11.7 Summary