话还是说回来,继续说全同态加密,否则讲格密码可以讲一千零一夜。那么30多年人们没有提出一个全同态加密方案,为什么Gtentry可以构造出来呢?
因为Gentry发现了一个方法:Boostrapping,该方法我把它称之为:同态解密。这个方法的作用是约减噪音。因为格上加密法案是噪音方案,即在密文中含有噪音,所以每次密文计算后,噪音都会增加,尤其是密文乘法导致噪音增长的非常快。即使你构造了一个具有同态性的加密方案,由于噪音增长,导致无法获得同态性。因此,约减密文计算后的噪音变得异常关键。当然在此之前应该构造一个具有同态性的方案。
Gentry是在格上首先构造一个具有同态性的加密方案,该方案能够做加法,也能够做乘法,但是只能做有限次的乘法。为什么呢?因为噪音的增长。噪音增长太快,使得无法继续密文计算。这样的方案称为:有限同态加密方案(Somewhat HE)。
如果想做更多的计算,怎么办呢?约减噪音,我想连小孩都会的有的常规想法。路线并不新颖,不知道是否让你失望了。关键是怎么约减?
Gentry观察到一个现象:如果解密的时候,输入的不是密文,而是对密文加密后的密文,同样,不是解密密钥,而是加密后的密钥,解密会输出什么东西呢?
答案:一个新的密文,该新密文依然是对原明文的加密。最重要的是新密文的噪音总是恒定的。
说到这里,你反应过来了么。这意味着每次密文计算后,如果使用同态解密操作,将会输出一个噪音恒定的新密文,这个新密文可以继续计算,计算后再同态解密,再计算,周而复始,无穷尽也,所谓任意计算实现了。
把密文再加密,密钥再加密后,输入到解密函数中,输出新的密文,这个方法就是Boostrapping技术,即:同态解密。
Gentry的论文,被号称是难以理解的。例如上面这个Boostrapping方法,当时我是理解的很久,因为它里面有很多技术细节。Gentry的博士论文也被号称没有几个人能够读懂。但是最后我是读懂了。
有了同态解密,全同态加密几乎被构造出来。几乎是因为Gentry构造的加密方案中,解密电路的深度太深,导致无法同态解密。为此,Gentry又发明出一个方法:压缩电路,将解密电路的复杂度降低,使得可以同态执行解密电路。你说复杂不复杂。
随后人们遵循Gentry 的思想提出了整数上的,小主理想上的,而且还进行了实现。但是依然很复杂。
然而,2012年有一个人Brakerski将全同态加密推上了顶峰,使之变的简单了,而且将全同态加密构件建在LWE问题之上。
LWE问题是一个格上的平均性困难问题,可以被归约到格上标准困难问题。也是抗量子的。目前主流的格上加密方案都是构建在LWE之上。
由于使用Boostrapping实现任意计算代价太高,而且现实中并不太需要任意计算,所以退而求其次,如果能够执行多项式深度的同态计算,也是能够满足大多数需求的。所以随后的LWE上的全同态加密不使用Boostrapping技术约减噪音,而是使用其它噪音约减技术,使得能够进行多项式深度的密文计算,代价大大降低了。
总之,目前只有在格上建立的全同态加密方案是安全的。建立的方法就是首先建立一个有限同态加密方案(SWHE),然后使用噪音约减技术,使之成为一个能够执行多项式深度同态计算的方案,称之为层次型全同态加密。
全同态加密的效率也是飞速提高,目前执行一次乘法在毫秒级,密文与明文之比约为10^2。微软去年初在人工神经网络上执行密文计算,效果是令人满意的。
全同态加密目前处在工程化研究阶段,相信全同态加密很快就会进入实践。