...
FHE = Fully Homomorphic Encryption.
You can read a nice intro here:
https://blog.cryptographyengineering.com/2012/01/02/very-casual-introduction-to-fully/
And more details here: https://en.wikipedia.org/wiki/Homomorphic_encryption
Basically:
“Homomorphic Encryption” means you can perform certain operations on the encrypted objects, and you get the same outputs (still encrypted, of course) as if you had performed the operation on the unecrypted objects.
“Fully Homomorphic Encryption” allows arbitrary operations on the encrypted objects to get the same outputs. And of particular relevance for our application, supports both addition & multiplication.
So using FHE allows us to perform calculations on the encrypted data, and get results which, when decrypted, match the equivalent calculations on the decrypted data.
A really important characteristic of Homomorphic Encryptions is that the encryption process adds entropy, so that a given value x will be encrypted to multiple different values (most likely a different value every time) - this will come up later.
So how do we use this to solve our problem? Let’s go through the details:
...
Server 1 now computes the difference between d (encrypted x) and each of the (encrypted) points of infection, c_i (encrypted y_i).
The reason Server 1 can’t just compare the encrypted values directly is that a homomorphic encryption will add entropy, so the exact same value will generate different results each time that it is encrypted.
Server 1 then multiplies together all of these numbers. It also multiplies the result by another encrypted random number s, and adds the encrypted random number R (which came from P).
...