前天晚上做了个梦,梦的内容很简单:自己成了一个钱多到数不完的富翁。

直到早上起床上班,拿着电动车钥匙到小区车库,找了半天没找到“自己的”玛莎拉蒂,才从梦中稍微清醒。

然而,事情并没有结束。

这两天一直很苦恼:作为一个“富翁”,不知道自己到底有多少钱是多么可耻的一件事情!“我”怎么才能把自己的钱数一遍呢?

自己数是肯定不可能的,一个人数到手抽筋也数不完。最好的办法是,雇几个工人来帮忙数。但工人在数钱的时候可能会偷钱啊。有没有一种办法能够让工人既能帮我把钱数一遍,又能保证钱不会被拿走呢?

想了半天,突然想到了之前做实验时用过的一种带手套的箱子,箱子大概长下图这个样子:

图片来自网络

把钱锁在这样一个箱子里,工人通过戴着的手套来数钱。因为箱子是锁着的,只有我有钥匙,所以工人无法把钱拿走。等工人数完后,把具体数额告诉我,我再打开箱子把钱拿出来就行了。

而这种方法也类似于密码学上同态加密的原理。

同态加密(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.

一种不需要访问数据本身就可以加工数据的方法。

也就是说,经过同态加密的数据,其他人可以在不泄露原始内容的情况下进行处理,而拥有密钥的用户对处理过的加密数据进行解密后,得到的正好是处理后的结果。

还是有点抽象?我们回到刚才的例子中来做个类比,这里面的对应关系就是:

箱子:加密算法;

箱子上的锁:用户密钥;

将钱放进箱子并用锁锁上:将数据用同态加密方式进行加密;

数钱:应用同态特性,在无法取得数据的条件下直接对加密结果进行处理;

工人告知数额,开锁:对结果进行解密,直接得到处理后的结果。

这样是不是就一目了然了?

除了可以用同态加密原理数钱外,同态加密在安全云计算与委托计算、文件储存与加密检索、安全多方计算协议、电子选举等方面也有广泛应用。

其中,最主要的一个应用场景就是最近几年比较火的云计算。这里直接把钱换成“数据”,把工人换成“云计算服务商”就可以了。

用户有大量数据需要处理,但自身计算能力有限,需要找云服务来帮助计算。但原始数据直接给云服务商,云服务商可能会拿走自己的数据,用同态加密对数据进行加密后再交给云计算,就能在不泄露隐私数据的情况下,获得计算结果。

当然,目前同态加密仍面临一个挑战:效率。效率问题包含两个方面:一个是加密数据的处理速度;一个是加密数据的数据储存量。

结合刚才的例子想一下:带着手套数钱总没有直接用手数得快吧?把钱放在箱子里,为了方便操作得找个大点的箱子吧?

不过可以相信,随着理论研究与工程化探索的深入,这些问题会慢慢迎刃而解。

最后,回到标题中的问题:如果钱多到数不完,你会怎么办?欢迎在下方留言。

参考文献:

1Ron Rivest, Leonard Adleman, and Michael L. Dertouzos. On data banks and
privacy homomorphisms. Foundations of Secure Computation, 1978.
2Craig 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

关注我们

戳阅读原文,访问 PlatON 官网!