如何在AI和大数据应用中保护数据的安全和隐私是一个现实挑战。
本文介绍了基于英特尔SGX的隐私保护机器学习方案。方案应用了蚂蚁集团发起的开源TEE操作系统Occlum,英特尔开源的BigDL PPML,支持端到端的安全分布式大数据分析(例如Spark)和AI应用。
该方案已上线到Occlum 1.0 版本中(历时四年打磨,可信执行环境开源操作系统Occlum v1.0正式发布!)
作为示例,文章展示了GBDT样例的详细部署步骤以及BigDL PPML 在蚂蚁链摩斯隐私计算平台的应用。最后,文章介绍了Occlum和BigDL PPML的新特性和新应用场景。
背景:面向大数据与AI 的数据融通面临严峻安全风险数字化转型凸显了数据的重要价值,加速了数据的流转,也带来了复杂的多方数据存储、流转与处理问题。特别是在 AI、大数据等应用中,由于单个组织难以掌握到 AI 与大数据应用所需要的全部数据,因此需要通过多方数据合作,实现数据资源的融通利用。例如,在训练金融 AI 算法时,单体金融机构的数据往往无法满足算法训练的需求,此时可以通过联合建模的方式,实现数据的共享,并共同创建、维护该 AI 模型。由于跨机构、跨行业的数据融合、联合分析和建模的需求日趋增加,数据安全风险急剧增长。这一方面是由于数据本身可复制、易传播,在传统安全模式下,数据一经分享难以追踪。另一方面,数据持续流动会导致责任划分不明确、权限控制困难、以及问题难以追责等问题。保证数据的安全可靠成为重中之重。蚂蚁集团和英特尔打造端到端隐私保护机器学习方案蚂蚁集团一直积极探索隐私保护机器学习领域,并发起了开源项目Occlum。Occlum 是用于多种TEE(包含英特尔® SGX )的内存安全多进程用户态操作系统(LibOS)。使用 Occlum 后,机器学习工作负载等只需修改极少量(甚至无需修改)源代码即可在TEE 上运行,以高度透明的方式保护了用户数据的机密性和完整性。用于英特尔® SGX 的 Occlum 架构如图所示。
Occlum有以下显著特征:●高效的多任务处理。Occlum提供单Enclave多进程的轻量级执行模式,与单Enclave单进程的LibOS相比,Occlum进程在启动时最高快1000倍,在IPC上快3倍。此外,如果需要,Occlum还提供了一个可选的多域软件故障隔离方案来隔离Occlum进程。●支持多个文件系统。支持多种类型的文件系统,如只读散列文件系统(用于完整性保护)、可写加密文件系统(用于机密保护)、内存文件系统,不受信任的主机文件系统(用于LibOS和主机操作系统之间方便的数据交换)等等,满足应用的各种文件I/O需求。●内存安全。Occlum是业内第一个用内存安全编程语言(Rust)编写的LibOS。Rust语言是追求内存安全,且不带来额外性能损耗的编程语言。因此,在Occlum中杜绝了低级的内存安全错误,用于托管安全关键的应用程序时更值得信赖。●支持musl-libc和glibc应用,支持超过150个常用系统调用,绝大多数程序无需改动(甚至无需重新编译)或者只需少许改动即可运行在Occlum LibOS之上。●支持多种语言开发的应用,包括但不限于c/c++,Java,Python,Go和Rust。●易用性。Occlum提供了类容器的用户友好的构建和命令行工具。在SGX Enclave内的Occlum上运行应用程序可以非常简单。在Occlum提供的安全内存运行环境上,英特尔和蚂蚁集团技术团队基于BigDL构建了一个分布式的隐私保护机器学习(Privacy Preserving Machine Learning, PPML)平台,能够保护端到端(包括数据输入、数据分析、机器学习、深度学习等各个阶段)的分布式人工智能应用。图 2. BigDL PPML 软件栈与传统的隐私计算框架不同,BigDL PPML提供了一个可以运行标准大数据应用的环境,希望帮助现有的大数据/分布式应用无缝的迁移到端到端安全的环境中,并且强化每个环节的安全性。在此基础上,PPML也提供了安全参数聚集、隐私求交和联邦学习等高阶功能,帮助行业客户打破数据孤岛,进一步实现数据赋能。以Apache Spark为例,通过BigDL PPML和Occlum提供的Spark in SGX功能,可以让现有的Spark应用,直接运行到SGX环境中,而不用做任何代码修改。受益于第三代至强平台提供的大容量SGX EPC,Spark的内存计算可以完全被SGX保护,并且可以根据数据规模进行横向拓展,从而轻松支持TB级别的数据规模;另一方面,负责完整性的远程证明功能,也被无感的添加到了整个流程中,应用开发者不需要显式的增加远程证明代码,即可通过Occlum和PPML提供的远程证明功能实现实例的远程证明和校验。
整个应用的部署过程如下:
●环境部署阶段:
- 1. 集群管理员设置Kubernetes SGX插件
- 2.集群管理员配置远程证明服务(Attestation Service)
●应用部署阶段:
- 1. 开发人员提前注册应用(应用审核、权限申请和代码审计等)
- 2. 开发人员提交应用
- 3. 开发人员获取结果
基于GBDT样例的方案部署过程基于SGX与Occlum,BigDL PPML提供了大数据分析、机器学习、深度学习等应用的支持。以下以Spark MLlib GBDT分布式训练为例,介绍PPML在机器学习应用方面的实践步骤与推荐配置。1. 准备基于Occlum SGX的BigDL PPML运行环境
a.部署Kubernetes集群、英特尔® SGX 插件,如下所示
为了利用有限EPC内存资源来进行更大数据量的训练,可以减小Spark executor JVM堆内存的分配,将临时数据溢写到磁盘来减小内存资源的需求。例如,采用90个Spark executor,每个executor分配5GB JVM堆内存与13GB Occlum user space总内存的配置,即可利用1200GB EPC总内存实现500GB大小数据集的Spark GBDT训练。压缩Spark executor的内存在一方面能够以较少的EPC资源支持大数据规模的训练,然而另一方面,数据溢写带来的大量数据IO也将降低训练性能,用户可根据实际的资源与需求进行适当的配置。BigDL PPML在蚂蚁链摩斯隐私计算平台的应用蚂蚁链摩斯隐私计算平台(大规模隐私计算商用平台)基于可信执行环境(TEE)、多方安全计算等技术,解决企业数据协同计算过程中的数据安全和隐私保护问题,实现数据可用不可见,多方协同释放数据要素价值。目前产品已广泛应用于联合营销、政务数据安全开放、联合风控、多方联合科研等业务场景。至今已服务200+机构,在银行、保险、电信、汽车、零售、互联网等10多个行业落地,是国内最早大规模商用的隐私计算产品。摩斯团队长期以来一直与 Occlum 开发者和BigDL PPML团队深度合作,协力打造完善Spark in SGX 能力,目前此能力已经被集成到摩斯隐私计算平台的TEE 引擎模式中。摩斯基于 BigDL PPML的Spark in SGX能力,实现了分布式机器学习全流程(数据预处理、特征工程、GBDT训练预测、LR 训练预测、评估等组件)和数据分析 (SQL),在可支持数据规模、多机分布式扩展能力和计算性能方面均较之前单机版本有大幅度的提升。目前摩斯隐私计算平台TEE 引擎仍然在持续优化中,基于BigDL PPML的强大开发效率,未来会提供更多组件功能和特性,并即将在蚂蚁集团内部和外部的多个场景中落地。
在传统的SGX SDK/LibOS运行过程中频繁的Enclave切换会带来额外的系统性能开销。这些Enclave切换简单来说就是做OCALL/ECALL,包括线程调度, IO操作等。这都需要通过OCALL切换到非可信区,完成操作后再返回到Enclave中。为了尽量减少可信区与非可信之间的切换,Occlum创新性的把协程技术和Linux IO-URing的特性带入了TEE LibOS里。●轻量级的协程及Rust的异步运行时Occlum 基于轻量级的协程和Rust异步运行时技术,在Enclave里实现了如下图所示的线程调度机制。在LibOS内部实现线程的创建和调度,性能将会有长足的提高。对于机器学习和分布式编排等大型应用,运行时需要创建极多的线程(>1000),传统的SGX线程(实质上是Host OS线程),既耗费海量内存,线程性能也不够好。在Occlum上,以上问题可以被创造性的轻量级的协程机制解决。而且,轻量级协程机制对于应用程序来说完全是无感的,应用仍然可以按照标准的Linux线程模式开发和运行。
BigDL PPML端到端加解密的优化和拓展目前,主流的云存储和分布式存储都已经支持了端到端的存储加密。简单来说,数据会被客户端加密后,上传到存储服务器;存储服务器只存储加密数据,即使服务器被攻破,攻击者也无法解密数据。实际应用中,一般需要引入密钥管理服务(KMS)。密钥管理服务的引入,可以使得整个加密和解密过程变得更加的无感。以HDFS和阿里云OSS为例,当客户端发现读取到的文件是一个加密文件时,客户端会向密钥管理服务请求密钥;密钥管理服务确认客户端身份和权限后,会提供解密密钥,客户端就可以通过密钥解开数据。整个加解密过程对上层数据应用,如数据分析和机器学习,没有影响。但是,这种架构也有一些不足:(1) 强制绑定文件系统和密钥管理服务;(2) 无法支持普通的存储。如果用户希望在现有的存储和密钥管理服务上构建上述流程,需要大量的开发工作。为了解决上述问题,BigDL PPML设计了一套可以自由拼接和拓展的端到端加密方案。通过抽象密钥管理API和对Spark Context的加解密订制,用户只需要把SparkContext换成PPMLContext,就可以实现对任意密钥管理服务器和存储的支持。其基本流程如图所示:1.应用通过PPMLContext读取加密文件2.PPMLContext自动从指定的密钥管理服务获取解密密钥3.应用解密数据并进行计算4.应用将计算结果加密后,写入到存储系统整个流程对数据应用无修改,用户只需要对接具体的密钥管理服务,即可实现完整的端到端加解密。目前,该原型已经在BigDL PPML中上线,并且完全开源。