What is the differences among firstModSize, scalingModSize and scalingFactor?

In CKKS, I am confused by the three parameters that firstModSize, scalingModSize and scalingFactor.
In my view, the scalingFactor probably is the logp in CKKS scheme, but what is the means of firstModSize, scalingModSize?

A bit of background information before answering your question.
In CKKS, the ciphertext coefficient modulus at level l is Q_l=q_0 \cdot q_1 \ldots \cdot q_l, where q_i's are prime integers of almost equal size.

firstModSize denotes the size of q_0, a special modulus used to contain the actual payload information (your encrypted data).

scalingModSize denotes the size of the scalingFactor to control the underlying precision of the computation. In CKKS, input real data are scaled by the scalingFactor before getting encoded and encrypted.

Thank you for your help, and I have another question.

In my konwledge, ciphertext coefficient modulus at level L is Q_L = q_0*q^L, in which q^L is the scaling factor.

  1. I detect in OpenFHE the firstModSize is a constant 60, when scalingModSize = 50, the scalingFactor = 2^{62}, I wannd how to calculate the scalingFactor? :thinking:

  2. According to your word, could I understand that, when L=1, q can be denoted as q= scalingFactor = 2^ { scalingModSize}, and q_0 = 2^{ firstModSize}? :thinking:

  3. Additionally, is the scalingModSize also the bits of precision for the decimal part? If so, what is the bits of precision for the integer part? :thinking:


Probably a little bit late, but I think that you are missing the RNS implementation.
The way you describe is before that.

You can check a little bit here A Full RNS Variant of Approximate Homomorphic Encryption