Strategies for encrypting a large float vector by CKKS in OpenFHE

Hello, I want to encrypt a large float vector, with the size about 300,000. As far as I know, the number of slots is limited by the ring dimension of the context I am choosing. Using large ring dimension is not feasible, and I am looking for strategies that can deal with this. Also, are there any guidelines or standards about security parameters that I should choose for CKKS? I am not sure about I can increase the ring dimension to what level.

Have anyone had experience with dealing this problem? Hope to learn some interesting ideas :wink:. Thank you all.

The first idea that comes to my mind is that using a ring of dimension 2^{16} (thus, having at most 2^{15} values in full packing) is already computationally heavy.
By having 2^{15} slots in each plain/ciphertext, you could split your vector in \approx \frac{300000}{2^{15}} \approx 19 ciphertexts.

Hi @h114mx001,

The high-level idea is to use the minimum ring dimension that achieves the desired security. For instance, OpenFHE can find it automatically based on the security level, multiplicative depth, scaling factor size, and first modulus. Let us say the minimum ring dimension N is 2^{13}. Then you break down 300,000 into multiple ciphertexts, each N/2 in size (just like @narger suggested). You can use the GetRingDimension() method of crypto context to see the ring dimension OpenFHE found.

I suggest watching the approximate homomorphic encryption webinar to learn more about the parameters for CKKS and guidelines for setting them.

1 Like

Seems like this topic is solved. @h114mx001 can you close and mark the solution?

1 Like