前天晚上做了个梦,梦的内容很简单:自己成了一个钱多到数不完的富翁。
直到早上起床上班,拿着电动车钥匙到小区车库,找了半天没找到“自己的”玛莎拉蒂,才从梦中稍微清醒。
然而,事情并没有结束。
这两天一直很苦恼:作为一个“富翁”,不知道自己到底有多少钱是多么可耻的一件事情!“我”怎么才能把自己的钱数一遍呢?
自己数是肯定不可能的,一个人数到手抽筋也数不完。最好的办法是,雇几个工人来帮忙数。但工人在数钱的时候可能会偷钱啊。有没有一种办法能够让工人既能帮我把钱数一遍,又能保证钱不会被拿走呢?
想了半天,突然想到了之前做实验时用过的一种带手套的箱子,箱子大概长下图这个样子:
图片来自网络
把钱锁在这样一个箱子里,工人通过戴着的手套来数钱。因为箱子是锁着的,只有我有钥匙,所以工人无法把钱拿走。等工人数完后,把具体数额告诉我,我再打开箱子把钱拿出来就行了。
而这种方法也类似于密码学上同态加密的原理。
同态加密(Homomorphic Encryption)是很久以前密码学界就提出来的一个概念。早在1978年,Ron Rivest,Leonard Adleman以及Michael L. Dertouzos就以银行为应用背景提出了这个概念。其中Ron Rivest和Leonard Adleman分别就是著名的RSA算法中的R和A。
第一个构造出全同态加密(Fully Homomorphic Encryption)的Craig Gentry给出的直观定义是:
A way to delegate processing of your data, without giving away access to it.
一种不需要访问数据本身就可以加工数据的方法。
也就是说,经过同态加密的数据,其他人可以在不泄露原始内容的情况下进行处理,而拥有密钥的用户对处理过的加密数据进行解密后,得到的正好是处理后的结果。
还是有点抽象?我们回到刚才的例子中来做个类比,这里面的对应关系就是:
箱子:加密算法;
箱子上的锁:用户密钥;
将钱放进箱子并用锁锁上:将数据用同态加密方式进行加密;
数钱:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理;
工人告知数额,开锁:对结果进行解密,直接得到处理后的结果。
这样是不是就一目了然了?
除了可以用同态加密原理数钱外,同态加密在安全云计算与委托计算、文件储存与加密检索、安全多方计算协议、电子选举等方面也有广泛应用。
其中,最主要的一个应用场景就是最近几年比较火的云计算。这里直接把钱换成“数据”,把工人换成“云计算服务商”就可以了。
用户有大量数据需要处理,但自身计算能力有限,需要找云服务来帮助计算。但原始数据直接给云服务商,云服务商可能会拿走自己的数据,用同态加密对数据进行加密后再交给云计算,就能在不泄露隐私数据的情况下,获得计算结果。
当然,目前同态加密仍面临一个挑战:效率。效率问题包含两个方面:一个是加密数据的处理速度;一个是加密数据的数据储存量。
结合刚才的例子想一下:带着手套数钱总没有直接用手数得快吧?把钱放在箱子里,为了方便操作得找个大点的箱子吧?
不过可以相信,随着理论研究与工程化探索的深入,这些问题会慢慢迎刃而解。
最后,回到标题中的问题:如果钱多到数不完,你会怎么办?
参考文献:
[1]Ron Rivest, Leonard Adleman, and Michael L. Dertouzos. On data banks and privacy homomorphisms. Foundations of Secure Computation, 1978.
[2]Craig Gentry. Fully homomorphic encryption using ideal lattices. STOC 2009. Also, see “A fully homomorphic encryption scheme”, PhD thesis, Stanford University, 2009.Craig Gentry的举例为:将金子放在带手套的箱子里。
[3]知乎,刘巍然-学酥:https://www.zhihu.com/question/27645858/answer/37598506