-
Notifications
You must be signed in to change notification settings - Fork 709
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Automorphisms. Explain better. Also, how to set Galois Keys? #219
Comments
They are equivalent interpretations.
3^{N/2} modulo 2N equals to 1. It rotates back to the original state. It means that we define (N/2) automorphisms here. Elements 3^i and 3^j have no difference if i is congruent to j modulo N/2 (or equivalently 3^i is congruent to 3^j modulo 2N).
|
On the interpretation piece, instead of pointing out stuff, here's a concrete example:
As for the compiler error, that works. Thanks. |
The automorphisms in SEAL rotate message slots (batched with |
But then, what does
mean? That is in the documentation. |
Here |
Could you give a simple example of this process using a small N, say N=8? |
|
No, x^11 is -x^3 mod x^N+1, so 2x^11 becomes -2x^3, then reduction modulo 17 gives 15x^3. |
Got it. It took me a second to compute its modulus 17 on the coefficients. Now this makes a lot more sense. So, say I have a ciphertext, with say N=2048, and I wanted to perform an automorphism to send
Thanks. |
You probably need to check examples 2_encoders and 5_rotation to know how message slots are created. The automorphism is evaluated by calling |
There is no documentation for GaloisTools. The constructor for that class is
What is By the way, you had a constructor from previous versions that build the galois keys directly from passing it the a vector with the steps to shift...why did you get rid of that? Now you have added this extra layer with another class that needs to be initialized and then call this |
We did not. It is here.
It is log 2 of |
I had missed it in the docs, but indeed the function is still there. And yes, that works. Thanks for all the explanations. |
Hello @WeiDaiWD , I am learning the Galois automorphism in FHE and I find this thread quite helpful, does what you are elaborating here (quoted above) come from the BGV paper (https://eprint.iacr.org/2011/277.pdf)? And as a further request, could you elaborate how this process affects the keys? |
@KaneX Many papers, like the one you posted, point to the same knowledge. You can also check this one. The quoted example is an automorphism |
For the simple case of an Automorphism on a polynomial, no batching business, an example or a few would be greatly helpful.
Specifying the full domain domain for every variable would be great appreciated, for example
Clearly, the powers of case
1
are increasing and the powers of case2
are decreasing for increasing positive i...so, they will overlap...where's the divide? For example, replacei
byN/2-1
in case2
and by1
on case1
. We then have the same power of 3, but interpretations that are not equivalent.Also, what if I want to rotate by more than
N/2
positions to the right, or the left?Now, a practical issue, the compiler keeps yelling at me:
Compiler:
What am I doing wrong? And, how do I fix this? Also, are the values of the Galois elements meant to be odd integers?
The text was updated successfully, but these errors were encountered: