MesaTEE开源:隐私保护的高性能通用安全计算终成现实

Wesley13
• 阅读 573

MesaTEE开源:隐私保护的高性能通用安全计算终成现实  MesaTEE开源:隐私保护的高性能通用安全计算终成现实

在Rust SGX SDK、MesaLock Linux、MesaLink、MesaPy等子项目相继开源后,多方瞩目的下一代安全计算平台MesaTEE开源在https://github.com/mesalock-linux/mesatee,开源许可为Apache 2.0。

MesaTEE是全球首个通用安全计算平台(Universal Secure Computing,简称USC)。它为对安全和隐私有强诉求的场景提供了下一代通用安全计算能力,使得敏感数据即便在企业外环境和离岸场景下也能安全受控的流通和处理,而不会被泄漏或者滥用。这在全球关注隐私的今天格外重要,使得很多大数据业务成为可能。同时,由于USC/MesaTEE天生的弱中心架构,也使得它和区块链形成完美的互补,填补了区块链急缺的高性能隐私数据处理能力。

MesaTEE综合采用三项核心安全技术,包括百度安全实验室提出的混合内存安全技术(Hybrid Memory Safety与Non-bypassable Security Paradigm),机密计算技术(Confidential Computing,如Intel SGX),以及可信计算技术(如TPM),构建了完整的FaaS通用计算框架,提供了严密而实用的隐私和安全保障能力。与传统基于密码学的多方安全计算或全同态加密技术相比,USC/MesaTEE性能一般会快百倍以上,而且编程模式与传统编程一致,适合普通程序员快速上手进行应用。后继版本也会支持MesaPy(百度安全实验室推出的内存安全的Python)等安全语言,进一步降低开发门槛。

MesaTEE开源:隐私保护的高性能通用安全计算终成现实  背景介绍

大数据分析、机器学习、云/边缘计算和区块链等新兴技术正在以前所未有的速度带动社会的发展,但同时也带来了各种新的隐私和安全问题:在公有云和区块链上,医疗健康和财务记录等敏感数据可能会被不可信的程序分析处理,造成隐私泄露;在机构内数据交换时,不同类别机密信息可能跨越合规许可边界,落入恶意使用者之手;离岸数据供应链中各种隐私失控事件也层出不穷,给各家企业造成了经济、法律和名誉的冲击。

除了数据隐私,机器学习模型本身的保护也亟待解决——模型一旦泄露,攻击者可以盗用知识产权,或利用模型的弱点轻松发起白盒攻击。想象一下如果我们的自动驾驶模型或者智能安防模型的弱点被攻击者掌握,后果让人不寒而栗。

面对所有这些风险情景,我们迫切需要一种可信赖且安全的机制,保障商业过程中的数据安全可控,使我们能够在不完全可信的环境中依然能确保隐私数据和计算模型不被泄漏或滥用,同时最大程度的提供功能、性能、兼容性和灵活性的支持。MesaTEE正是基于这些出发点进行的设计与开发,通过提供完整的“通用安全计算”软件栈(Universal Secure Computing, USC),帮助大数据和AI产业提供下一代数据隐私和安全解决方案。

MesaTEE开源:隐私保护的高性能通用安全计算终成现实

如图所示,MesaTEE通过提供可信且安全的隔离执行计算环境,重新定义了未来的大数据商业模式。即使客户端和服务/平台提供商不完全相互信任,也可以有效地保护数据或模型的机密性和完整性。同时,MesaTEE大大简化了可信计算基础(TCB)、信任边界、和信任模型复杂度,让整个软件栈的审计和验证变得实际可操作。

MesaTEE开源:隐私保护的高性能通用安全计算终成现实  技术优势

内存安全

“MesaTEE”源自“Memory Safe TEE”。虽然各类硬件TEE(例如Intel SGX)已经提供了强大的可信安全计算基础,他们并不保证里面运行软件的内存安全性。诸如use after free、double free、buffer overflow等内存安全问题为攻击者提供了侵入TEE的可乘之机。传统的形式化验证方案极为耗费时间和人力,例如最经典的seL4验证,至少需要消耗8人年——而且任何改动都要再花同样量级的开销来重新验证。这对需要不停往前迭代、增删功能的实际软件栈而言是很难接受的。

因此,通过Rust这样的内存安全编程语言重构系统成为了更为实际的选择。这种编译时即保证内存安全的方案省去了运行时检查内存安全问题的烦恼,增量迭代时也能延续内存安全特性,省却了昂贵的形式化证明。同时,由于绝大多数检查发生在编译时,运行时极为高效,并不会牺牲性能(Rust性能和C/C++基本无异)。

不过,完全将所有组件用Rust重写也不是简单的任务。很多时候Rust开发的内存安全的组件需要和C/C++等非内存安全组件并存。因此MesaTEE努力遵循以下混合内存安全三原则:

  1. 隔离并模块化由非内存安全代码编写的组件,并最小化其代码量。

  2. 由非内存安全代码编写的组件不应减弱安全模块的安全性,尤其是公共 API 和公共数据结构。

  3. 由非内存安全代码编写的组件需清晰可辨识并且易于更新。

易审计的不可绕过检查

(Non-bypassable Security)

内存安全一旦有所保障,程序的控制流和数据流便有了完整性保障基础。在此基础上,MesaTEE采用了“不可绕过范式”(Non-bypassable Security Paradigm),约束所有控制流和数据流必须经过关键检查点,显著减轻了审计和访问控制的难度,极大缩小了攻击面,归约了访问控制策略的部署,也让以此为基础的安全形式化验证变得实际可行。

加密隔离和远程验证

传统云计算和区块链无法保证数据和代码的完整性和保密性,这也成为了不少用户应用采纳这些方案的阻碍。MesaTEE很好地解决了这一难题。通过利用包括Intel SGX在内的TEE,安全地将云用户的数据和代码执行隔离、加密起来,即使云计算环境里的操作系统、虚拟机管理器(VMM/hypervisor)、或相邻的其他虚拟机被攻破或作恶,这些数据代码的完整性和保密性都能得到保障。用户也可以通过远程地验证执行环境,确保远程执行的代码是否符合预期。值得注意的是,MesaTEE将远程验证直接融入在了端到端加密通信里,在建立加密数据传输通道的同时,确保传输目的地即是期望的环境。结合前述内存安全和不可绕过检查,MesaTEE从外至内、由硬到软,将攻击者突防的可能性缩小到极限,而且保证了数据一旦离手,无论传输、远程计算、远程存储,一直得到可验证的隔离与加密保护。

灵活可配置的安全等级

MesaTEE兼容包括TPM、Intel SGX/MKTME、AMD SEV/SME、ARM TrustZone、乃至Risc-V Keystone、FPGA等广泛的TEE平台。这一方面提供了广谱的运行环境支持,也能为不同安全等级需求的场景提供不同宽松度的硬件依赖要求。特别地,MesaTEE划分了五个档次的安全支持等级:

MesaTEE开源:隐私保护的高性能通用安全计算终成现实

Level 1:没有信任和安全保护的传统模式。

Level 2:完全基于软件(SoftTrust)建立信任,通过环境因子采集度量、白盒加密隐藏密钥、反调试、混淆等方案提供软件级的强对抗能力。通过MesaLock Linux(用Rust/Go等内存安全语言重构用户空间、缩小内核攻击面的Linux发行版)和不可绕过的强访问控制(Non-bypassable Gateway,缩写NBGW)相结合,可以进一步增强安全性。

Level 3:增加安全可信的启动链验证(例如基于TPM、TrustZone的安全启动)。用户同样可以增加MesaLock Linux和NBGW来增强动态安全性。对于多租户场景,可以在轻量级安全hypervisor(例如Kata Containers)的帮助下提供更进一步的隔离。

Level 4:进一步通过物理内存自动加密(Intel MKTME或AMD SEV),抵御冷启动攻击(cold boot attack)和大多数基于软件的攻击。

Level 5:利用多重远程验证(Remote Attestation)及Secure Enclave技术(如Intel SGX)提供极强的隔离和加密。MesaTEE通过嵌套TPM和MesaLock Linux,以确保外部操作系统也是可靠和安全的,抵御针对Enclave技术的侧信道攻击(side channel attack)。

功能丰富、性能优异

MesaTEE在提供极致安全的同时并未舍弃功能和性能。MesaTEE为各类TEE平台提供了统一的“函数即服务”(Function as a Service,缩写FaaS)抽象API,开发者可以轻松地开发可迁移的TEE程序;在此基础上,MesaTEE还封装了一层WebAssembly/Python抽象层,让开发门槛和成本进一步降低,提升了开发灵活度。不仅如此,MesaTEE还预置了大部分常见计算模型,对于加解密、证书管理、隐私保护的集合操作、线性回归、GBDT、深度学习等等众多大数据分析和机器学习场景,直接调用MesaTEE已经提供好的接口即可胜任。

而MesaTEE的性能表现也非常出色,举例如下(以下性能数据采集自Intel NUC8I7HVK Mini PC,测试均发生在MesaTEE最高安全级Intel SGX模式下,数据和计算始终隔离且加密):

  • TCP之上的额外turn-around开销缩小到了极致,仅为3ms。这里面已经包含了加密通道的秘钥协商、数据加解密、远程验证、负载均衡分配等操作。

  • 每秒可以执行1万次RSA签名,或者500万次AES加解密。相比之下,某传统HSM只能达到每秒1200次RSA签名,或者2000次AES加解密。

  • 在10万条数据上测试GBDT预测,MesaTEE SGX可比单线程XGBoost快4倍。

  • 运行ResNet 50神经网络模型与没有MesaTEE SGX保护下相比,仅增加了20%的时间开销。

MesaTEE开源:隐私保护的高性能通用安全计算终成现实  场景案例

区块链和云服务

MesaTEE开源:隐私保护的高性能通用安全计算终成现实

除了单独提供安全计算服务,MesaTEE也非常适合在区块链和云计算的场景下提供通用安全计算应用。如图所示,在MesaTEE保护下,我们可以跨越不同的网络环境构建区块链,从而安全地利用各种计算资源。无论数据/代码何时流入,无论何时处理数据/代码,无论底层平台如何,数据/代码所有者始终可以确保机密性和完整性保护。如此一来,数据隐私和完整性等区块链和云计算用户的痛点都得到了妥善解决。

安全多方计算

MesaTEE开源:隐私保护的高性能通用安全计算终成现实

在跨部门或跨公司数据协作场景,相互间的隐私需求是协作的首要条件,安全多方计算(SMC)因而变得越来越重要。传统的基于密码学的SMC有诸多局限性,而使用MesaTEE完成的安全多方计算则提供了最佳解决方案:

  1. 基于密码学的SMC场景一旦开始运行,计算成员和算法已经确定,很难动态变化和修改,缺少灵活性;MesaTEE直接在保护环境中对明文进行可信和安全的计算,因此不会施加这种限制。

  2. 基于密码学的SMC场景需要每个参与方两两互信并进行数据交互,导致很大的延迟和吞吐开销;MesaTEE用可信节点替代多方互信,计算参与者只需与中央可信节点交换数据即可,极大消除了不必要的通信,大大提高效率和性能。

    MesaTEE开源:隐私保护的高性能通用安全计算终成现实

MesaTEE在多方计算时到底有多高效呢?上图以隐私保护的集合求交(private set intersection,缩写PSI)为例,横轴是求交集合的大小,纵轴是求交所需时间。一些前沿的密码学方案很快就发生了超时,即便不超时的方案性能也只有MesaTEE的一半甚至三分之一。事实上,参与者越多,要分析的数据集越大,与传统方法相比,MesaTEE会显示出更大的优势,可以解决密码学SMC无法完成的复杂计算场景问题。

安全Key Vault和HSM

MesaTEE原生提供了高安全等级的秘钥保护和加解密操作,可以提供类比传统Key Vault和HSM的功能,安全地存储和控制对密钥/证书的访问。前面提到MesaTEE即便在SGX里也可以做到每秒1万次RSA签名,或者500万次AES加解密,远胜一些传统HSM(每秒1200次RSA签名,或者2000次AES加解密)。

安全的AI计算

MesaTEE开源:隐私保护的高性能通用安全计算终成现实  MesaTEE已经在所有安全级别(包括Level 5的Intel SGX)中支持了GBDT,线性回归以及神经网络。特别地,主流的AI框架(例如Tensorflow,Caffe等)生成的CNN / RNN模型都可以方便地转换并加载到MesaTEE里,以保护模型和数据不受恶意攻击的影响,并且可以同时支持模型推理和训练。

性能对于AI应用程序至关重要,因此MesaTEE还进行了大量优化以提高AI模型的执行效率。上图显示了在MesaTEE最高安全等级(Intel SGX)中运行ResNet 50与在正常情况下运行相比的时间消耗——仅增加了20%的开销。通过这一点有限的额外开销,没有任何其他安全解决方案可以提供与MesaTEE同等级的机密性和完整性保障。

MesaTEE开源:隐私保护的高性能通用安全计算终成现实  强大的开放生态

百度首席安全科学家韦韬博士在和Intel副总裁Lorie Wigle在2018年联手公布MesaTEE时提到:“Intel SGX是自通用计算机出现以来系统安全领域最重要的硬件技术架构变革之一,通过极大的缩短信任链使得网络空间的信任依赖变得安全可靠;而百度安全首创的Hybrid Memory Safety技术则是第一次在软件架构上保障了实用系统的内存安全。MesaTEE SGX是两者的结合,将大大延展互联网业务的信任边界,是云隐私计算、隐私机器学习、下一代区块链等多种新型互联网业务的基石,对于AI时代的云服务有着战略性意义。”

MesaTEE旨在通过开源开放推动通用安全计算生态发展,为大数据和AI带来的技术生产力革命提供信任保障的基础支持,充分解决跨部门/公司之间的数据交换或多方计算,让金融、账号、医疗等敏感业务享受到隐私保护的区块链/云服务,为无人驾驶等与生命财产息息相关的业务保驾护航。MesaTEE目前已经和主流云计算/区块链/芯片厂商以及高校/研究机构深入合作,综合推进硬件TEE、软件内存安全、和应用丰富强大的计算服务,打造国际安全且灵活通用的安全计算服务框架。MesaTEE的开源将极大的加速下一代大数据商业应用的发展,对于推动AI业务在各行各业中落地也有着重要意义。

更多内容请移步:

*点击“阅读原文”进入MesaTEE主页

MesaTEE开源:隐私保护的高性能通用安全计算终成现实

本文分享自微信公众号 - 百度安全实验室(BaiduX_lab)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
Easter79 Easter79
2年前
swap空间的增减方法
(1)增大swap空间去激活swap交换区:swapoff v /dev/vg00/lvswap扩展交换lv:lvextend L 10G /dev/vg00/lvswap重新生成swap交换区:mkswap /dev/vg00/lvswap激活新生成的交换区:swapon v /dev/vg00/lvswap
Jacquelyn38 Jacquelyn38
2年前
2020年前端实用代码段,为你的工作保驾护航
有空的时候,自己总结了几个代码段,在开发中也经常使用,谢谢。1、使用解构获取json数据let jsonData  id: 1,status: "OK",data: 'a', 'b';let  id, status, data: number   jsonData;console.log(id, status, number )
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Wesley13 Wesley13
2年前
Java获得今日零时零分零秒的时间(Date型)
publicDatezeroTime()throwsParseException{    DatetimenewDate();    SimpleDateFormatsimpnewSimpleDateFormat("yyyyMMdd00:00:00");    SimpleDateFormatsimp2newS
Stella981 Stella981
2年前
KVM调整cpu和内存
一.修改kvm虚拟机的配置1、virsheditcentos7找到“memory”和“vcpu”标签,将<namecentos7</name<uuid2220a6d1a36a4fbb8523e078b3dfe795</uuid
Wesley13 Wesley13
2年前
mysql设置时区
mysql设置时区mysql\_query("SETtime\_zone'8:00'")ordie('时区设置失败,请联系管理员!');中国在东8区所以加8方法二:selectcount(user\_id)asdevice,CONVERT\_TZ(FROM\_UNIXTIME(reg\_time),'08:00','0
Wesley13 Wesley13
2年前
00:Java简单了解
浅谈Java之概述Java是SUN(StanfordUniversityNetwork),斯坦福大学网络公司)1995年推出的一门高级编程语言。Java是一种面向Internet的编程语言。随着Java技术在web方面的不断成熟,已经成为Web应用程序的首选开发语言。Java是简单易学,完全面向对象,安全可靠,与平台无关的编程语言。
Stella981 Stella981
2年前
Django中Admin中的一些参数配置
设置在列表中显示的字段,id为django模型默认的主键list_display('id','name','sex','profession','email','qq','phone','status','create_time')设置在列表可编辑字段list_editable
Wesley13 Wesley13
2年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
Python进阶者 Python进阶者
3个月前
Excel中这日期老是出来00:00:00,怎么用Pandas把这个去除
大家好,我是皮皮。一、前言前几天在Python白银交流群【上海新年人】问了一个Pandas数据筛选的问题。问题如下:这日期老是出来00:00:00,怎么把这个去除。二、实现过程后来【论草莓如何成为冻干莓】给了一个思路和代码如下:pd.toexcel之前把这