Parallelizing blind rotation (proposed by Misheel)
Fix two parameters and ; must be a power of , but can be any integer. We will work in the cyclotomic ring mod : .
A plaintext will be any data you can store on your computer and work with. A ciphertext will be an encryption of an element of ; you do not need to worry about the encryption scheme. However, the encryption scheme gives you access to the following operations, with relative costs:
- (0): Any computation on plaintext.
- (0): “Encrypt” a plaintext element of , turning it into a ciphertext.
- (0): Add two ciphertexts.
- (1): Multiply a ciphertext by a plaintext element of .
- (12): Multiply a ciphertext by a special ciphertext.
(A “special ciphertext” is a special kind of ciphertext which very valuable, and correspondingly hard to produce. For the purposes of this problem, you cannot make your own special ciphertexts — you can only use ones that are given to you.)
Warmup: Single blind rotation
You are given a plaintext tuple of integers mod : . You are also given special ciphertexts (corresponding to a secret key): ; each of them is either the constant polynomial or . You want to produce a single ciphertext encrypting , where
Hint to the warmup:
If (an accumulator polynomial) is a ciphertext, you can compute
The total cost is .
The real problem: Several blind rotations in parallel.
You have different -tuples . Your goal is to get ciphertexts: for each , you want to get an encryption of , where .
Again, each is a number mod , and each is either or .
You can assume you have special ciphertexts encrypting the ’s. If you like, you can also assume you have additional special ciphertexts, depending only on the ’s – these have been preprocessed for you.
If you repeat the naive procedure above, it will take time . Can you do the calculation more efficiently?
One possible direction: Can you do something with a Fourier transform? (You are free to choose a suitable value of .)
Motivation
This calculation would let us make fully homomorphic encryption (FHE) more efficient.
An FHE scheme allows you to encrypt messages (polynomials, say) in such a way that someone can operate on the messages without knowing the secret key. An FHE ciphertext has “error”, which grows as homomorphic operations are performed. If we want to perform many operations, we need a way to decrease the error; this is known as “bootstrapping”.
Most FHE schemes use an encryption algorithm like the following: a ciphertext has the form , and , where is the message, and is a small value (the “error”). The encryption scheme guarantees that is, say, a multiple of — so as long as , the message can be decrypted unambiguously.
The “blind rotation” trick is as follows. Let be the polynomial , where is rounded to the nearest . Then the constant term of is precisely the rounding of to the nearest — that is, it is precisely .
SO: Using the method above, you can convert an encryption of (with large error) to an encryption of (with much smaller error).