今天我很高兴能与大家分享矩阵元最近的一些研究成果,主要集中在隐私计算以及基于密码学的开源框架——Rosetta。
隐私计算的时代是否已经来临?
当前,数据面临着诸多挑战。随着数字化的推进,数据量呈指数级增长,而一些核心数据的保护措施却显得不足。可以看出,数据的生产要素化使得国内外对数据相关议题的关注度不断上升,随之而来的挑战也越来越多。其中,数据隐私问题尤为关键。
从AI的角度来看,AI模型的训练依赖于大量且多样化的数据。数据量的增加和多样性的提升虽然有助于模型的训练,但也带来了隐私保护的困境——数据多样化程度越高,模型的精度也会随之提升,但如何在保护数据隐私的背景下,融合来自不同源和企业的数据,成为AI面临的一大挑战。因此,“隐私计算”这一概念应运而生。
隐私计算可以简单理解为在数据使用和融合过程中,保护个人隐私的综合性技术,而非单一技术。隐私计算大致可以分为三大类:
第一类是密码学;第二类是联邦学习(Federated Learning),这是一种偏向机器学习的技术;第三类是可信执行环境(TEE),属于硬件安全技术。每种技术都有其独特的优势和不足,因此在综合解决方案中,通常会将多种技术结合使用。
密码学主要研究如何在不同场景下保护数据隐私,尤其是在算法和方案设计时,需先定义安全模型,明确什么样的条件下才算安全。随后,运用数学方法来证明方案满足安全定义,因此,密码学建立在完整的数学理论基础之上,其广泛适用性使其能更好地适应不同场景,并在某些情况下提供较高的效率。
然而,密码学也存在局限性,在某些场景中,性能、计算时间和通讯复杂度可能成为瓶颈。此外,向没有密码学背景的人解释相关原理也相对困难。
在本次分享中,我将更侧重于密码学的介绍,包括其历史和主要技术,并对安全多方计算的基本原理进行简要介绍。
密码学如何实现隐私保护?
密码学中的隐私计算技术主要可分为三类:安全多方计算(MPC)、同态加密和零知识证明。
安全多方计算是由姚期智在1982年提出的,起源于“百万富翁问题”。该问题描述了两个百万富翁希望比较各自的财富,但又不愿意透露自己的资产。这一领域由此开辟。
简而言之,可以将安全多方计算理解为多个本地参与者各自拥有隐私数据,想计算一个共同的函数或模型f。若f是一个比较函数,且仅涉及两个人,则形成了经典的百万富翁问题。
与我们今天的话题相关,如果f是一个机器学习模型,例如逻辑回归或CNN,那么这三方各自拥有的数据可以共同用于训练模型。
这正是我们今天讨论的主题:如何进行隐私AI建模?
安全多方计算是一个广泛的概念,在密码学的视角下,MPC在机器学习和AI中的应用是一个具体而重要的方向,而Rosetta正是为了解决这一问题。
Rosetta如何连接隐私计算与AI?
到目前为止,大家可能会遇到一个重要问题:虽然我们想通过密码学来解决问题,但如果缺乏数学基础或没有学习过密码学,相关算法的门槛显得非常高。而在AI领域,专家和学者已经非常熟悉深度学习和机器学习框架。因此,如何将这两种不同专业技能的人群结合起来,成为了现实中亟待解决的问题。密码学相对高的技术门槛影响了整个行业的发展,也阻碍了隐私计算和隐私AI技术的进展。
因此,我们希望让熟悉机器学习但不懂密码学的用户能够利用隐私计算技术。同时,我们也希望那些熟悉AI、TensoRFlow或PyTorch等机器学习框架的开发者能够在几乎不改变开发习惯的前提下,使用隐私AI技术。我们设计Rosetta的初衷,正是为了让不熟悉密码学的AI开发者能够轻松应用隐私计算技术。
因此,Rosetta具备以下特点:易用性、高效性和可扩展性。
在易用性方面,Rosetta完全复用了TensoRFlow的接口,用户在明文和密文模型的编写上并未改变,极大地降低了AI工程师使用隐私计算技术的成本。
在高效性方面,Rosetta兼容原生TensoRFlow对数据流图自动执行的各种运行时优化。我们使用C++实现算法,确保底层算法的高效性,并与业界密码学家合作,设计高效的前沿MPC技术,以适配机器学习或深度学习模型。
在可扩展性方面,由于MPC领域的算法和协议非常多,且涉及不同场景,使用不同算法通常能获得更好的效果。如果有新的算法出现,Rosetta能够迅速集成到整个框架中。
接下来,我们以一个例子来说明:
假设有三个参与方A、B和C,每个人都有一个矩阵Ma、Mb和Mc,他们希望计算Ma乘Mb乘Mc,但每个人只能知道结果,不能得知中间过程。在这种情况下,如何使用Rosetta实现呢?与TensoRFlow明文使用的区别包括两个方面:一是导入相应的包并选择算法,二是处理隐私输入,即需将Rosetta包导入并定义隐私输入。

Rosetta的架构如下:

整体而言,Rosetta的框架图如上所示,包含Python前端API,便于用户使用并与TensoRFlow的前后端进行适配,同时我们开发了一个统一的密码协议管理层,以适配不同的密码协议。
我们的目标是让懂密码学的开发者能够将现有的知识复用到整个框架中,同时使不懂密码学的AI开发者能够以低门槛使用隐私计算技术,从而实现密码学与机器学习的有机结合,这就是Rosetta的目标。
接下来,我们讨论Rosetta的架构,首先是TensoRFlow架构。TensoRFlow架构可以简单理解为图的转换和执行。我们充分利用TensoRFlow架构进行密码适配。
当TensoRFlow将图转换为标准的传统图时,我们进行了静态处理,将每一个操作全部转换为安全操作(SecureOp),以支持后续的密码算法。

第二步是图执行,我们运用了动态处理。左侧的图是转换后的图,当数据输入时,动态处理能够根据每个图,灵活选择某一类密码协议来执行。
我们可以充分利用TensoRFlow框架,同时因为底层密码算法的支持,动态处理也能够利用TensoRFlow的优化器之间的并行性,提升运行效率。

接下来,我们讲述Rosetta在实际应用场景中的案例:在金融场景下的应用。银行A与B各自拥有数据,而互联网公司C也有数据,三方希望通过Rosetta建立模型,例如训练逻辑回归以生成风控模型,同时确保各方数据不会被彼此获取。在这种场景下,使用Rosetta解决问题非常简单。

如上图所示,导入Rosetta,选择一个协议和相应输入,后续便可使用标准的TensoRFlow进行回归,因此无需任何密码学背景即可完成整个过程。在多数据融合的训练场景中,只需一个Rosetta包即可处理数据,后续逻辑回归的代码书写与原代码完全相同,甚至可直接复制过来。此时,有一个问题是,使用MPC方式即密文方式时,其精度与明文方式有何不同?

如上图所示,经过对比可以发现,两者几乎没有差异,基本等价。因此,在设计足够多的参数和精度后,完全可以保证整个模型的精度。当然,还有一个应用场景是模型预测服务。

最后,值得一提的是,Rosetta目前刚刚起步,已开源至0.2.1版本。以下是GITHUB链接。
