同态加密
这也就是要设计同态加密的原因。它允许加密一个值并在密文上进行算术运算。获取加密的同态性质的方法有多种,我们来介绍一个简单的方法。
总体思路就是我们选择一个基础的(基数需要具有某些特定的属性)的自然数 \(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,那么做除法的次数也就是被加密的值。