8.6 在云上进行加密计算

假如艾莉丝需要对敏感数据进行计算,而鲍勃是云计算服务的提供商。艾莉丝可以通过鲍勃的公钥把数据传送给鲍勃。鲍勃解密数据,做完计算,把结果用艾莉丝的公钥加密后回传给艾莉丝。如果艾莉丝和鲍勃使用的公钥加密协议足够安全,没有人可以从中得知艾莉丝的数据。如果艾莉丝信任鲍勃那没问题,但如果她对鲍勃不够信任,想让数据对鲍勃也是保密的,还能进行云计算吗?

解决这个问题需要使用所谓完全同态(homomorphic)的加密方法。RSA协议中,如果把两个数(如28和45)经过加密的版本相乘,就可得到它们的乘积1260的加密版本。不需要知道原始的数字,就能通过加密数字计算其乘积的加密版本。另一方面,RSA上的加法不满足这个条件。人们不知道有什么方法可以由28和45的加密版本得到其和73的加密版本。

大多数计算可以用数之间的和与积来表示。和类似于或门,积类似于与门,这样就能用和与积来构造电路。完全同态的加密方法允许我们直接用加密后的数字来计算加密后的和与积。使用这种方法可以从加密的输入直接得到加密的输出,不需要任何附加的通信过程。

艾莉丝可以采用完全同态的加密方案,把加密过的数据上传到鲍勃的计算机。鲍勃在执行艾莉丝指定的计算时,不需要知道艾莉丝的原始数据。鲍勃得到的计算结果是经过加密的版本,他自己无法解密这些结果,只有艾莉丝能在下载之后用自己的私钥进行解密。

很多年来,密码学家都无法实现完全同态加密,很多人曾认为它不可能实现。2009年,斯坦福大学的研究生克雷格·金特里发现了一个实现完全同态加密的方案。这个方案的效率还无法达到实用要求,但可以肯定的是,它开启了全新的可能性之门,不久的将来就会出现更好的加密协议。