同态加密

这也就是要设计同态加密的原因。它允许加密一个值并在密文上进行算术运算。获取加密的同态性质的方法有多种,我们来介绍一个简单的方法。

总体思路就是我们选择一个基础的(基数需要具有某些特定的属性)的自然数 \(g\)(例如 5),然后我们以要加密的值为指数对 \(g\) 进行求幂。例如,如果我们要对 3 进行加密:

$$5^3 = 125$$

这里 125 就是 3 对应的密文。如果我们想要对被加密的值乘 2,我们可以以 2 为指数来对这个密文进行计算。

$$125^2 = 15625 = \left(5^3\right)^2 = 5^{2 \times 3} = 5^6$$

我们不仅可以用 2 来乘以一个未知的值并保持密文的有效性,还可以通过密文相乘来使两个值相加,例如 3 + 2:

$$5^3 \cdot 5^2 = 5^{3 + 2} = 5^5 = 3125$$

同样的,我们还可以通过相除提取加密的数字,例如 5 - 3

$$\frac{5^5}{5^3} = 5^5 \cdot 5^{-3} = 5^{5 - 3} = 5 ^ 2 = 25$$

不过由于基数 5 是公开的,很容易就可以找到被加密的数字。只要将密文一直除以 5,直到结果为 1,那么做除法的次数也就是被加密的值。