一个加密方案中,a、b明文,通过加密算法后生成a1,b1。若满足将a,b进行加法或乘法运算的结果加密 = 密文a1,b1进行加法或乘法运算的值,则说明这个算法具有加法同态性,或者乘法同态性。记加密操作为 E,明文为 m,加密得 e,即 e = E(m),m = E'(e)。已知针对明文有操作 f,针对 E 可构造 F,使得 F(e) = E(f(m)),这样 E 就是一个针对 f 的同态加密算法。全同态加密在同态加密的基础上有更高的要求,需要同时满足加法同态性和乘法同态性。
部分同态加密:指的是该同态加密方案只能做无限次同态加密加法或者只能做无限次同态加密乘法。在对同态加密的研究中,部分同态加密算法是要先于同态加密算法出现的。比较经典的是公钥密码体制中的RSA算法、ElGamal 算法和 Paillier 算法等。全同态加密:指的是可以对密文进行无限次数的任意同态操作。
RSA算法描述:RSA算法的安全性是基于大整数分解的困难性。直至今日,长度超过 1000位的 RSA 密钥仍被认为是安全的。
RSA算法的各个阶段:
(1)密钥生成阶段:
1、随机选择两个不相等的素数p和q(实际应用中,这两个数越大,就越难破解);
2、计算n=pq;n的长度就是密钥长度。实际应用中,RSA密钥一般是1024位,重要场合则为2048位。
3、计算n的欧拉函数φ(n)。根据公式φ(n) = (p-1)(q-1)
4、随机选择一个整数e,也就是公钥当中用来加密的那个数字。φ(n)与e互质,且1< e < φ(n)
5、计算e对于φ(n)的模反元素d。de = 1 mod φ(n)
6、则公钥 pk={n,e},私钥 sk={n,d}
(2)加密阶段:首先对明文进行比特串分组,使得每个分组对应的十进制数小于n,然后依次对每个分组m做一次加密,所有分组的密文构成的序列就是原始消息的加密结果,即m满足0<=m<n,其加密得到的密文 c 为:c = E(m) ≡ m^e (𝑚𝑜𝑑 𝑛)。且0<=c<n
(3)解密阶段:对于密文0<=c<n,解密算法为:m= D(c) ≡c^d (mod n)
给出两个明文m1和m2,使用上述方法加密后得到两个密文,即c1= E(m1) =m1(𝑚𝑜𝑑 𝑛),c2= E(m2) = m2^𝑒 (𝑚𝑜𝑑 𝑛),将两个密文相乘得到c1∗ c2= E(m1) ∗E(m2) = m1^𝑒∗ m2^𝑒 (𝑚𝑜𝑑 𝑛),由于E(m1m2) = (m1m2)(𝑚𝑜𝑑 𝑛),所以可以得出E(m1m2) = E(m1) ∗ E(m2),验证了 RSA 算法的乘法同态性。
仅满足加法同态的算法包括Paillier和Benaloh算法;仅满足乘法同态的算法包括RSA和ElGamal算法。同态加密,由于其支持密文计算的特质,特别适合在云计算环境中应用,既能满足数据应用的需求,又能保护用户隐私不被泄露,是一种理想的解决方案。
参考:
https://www.jianshu.com/p/ff2b538a77e2
赵健伟. 云计算中全同态加密算法的研究[D]. 华北电力大学, 2019.