在安全多方计算的系统中,保护数据隐私的方式有同态加密,秘密分享,可信执行环境等。其中同态加密又分为部分同态密码(PHE)和完全同态密码(FHE)。
同态密码有一个特性:将两个密文数据做运算,得到的结果解密后会等于这两个数据的明文状态做相同运算的结果。即:
其中 f() 表示运算,E() 表示加密。
加法同态密码(如 Paillier 密码)有如下特性:
这个特性可以扩展到密文减法,数乘(密文与明文的乘法)运算,但不能实现密文乘法运算,这是密码系统本身决定的。
为解决这个问题,可以使用完全同态密码系统,或秘密分享等其他方案,但目前的完全同态密码体系的效率低下,而秘密分享则需要多个不同谋的计算方,这在中心化网络中难以实现。那么可不可以通过对乘法运算进行一些改造,以达到使用加法同态密码就可以实现密文乘法的目的呢?
由于在加法同态密码体系中,密文无法直接做乘法运算,而需要先解密再相乘,故需要先将密文发回给数据持有方,而这就会导致数据持有方的数据泄露,我们可以考虑使用随机数来对密文做一个隐藏,使用加法同态密码的特性,可以用一个随机数加上密文,即:
然后发给数据持有方,因数据持有方无法知道 r1 和 r2,故无法猜出原数据。数据持有方解密后做乘法,再将乘法结果加密发回给计算方,这样计算方可以得到以下结果:
为得到 ,我们可以比较这两者的不同,对上式的 E() 中的式子做拆解得:
可以看到其中就有 m1 * m2 这个元素,而其他元素的运算都是数乘和加法,这符合加法同态密码的特性,故可得: