I am sorry yesterday I posted this but accidentally deleted it
While exploring CKKS moduli and reading this paper: https://eprint.iacr.org/2020/1118.pdf, I tried something that I may need some confirmation:
I did Plaintext-Ciphertext multiplication two times with different inputs, and the plaintext was encoded right before the multiplication (both have the same level). After the first multiplication, I tried zero-ing the last tower of the plaintext. Surprisingly, the decryption went well even after the next multiplications, and the result is correct. My steps look like this:
p_1 = cc->MakeCKKSPackedPlaintext(x1, 1, c->GetLevel());
c = cc->EvalMult(c, p_1);
p_2 = cc->MakeCKKSPackedPlaintext(x2, 1, c->GetLevel());
zeroingLastTower(p_2);
c = cc->EvalMult(c, p_2);
// decryption
After zero-ing the tower I checked that the tower is now only zeros. In addition, I found that:
- I can’t do that (the zero-ing with no issue) after the second multiplication or before the first multiplication
- I am only able to zero-ing the Plaintext, not the Ciphertext
I believe this phenomenon is related to the paper. I guess “the noise” from this zero-ing is absorbed by the large \Delta' used initially, but I still don’t understand this behavior. I hope someone can help me to understand this. Thank you!