同态加密分享第二期
隐私问题的挑战
最近看了电影《孤注一掷》,里面提到了根据用户习惯数据定制网页,让用户更容易上钩,最终导致了惨剧的发生。不得不说,随着科技的进步,大数据在给为我们提供更便利的服务,但同时也增加了我们隐私泄露的风险。尽管现在有各种各样的加密算法来保护我们的隐私,但是这些加密算法并不能根本的解决问题,为什么呢?因为大部分加密算法都只在数据的传输和存储过程中保护了数据的安全。例如我们考虑一个非对称加密的算法,如下图,这个算法能保证我们安全地将消息传给乙方,在传输过程中,即便有攻击者获取了传输内容,也无法破解我们要传输的原始消息。

假设我们自己是甲方,那么在上述的传输过程中,乙方可以对我们的消息进行解密并进行一些运算。事实上,上述加密过程假设了乙方是完全值得信任的,然而,在现实情况中,乙方可能是chatgpt背后的openai,也可能是midjourney背后的研究实验室,如果他们想,那么我们问的问题,上传的图片将完全暴露在他们眼下。
你可能会想,那这能怎么办?毕竟他们要在我们的数据上进行计算。但如果,我们能提出一种加密方法,使得我们能在加密的数据上进行计算,那么就可以解决这个问题。这种思想早在1978 年就被Rivest 等人提出,他们希望利用同态加密的思想来保护数据信息的安全性。
同态加密的定义
什么是同态加密呢,就是对某些运算具有同态性质的加密方法。在抽象代数中,同态是两个代数结构(例如群、环、或者向量空间)之间的保持结构不变的映射,如果我们只考虑二元运算,那么一个形式化的表示是
当然,同态的完整定义不只针对二元运算,这里我们不再赘述。知道了什么是同态,同态加密就很好理解了,同态加密方法即是在明文空间和密文空间的一个同态。
同理我们也可以定义加密函数在其他运算上的同态性。这里举一个例子,RSA算法就具有乘法同态的性质。
满足同态的性质很困难,事实上,现在常见的同态加密方法仅支持加法和乘法的同态,也就是说我们只能计算密文的加法和乘法,对于非线性函数,例如深度学习常见的激活函数relu,我们无法计算,因此,一些研究者会考虑如何用多项式逼近relu函数。
同态加密的应用
相比较之前只能在传输、存储过程中保证数据安全的加密算法,同态加密的优势是在计算中也能保证数据的安全。这就意味着我们不需要可信方就可以进行计算,其潜在的应用场景是很多的。往小了说就是我们可以从chatgpt得到我们想要的回答,但是不把我们的隐私信息暴露给它。下面是我们现在询问chatgpt得到的结果:

若在未来,我们有了一个加密的chatgpt模型,你的问答过程看起来可能就是这样的

然后你对chatgpt的回答进行解密(密钥只有你自己知道),获得明文的结果。当然,如果进行加密,问题和回答都是以密文形式存储的,并不一定能显示成上面乱码的形式,上图只是一个比喻。
我最近很喜欢用midjourney画图,利用InsightFace插件把我的头放到我喜欢的演员Al Pacino上。

我和几个小伙伴一起租的midjourney账号,所以他们能看到我画的图,这就可能会有些尴尬,如果将来midjourney有加密版本的模型,那么我的工作流程可能就是下面的样子。

当然,上面的应用只是保护了隐私。我认为同态加密真正的前景在于更多的数据可以参与到计算当中,我们知道,参与chatgpt训练的数据相比起我们全人类数据,只能算是九牛一毛,由大量的数据没有参与到大模型的计算中,一个重要原因是出于隐私保护的考虑,现在在机器学习中常见的保护隐私的方法(例如联邦学习)往往需要可信第三方,而很多场景下,除了自己以外,谁都不能信任,这时,只有同态加密才能在保证安全的通知,让数据参与到计算中。