Inquiries on CKKS Scheme and Real Number Optimization in OpenFHE

Dear OpenFHE Team,

First of all, I would like to express my appreciation for OpenFHE. It is the best homomorphic encryption library I have come across. I am currently conducting research in this field and have a few questions regarding the CKKS scheme in OpenFHE.

  1. Does the current implementation of CKKS in OpenFHE support the techniques mentioned in the paper “Approximate Homomorphic Encryption over the Conjugate-invariant Ring”?
  2. Similarly, does it support the techniques described in the paper “Accelerating HE Operations from Key Decomposition Technique”?
  3. If these features are not currently supported, are there any plans to incorporate them into future releases?

Additionally, I noticed that when working with real numbers only, the imaginary part becomes unnecessary. By reducing the use of EvalMod for the imaginary part during CKKS bootstrapping, the precision and performance could potentially be improved. Is there any plan to provide an option in OpenFHE to specifically support real numbers while ignoring the imaginary part?

I am relatively new to this field, so I apologize if my questions seem naive. I sincerely appreciate any insights you could provide. Thank you for your time and effort in maintaining and advancing OpenFHE.

Best regards,
zwp

Thank you for the questions.

We built a prototype of it but did not add it to the official release of OpenFHE because it is not clear how to efficiently do bootstrapping for it, i.e., how to apply a collapsed FFT technique in the linear transforms (the only practical way is to switch to complex CKKS and pay the [double] cost for bootstrapping). The original paper did not provide a bootstrapping procedure for it.

This technique is less efficient than hybrid key switching for 1, 2, or 3 digits (which are common configurations for bootstrapping or deep computations). The technique outperforms hybrid (or BV) key switching only when the number of digits is 4 or higher. We often try to avoid such scenarios in practice (as keys become large). In other words, the extra complexity of implementing this method is not justified by the efficiency gains we would get from it (only in certain special cases).

Currently, we are not planning to add them due to the limitations discussed above.

We are planning to revisit the support of complex numbers and real numbers. We may add the support for complex numbers (for some scenarios). We will revisit the real number arithmetic at the same time.

Thank you for your patience in answering my questions. Additionally, I’ve noticed that bootstrapping to a lower level often takes significantly less time compared to bootstrapping to a higher level. For practical applications, if only one level of noise needs to be refreshed, bootstrapping to more levels would be unnecessary and time-consuming. I’d like to know if OpenFHE supports bootstrapping to a specific target level. If not, will it support this feature in the future, specifically for the CKKS scheme? Thanks again!

No, it is not currently supported. It could be easily added. I’ve created an issue for it: Support CKKS bootstrapping to a specific output level · Issue #927 · openfheorg/openfhe-development · GitHub

1 Like

thank you very much!!!

I took a pass at adding this capability. Unfortunately, it turned out to be more complicated than I thought. I added more detailed comments in the issue. I moved to the issue to the Future Releases milestone. In other words, it will not be available in v1.3, which is the next significant version of OpenFHE.