Firstly, it isn’t actually multiplication but really just an AND operation. The AND and the XOR together mean that this is “Turing complete” meaning that you can do ANY digital logic with it using only those two operations. For instance, you could make pacman with it now, or a web browser.

Secondly, yes multiplication is repeated addition, but if you are able to do multiplication homomorphically, it means that the person doing the multiplication doesn’t have to know what numbers are being multiplied.

With repeated addition, the person doing the math would need to know it was being multiplied by 3 (for example) and do that many additions. There are times where this is appropriate (where the algorithm being performed on the secret numbers requires a multiplication), but other times it isn’t appropriate. If you want to multiply two secret (encrypted) numbers, you don’t want the person doing the math to know what one of the numbers is, just so they can do the multiplication.

]]>Let’s say that we have a key size of 1, where the key is [1] and we have three encrypted bits.

A = 0.01 (plain text was false)

B = -0.99 (plain text was true)

C = 0.99 (plain text was true).

If we want to perform A | B | C, (| is or), we do this:

A = (A + B) mod 2

A = (A + C) mod 2

When we actually do this, here’s what we get:

A = ( 0.01 – 0.99) = -0.98

A = (-0.98 + 0.99) = 0.01

If we decrypt that by rounding it to the nearest integer and then rounding it, we get 0 (false)

However… false OR true OR true should be true.

Where did i mis-step?

Thanks! (:

]]>