D-6 FHE Scheme Comparison and Summary

We summarize and compare TFHE, BFV, CKKS, and BGV as follows:

Hard Problem Basis
TFHE LWE
BFV
CKKS RLWE
BGV
Table 7: Hard Problem Basis

Unit Data Type
TFHE Vector
BFV
CKKS Polynomial
BGV
Table 8: Unit Data Type

Plaintext
TFHE Number m t # t is a power of 2
BFV Polynomial M t[X]Xn + 1 # t is a prime, and n is a power of 2
CKKS Polynomial M [X]Xn + 1 # n is a power of 2
BGV Polynomial M t[X]Xn + 1 # t is a prime, and n is a power of 2
Table 9: Plaintext

Secret Key
TFHE Vector s $2k # $ is a uniform random distribution
BFV
CKKS Polynomial S $3[X]Xn + 1, where we set 3 = {1,0,1}
BGV
Table 10: Secret Key

Ciphertext
TFHE (Vector a, Number b) = (a $qk,  b q) # q t, and t divides q
BFV
CKKS (Polynomial A,B) = (A $q[X]Xn + 1, B q[X]Xn + 1) # q t
BGV
Table 11: Ciphertext

Noise
TFHE Number e χq # χ is a Gaussian random distribution
BFV
CKKS Polynomial E χq[X]Xn + 1
BGV
Table 12: Noise

Scaling Factor
TFHE Used for Δm, where Δ = q t # t divides q
BFV Used for ΔM, where Δ = q t # t is a prime
CKKS Used for ΔM, where Δ ||M|| q0
# q0 is the lowest multiplicative level’s ciphertext modulus
BGV Used for ΔE, where Δ = t #t is a prime
Table 13: Scaling Factor

Encryption
TFHE (a,b) where a $qk,  b = Δm + e a s mod q, e χq
# After using e each time, throw it away
BFV (A,B) where A $q[X](Xn + 1),  B = ΔM + E A S mod q, E χq
CKKS # After using E each time, throw it away
BGV (A,B) where A $q[X](Xn + 1),  B = M + ΔE A S mod q, E χq
# After using E each time, throw it away
Table 14: Encryption

Cryptographic Relation
TFHE b + a s = Δm + e(𝑚𝑜𝑑q), where Δ = q t # t divides q
BFV B + A S = ΔM + E(𝑚𝑜𝑑q), where Δ = q t # t is a prime
CKKS B + A S = ΔM + E(𝑚𝑜𝑑q), where Δ ||M|| q0
# q0 is the lowest multiplicative level’s ciphertext modulus
BGV B + A S = M + ΔE(𝑚𝑜𝑑q), where Δ = t # t is a prime
Table 15: Cryptographic Relation

Decryption Formula
TFHE m = (b + a s mod q) Δ mod t
m = (Δm + e) Δ mod t # e gets eliminated if e Δ 2
BFV M = (B + A S mod q) Δ mod t
M = (ΔM + E) Δ mod t # E gets eliminated if ||E|| Δ 2
CKKS M = (B + A S mod q) Δ 1 Δ
M = ΔM + E Δ 1 Δ # The final noise remains as E Δ (increase Δ to reduce it)
BGV M = (B + A S mod q) mod t
M = (M + ΔE) mod t # E gets removed if ΔE /mo> q
Table 16: Decryption Formula

Ciphertext Modulus
TFHE A single number q # q t, and t divides q
BFV A single number q # q t
CKKS An L-multiplicative-level modulus chain {q0,q1,,qL}
# each qi = j=0lwj, and each wj is a CRT modulus
having the property: w0 Δ ||M||, wj Δ (for 1 j L)
BGV An L-multiplicative-level modulus chain {q0,q1,,qL}
# each qi = j=0lwj, and each wj is a CRT modulus
having the property: w0 w1 wL mod t
Table 17: Ciphertext Modulus

Ciphertext-to-Ciphertext Addition
TFHE - Ciphertext 𝖫𝖶𝖤s,σ(Δm1) = (a1,b1) = (a1,0,a1,1,,a1,k1,b1) mod q
- Ciphertext 𝖫𝖶𝖤s,σ(Δm2) = (a2,b2) = (a2,0,a2,1,,a2,k1,b2) mod q
𝖫𝖶𝖤s,σ(Δ(m1 + m2)) = (a1 + a2,b1 + b2) mod q
BFV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod q
- Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM2) = (A2,B2) mod q
𝖱𝖫𝖶𝖤S,σ(Δ(M1 + M2)) = (A1 + A2,B1 + B2) mod q
CKKS - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod ql
- Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM2) = (A2,B2) mod ql
𝖱𝖫𝖶𝖤S,σ(Δ(M1 + M2)) = (A1 + A2,B1 + B2) mod ql
BGV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(M1) = (A1,B1) mod ql
- Ciphertext 𝖱𝖫𝖶𝖤S,σ(M2) = (A2,B2) mod ql
𝖱𝖫𝖶𝖤S,σ(M1 + M2) = (A1 + A2,B1 + B2) mod ql
Table 18: Ciphertext-to-Ciphertext Addition

Ciphertext-to-Plaintext Addition
TFHE - Ciphertext 𝖫𝖶𝖤s,σ(Δm1) = (a1,b1) = (a1,0,a1,1,,a1,k1,b1) mod q
- Plaintext number c t
𝖫𝖶𝖤s,σ(Δ(m1 + c)) = (a1,b1 + Δc) mod q
BFV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod q
- Plaintext polynomial C t[X](Xn + 1)
𝖱𝖫𝖶𝖤S,σ(Δ(M1 + C)) = (A1,B1 + ΔC) mod q
CKKS - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod ql
- Plaintext polynomial C [X](Xn + 1)
𝖱𝖫𝖶𝖤S,σ(Δ(M1 + C)) = (A1,B1 + ΔC) mod ql
BGV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(M1) = (A1,B1) mod ql
- Plaintext polynomial C t[X](Xn + 1)
𝖱𝖫𝖶𝖤S,σ(M1 + C) = (A1,B1 + C) mod ql
Table 19: Ciphertext-to-Plaintext Addition

Ciphertext-to-Plaintext Multiplication
TFHE - Ciphertext 𝖫𝖶𝖤s,σ(Δm1) = (a1,b1) = (a1,0,a1,1,,a1,k1,b1) mod q
- Plaintext number c t
𝖫𝖶𝖤s,σ(Δ(m1 c)) = (a1 c, b1 c) mod q
BFV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod q
- Plaintext polynomial C t[X](Xn + 1)
𝖱𝖫𝖶𝖤S,σ(Δ(M1 C)) = (A1 C, B1 C)
CKKS - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod ql
- Plaintext polynomial C (Xn + 1)
1. Basic Multiplication
1. 𝖼𝗍 = 𝖱𝖫𝖶𝖤S,σ(Δ2(M1 C)) = (A1 ΔC, B1 ΔC) mod ql
2. Rescaling by 1 Δ: 𝖼𝗍 Δ = 𝖱𝖫𝖶𝖤S,σ(ΔM1M2) mod ql1
BGV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(M1) = (A1,B1) mod ql
- Plaintext polynomial C t[X](Xn + 1)
𝖱𝖫𝖶𝖤S,σ(M1 C) = (A1 C, B1 C) mod ql
Table 20: Ciphertext-to-Plaintext Multiplication

Ciphertext-to-Ciphertext Multiplication
TFHE - Ciphertext 𝖫𝖶𝖤s,σ(Δm1) = (a1,b1) = (a1,0,a1,1,,a1,k1,b1) mod q
- Ciphertext 𝖫𝖶𝖤s,σ(Δm2) = (a2,b2) = (a2,0,a2,1,,a2,k1,b2) mod q
1. Programmable Bootstrapping:
1. Convert 𝖫𝖶𝖤s,σ(Δm2) into 𝖦𝖲𝖶s,σβ,l(m2).
2. Homomorphic Multiplication:
2. Compute 𝖫𝖶𝖤s,σ(Δm1) 𝖦𝖲𝖶s,σβ,l(m2)
= i=0k1𝖣𝖾𝖼𝗈𝗆𝗉β,l(a1,0),𝖫𝖾𝗏s,σβ,l(si m2)+ 𝖣𝖾𝖼𝗈𝗆𝗉β,l(b1),𝖫𝖾𝗏s,σβ,l(m2)
= 𝖫𝖶𝖤s,σ(Δm1m2)
BFV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod q
- Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM2) = (A2,B2) mod q
1. ModRaise from q to Q = q Δ
1. - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod Q
1. - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM2) = (A2,B2) mod Q
2. Polynomial Multiplication:
1. (A1A2, A1B2 + A2B1, B1B2) (D0,D1,D2)(𝑚𝑜𝑑Q)
3. Relinearization: 𝖼𝗍α = (D1,D0), 𝖼𝗍β = 𝖣𝖾𝖼𝗈𝗆𝗉β,l(D2), 𝖱𝖫𝖾𝗏S,σβ,l(S2)
3. Relinearization: 𝖼𝗍α + 𝖼𝗍β = 𝖼𝗍α+β = 𝖱𝖫𝖶𝖤S,σ(Δ2M1M2) mod Q
4. Rescaling by 1 Δ: 𝖼𝗍α+β Δ = 𝖱𝖫𝖶𝖤S,σ(ΔM1M2) mod q
CKKS - Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM1) = (A1,B1) mod ql
- Ciphertext 𝖱𝖫𝖶𝖤S,σ(ΔM2) = (A2,B2) mod ql
1. Polynomial Multiplication:
1. (A1A2, A1B2 + A2B1, B1B2) (D0,D1,D2)(𝑚𝑜𝑑ql)
2. Relinearization: 𝖼𝗍α = (D1,D0), 𝖼𝗍β = 𝖣𝖾𝖼𝗈𝗆𝗉β,l(D2), 𝖱𝖫𝖾𝗏S,σβ,l(S2)
3. Relinearization: 𝖼𝗍α + 𝖼𝗍β = 𝖼𝗍α+β = 𝖱𝖫𝖶𝖤S,σ(Δ2M1M2) mod ql
3. Rescaling by 1 Δ: 𝖼𝗍α+β Δ = 𝖱𝖫𝖶𝖤S,σ(ΔM1M2) mod ql1
BGV - Ciphertext 𝖱𝖫𝖶𝖤S,σ(M1) = (A1,B1) mod ql
- Ciphertext 𝖱𝖫𝖶𝖤S,σ(M2) = (A2,B2) mod ql
1. Polynomial Multiplication:
1. (A1A2, A1B2 + A2B1, B1B2) (D0,D1,D2)(𝑚𝑜𝑑ql)
2. Relinearization: 𝖼𝗍α = (D1,D0), 𝖼𝗍β = 𝖣𝖾𝖼𝗈𝗆𝗉β,l(D2), 𝖱𝖫𝖾𝗏S,σβ,l(S2)
3. Relinearization: 𝖼𝗍α + 𝖼𝗍β = 𝖼𝗍α+β = 𝖱𝖫𝖶𝖤S,σ(M1M2) mod ql
3. (Optional) Rescaling by 1 Δ: 𝖼𝗍α+β Δ t = 𝖱𝖫𝖶𝖤S,σ(M1M2) mod ql1
# t means rounding to the nearest multiple of t
# The future noise growth rate gets reduced if the ciphertext is rescaled
Table 21: Ciphertext-to-Ciphertext Multiplication

Maximum Possible Multiplications (without Bootstrapping)
TFHE Unlimited with programming bootstrapping (but not possible without it)
BFV Unlimited
CKKS As many times as the length of the modulus chain
BGV As many times as the length of the modulus chain
Table 22: Maximum Possible Multiplications (without Bootstrapping)

Key Switching
TFHE Key-switching from s s:
𝖫𝖶𝖤s,σ(Δm) = b + a 𝖫𝖶𝖤s,σ(s)
𝖫𝖶𝖤s,σ(Δm) = b + 𝖣𝖾𝖼𝗈𝗆𝗉β,l(a), 𝖫𝖾𝗏s,σβ,l(s)
BFV Key-switching from S S:
CKKS 𝖱𝖫𝖶𝖤S,σ(ΔM) = B + A 𝖱𝖫𝖶𝖤S,σ(S)
𝖱𝖫𝖶𝖤S,σ(ΔM) = B + 𝖣𝖾𝖼𝗈𝗆𝗉β,l(A), 𝖱𝖫𝖾𝗏S,σβ,l(S)
BGV Key-switching from S S:
𝖱𝖫𝖶𝖤S,σ(M) = B + A 𝖱𝖫𝖶𝖤S,σ(S)
𝖱𝖫𝖶𝖤S,σ(M) = B + 𝖣𝖾𝖼𝗈𝗆𝗉β,l(A), 𝖱𝖫𝖾𝗏S,σβ,l(S)
Table 23: Key Switching

Modulus Drop (ModDrop)
CKKS - Ciphertext with the multiplicative level l: 𝖱𝖫𝖶𝖤S,σ(ΔM) = (A,B) mod ql
BGV - Ciphertext with the multiplicative level l 1:
- 𝖱𝖫𝖶𝖤S,σ(ΔM) = (A,B) = (A mod ql1,B mod ql1)
Table 24: Modulus Drop (ModDrop)

Encoding and Decoding the Plaintext
TFHE No need, because each plaintext is a single number
BFV Must convert the input slots into polynomial coefficients to support batch processing:
CKKS - Encoding input slots v into polynomial coefficients: m = n1 v InR W~
BGV - Decoding polynomial coefficients m into input slots: v = m W~
Table 25: Encoding and Decoding the Plaintext

Input Slot Rotation
TFHE Not applicable, because its plaintext is a single number (i.e., a single slot)
BFV Given 𝖼𝗍 = 𝖱𝖫𝖶𝖤S(X),σ(ΔM(X)) = (A(X),B(X)),
to rotate the input slots by h positions to the left:
CKKS 1. Update 𝖼𝗍 to 𝖱𝖫𝖶𝖤S(XJ(h)),σ(ΔM(XJ(h))) = (A(XJ(h)), B(XJ(h)))
(where J(h) = 5h mod 2n)
2. Key-switch 𝖱𝖫𝖶𝖤S(XJ(h)),σ(ΔM(XJ(h))) to 𝖱𝖫𝖶𝖤S(X),σ(ΔM(XJ(h))).
BGV Given 𝖼𝗍 = 𝖱𝖫𝖶𝖤S(X),σ(M(X)) = (A(X),B(X)),
to rotate the input slots by h positions to the left:
1. Update 𝖼𝗍 to 𝖱𝖫𝖶𝖤S(XJ(h)),σ(M(XJ(h))) = (A(XJ(h)), B(XJ(h)))
2. Key-switch 𝖱𝖫𝖶𝖤S(XJ(h)),σ(M(XJ(h))) to 𝖱𝖫𝖶𝖤S(X),σ(M(XJ(h))).
Table 26: Input Slot Rotation

Bootstrapping Goal
TFHE To reset the noise.
BFV
CKKS To reset the ciphertext modulus from q0 qL.
BGV
Table 27: Bootstrapping Goal

Bootstrapping Details
TFHE 1. Modulus Switch from q 2n to convert 𝖫𝖶𝖤s,σ(Δm) 𝖫𝖶𝖤s,σ(Δ^m) = (a^,b^) mod 2n,
where Δ^ = 2n t . # where t divides 2n
2. Blind Rotation: Homomorphically rotate the GLWE-encrypted look-up table
polynomial 𝖦𝖫𝖶𝖤S,σ(ΔV ) by Δm + e positions to the left. This is done by
by homomorphically deriving 𝖦𝖫𝖶𝖤S,σ(ΔV k) as follows:
𝖦𝖫𝖶𝖤S,σ(ΔV 0) = 𝖦𝖫𝖶𝖤S,σ(ΔV ) Xb^
𝖦𝖫𝖶𝖤S,σ(ΔV i) = 𝖦𝖫𝖶𝖤S,σ(ΔV i1) Xa^isi1
= 𝖦𝖦𝖲𝖶S,σβ,l(si1) (𝖦𝖫𝖶𝖤S,σ(ΔV i1) Xa^i1 𝖦𝖫𝖶𝖤S,σ(ΔV i1)) + 𝖦𝖫𝖶𝖤S,σ(ΔV i1)
3. Coefficient Extraction: The rotated encrypted polynomial V k’s constant term value is
Δm. Extract this encrypted constant term as 𝖫𝖶𝖤s,σ(Δm) from 𝖦𝖫𝖶𝖤S,σ(ΔV k).
BFV 1. Modulus Switch from q p𝜀 to convert 𝖱𝖫𝖶𝖤S,σ(ΔM) 𝖱𝖫𝖶𝖤S,σ(p𝜀1M) mod p𝜀
2. Homomorphic Decryption:
B + A 𝖱𝖫𝖶𝖤S,σ(ΔS) = 𝖱𝖫𝖶𝖤S,σ(Δ(p𝜀1M + E + Kp𝜀)) mod q, where Δ = q p𝜀
3. CoeffToSlot: Multiply to the ciphertext by n1 InR W~ to move
the plaintext coefficients of p𝜀1M + E + Kp𝜀 to the input slots.
4. EvalExp: Given the digit extraction polynomial G𝜀,v(x), homomorphically compute:
G𝜀,1 G𝜀,2 G𝜀,w1(p𝜀1M + E + Kp𝜀)
, and then the output p𝜀1M + Kp𝜀 gets stored in the plaintext slots.
5. SlotToCoeff: Multiply to the ciphertext by W~ to move p𝜀1M + Kp𝜀 to the
polynomial coefficient positions and get 𝖱𝖫𝖶𝖤S,σ(Δ(p𝜀1M + Kp𝜀)) mod q.
6. Scaling Factor Re-interpretation: View 𝖱𝖫𝖶𝖤S,σ(Δ(p𝜀1M + Kp𝜀)) mod q as
𝖱𝖫𝖶𝖤S,σ ( q p𝜀 (p𝜀1M + Kp𝜀)) 𝖱𝖫𝖶𝖤S,σ (q p (M) + Kq)
= 𝖱𝖫𝖶𝖤S,σ(ΔM) mod q, an encryption of M with the scaling factor Δ = q p
Table 28: Bootstrapping Details: TFHE, BFV

Bootstrapping Details
CKKS 1. ModRaise: View the ciphertext (A,B) mod q0 as (A,B) mod qL
2. CoeffToSlot: Move the coefficients of ΔM + E + Kq0 to the input slots.
3. EvalExp: Homomorphically evaluate the polynomial approximation of
the sine function with period q0 at ΔM + E + Kq0,
which outputs an encryption of ΔM + E in the plaintext slots.
4. SlotToCoeff: Move ΔM + E to the polynomial coefficient positions
to get 𝖱𝖫𝖶𝖤S,σ(ΔM + E).
BGV 1. Modulus Switch from q0 q^ to convert
𝖱𝖫𝖶𝖤S,σ(M) = (A,B) mod q0 𝖱𝖫𝖶𝖤S,σ(M) = (A^,B^) mod q^
, where q^ 1 mod p𝜀
2. Ciphertext Coefficient Multiplication by p𝜀1:
Compute (p𝜀1A^,p𝜀1B^) = (A,B) mod q^ (where q^ 1 mod p𝜀)
, which the ciphertext 𝖱𝖫𝖶𝖤S,σ(p𝜀1M) mod q^ with noise p𝜀E.
3. ModRaise: (A,B) mod q^ (A,B) mod qL
, which is the ciphertext 𝖱𝖫𝖶𝖤S,σ(p𝜀1M + p𝜀E + Kq^) mod qL.
4. CoeffToSlot: Multiply to the ciphertext by n1 InR W~ to move
the plaintext coefficients of p𝜀1M + p𝜀E + Kq^ to the input slots.
5. EvalExp: Given the digit extraction polynomial Gw,v(x), homomorphically compute:
( Gw,1 Gw,2 Gw,w1(p𝜀1M + p𝜀E + Kq^) ) p𝜀1
, and then the output Mp𝜀1 + Kp𝜀 gets stored in the plaintext slots.
6. Homomorphic Multiplication by |p(𝜀1)|p𝜀 to all slots to update the plaintext
from Mp𝜀1 + Kp𝜀(𝑚𝑜𝑑p𝜀) to M + Kp(𝑚𝑜𝑑p𝜀).
7. SlotToCoeff: Multiply to the ciphertext by W~ to move M + Kp to the
polynomial coefficient positions to get 𝖱𝖫𝖶𝖤S,σ(M + Kp) mod qL.
8. Noise Term Re-interpretation: View 𝖱𝖫𝖶𝖤S,σ(M + Kp) mod qL as
𝖱𝖫𝖶𝖤S,σ(M) mod qL, an encryption of M with noise E = K having the
noise scaling factor (i.e., plaintext modulus) Δ = p.
Table 29: Bootstrapping Details: CKKS, BGV

Noise Management
THFE Their bootstrapping resets the noise.
BFV
CKKS - The noise grows without stopping, because its bootstrapping resets only the
modulus chain. To slow down the noise growth, we should increase the plaintext’s
scaling factor Δ.
- CKKS’s EvalExp cannot use the digit extraction polynomial to remove the noise,
because CKKS’s plaintext is not in a modulus ring, but is a real number.
BGV BGV’s modulus switch has the special property of resetting the noise, and BGV’s
bootstrapping resets the modulus chain to enable indefinite modulus switches.
Table 30: Noise Management