Rust 大展拳脚的新兴领域:机密计算

简介: 随着云原生浪潮逐渐进入下半场,企业和用户对数据的安全性有了更高的要求,“可信原生”与“机密计算”等数据安全新概念被业界提出,并吸引了大批软硬件巨头入场布局, 也让 Rust 这门注重内存安全的高性能编程语言迎来了绝佳的发展机遇。
来源:金融级分布式架构公众号
云原生时代,Go 语言凭借其原生支持高并发等特性,一跃成为云原生基层设施建设首选语言,荣登各大编程语言排行榜前列,成为用户增长最快的新兴编程语言之一。 而相比之下,同样以取代 C/C++为目的被创造出来的另一门新语言 Rust 在很长一段时间里则不温不火,陷入“叫好不叫座”的尴尬境地。

幸运的是,随着云原生浪潮逐渐进入下半场,企业和用户对数据的安全性有了更高的要求,“可信原生”与“机密计算”等数据安全新概念被业界提出,并吸引了大批软硬件巨头入场布局, 也让 Rust 这门注重内存安全的高性能编程语言迎来了绝佳的发展机遇。

深耕金融、支付相关技术领域的蚂蚁集团是国内外机密计算技术领域的先行者,其开源的 SOFAEnclave 机密计算解决方案被包括微软在内的多家科技巨头采用,团队输出的相关技术论文也多次在国际顶会发表,受到工业界和学术界的广泛认可。为深入了解这一前沿技术领域,我们邀请到了蚂蚁集团机密计算总监闫守孟,为我们揭开机密计算的神秘面纱。

什么是机密计算?

随着云计算的快速发展,越来越多的关键性服务和高价值数据被迁移到了云端。云安全也因此成为学术界和工业界关注的一个焦点。

机密计算填补了当前云安全的一项空白——使用中数据(Data-in-use)的加密。过去通行的做法是对数据在存储中(比如硬盘)和传输中(比如网络)加密,而在使用中(比如内存)解密,以便处理。而机密计算可以保护使用中数据的机密性和完整性。

也就是说,通过机密计算技术,一些对数据安全性要求极高的传统企业如金融、银行、政企等客户,也可以放心地使用公有云服务。

目前,多家云计算巨头都在不约而同地推广这项技术:微软已于 2017 年 7 月宣布开始接受 Azure 机密计算的早期试用申请;IBM 于 2017 年 12 月宣布 IBM 云数据保护(Cloud Data Guard)的预览版;谷歌也于 2018 年 5 月开源了名为 Asylo 的机密计算框架。

2019 年 8 月,Linux 基金会宣布联合多家科技巨头组建“机密计算联盟(Confidential Computing Consortium,简称 CCC)”,创始成员包括阿里巴巴、Arm、百度、谷歌、IBM、英特尔、微软、红帽、瑞士通以及腾讯。让机密计算技术进入了更多开发者的视野。

那么,机密计算究竟是如何实现的呢?

实际上,上述所有云计算巨头在实现机密计算时都离不开一种称为“可信执行环境(TEE)”的技术。

顾名思义,TEE 提供一种与不可信环境隔离的安全计算环境,正是这种隔离和可信验证机制使得机密计算成为可能。

TEE 一般是直接基于硬件实现的,比如 Intel SGX,Intel TDX,AMD SEV,ARM TrustZone,以及 RISC-V Keystone 等;基于虚拟化技术也可以构造 TEE,比如微软的 VSM,Intel 的 Trusty for iKGT & ACRN。

其中,Intel 软件防护拓展(Software Guard Extensions,简称 SGX)是目前商用 CPU 中最为先进的 TEE 实现,它提供了一套新的指令集使得用户可以定义称为 Enclave 的安全内存区域。CPU 保证 Enclave 与外界强隔离,并提供内存加密和远程证明机制,从而保护 Enclave 代码和数据的机密性、完整性和可验证性。不同于之前的 TEE 实现,比如 ARM TrustZone,SGX 每个 APP 都可以有自己独立的 TEE,甚至可以创建多个 TEE,而 TrustZone 是整个系统有一个 TEE;这里也省去了向设备厂商申请将 TA(可信应用)装入 TEE 的过程。由于 SGX 的先进性,目前云端机密计算领域甚至已公认用 Enclave 这个词来指代 TEE。

通过机密计算技术,能够解决那些业务数据敏感的用户对云原生平台不信任的问题,也由此引出了“可信原生”的概念,即让云原生基础设施在用户一侧更加可信。

机密计算应用开发难点

显然,这一技术的成熟意味着包括金融、政企等业务数据敏感的用户上云成为可能,市场前景广阔。虽然这些听起来很美,但机密计算在实际应用中仍面临很多的挑战。

  • 首先,Enclave 是一个受限的环境,从编程接口到编程模型都跟开发者熟悉的 Linux 环境有很大不同。
  • 其次,开发者要花力气学习市面上的多种不同 Enclave 硬件架构。
  • 再有,目前主流的集群调度系统(如 K8s)还不支持 Enclave,限制了 Enclave 的大规模使用。

以基于 Intel SGX CPU 开发机密计算应用程序为例。

image.png

SGX 应用是一种基于划分的模型:在用户态的(不可信)应用程序(上图红色部分)可以嵌入 SGX TEE 保护的区域(上图绿色部分),被称为 Enclave。支持 SGX 的 Intel CPU 保证 Enclave 中的受保护内容是在内存中加密的,并且与外界强隔离。外界的代码如果想进入 Enclave 中执行其中的可信代码必须通过指定的入口点,后者可以实施访问控制和安全检查以保证 Enclave 无法被外界滥用。

由于 SGX 应用程序是基于这种划分的架构,应用开发者通常需要使用某种 SGX SDK,比如 Intel SGX SDK、Open Enclave SDK、Google Asylo 或 Apache Rust SGX SDK等。但无论使用上述哪种 SDK,开发者会遭遇下面的开发困境:

  • 必须将目标应用做二分:开发者需要决定哪些组件应该置于 Enclave 内部,哪些置于 Enclave 外部,以及双方如何通信。对于复杂的应用,确定高效、合理且安全的划分方案本身就是一件颇具挑战的工作,更不要说实施划分所需的工程量。
  • 被限定在某个编程语言:无论使用上述哪种 SDK 开发,一个开发者都将被限定在该 SDK 所支持的语言,这通常意味着 C/C++(当使用 Intel SGX SDK、Open Enclave SDK 或 Google Asylo 时),而无法使用 Java、Python、Go 等更加友好的编程语言。
  • 只能获得很有限的功能:出于硬件限制和安全考虑,Enclave 中是无法直接访问 Enclave 外的(不可信)OS 的。由于 Enclave 中缺乏 OS 的支持,各种 SDK 只能提供普通不可信环境下的一个很小的功能子集,这使得很多现有的软件库或工具都无法在 Enclave 中运行。

上述困境使得为 SGX 开发应用成为一件十分痛苦的事,制约了 SGX 和机密计算的普及度和接受度。

蚂蚁机密计算软件栈 SOFAEnclave

为了解决这些挑战,蚂蚁开发了 SOFAEnclave 机密计算软件栈,分为如图所示的三个部分:

image.png

Occlum LibOS

Occulum 是蚂蚁开源的 TEE 操作系统,也是 CCC 机密计算联盟中第一个由中国公司发起的开源项目。

Occlum 提供 POSIX 编程接口,支持多种主流语言(C/C++, Java, Python, Go, Rust 等),支持多种安全文件系统。可以说,Occlum 提供了一个兼容 Linux 的 Enclave 运行环境,使得机密计算可以轻松支持已有的应用,也使得机密应用开发者复用原有开发技能。Occlum 不但在工业界场景中得到了广泛的应用,而且也在系统顶会 ASPLOS 2020 发表了学术论文,代表了机密计算业界的领先水平。

从架构上来看,Occlum 不但提供基本的类似 Linux 的操作系统能力,而且提供一个类似 Docker 的用户使用接口,比如这里的 Occlum build 和 Occlum run 等都跟 Docker 的命令类似。

image.png

社区方面,Occlum 是阿里巴巴 Inclavare Containers 的缺省运行时,也在与 Hyperledger Avalon 等其他社区项目合作。同时,Occlum 已经捐赠给机密计算联盟 CCC,目前是唯一一个来自中国的开源项目。另外,值得一提的是,微软 Azure Cloud 在去年 9 月的 Microsoft Ignite 大会上介绍机密计算技术的新进展时,还公开推荐在 Azure 上基于 Occlum 开发机密计算应用。

Occlum开源地址:https://github.com/occlum/occlum

HyperEnclave

前面提到,市场上目前有多种 Enclave 硬件平台。这些 Enclave 各有特点,但也给开发者带来了较大的学习负担。作为这些硬件的用户,蚂蚁技术团队其实希望有一个统一的 Enclave 抽象,另外,他们也希望能对 Enclave 的启动和证明有更灵活的控制。

针对上述问题,蚂蚁机密计算团队提出了机密计算硬件虚拟化技术 HyperEnclave。这是一个统一的 Enclave 平台。作为抽象层,它既能映射到现有的各种 Enclave 硬件实现,也能使用未来的硬件能力,比如 Intel MKTME/TDX。“它甚至可以支持没有 Enclave 扩展的机器,在这种机器上我们基于虚拟化技术实现了隔离机制 —— 我们开发了一个 Type 1.5 的 hypervisor 用来创建和管理基于虚拟化的 Enclave。在可信方面,我们基于可信计算技术(如 TPM 等)实现了由用户灵活掌控的信任机制。”

基于 HyperEnclave,加上 AMD SEV 或者 Intel MKTME 等内存加密硬件能力,HyperEnclave 也可以防护物理攻击。有趣的是,HyperEnclave 支持现有的 Enclave SDK。这意味着用户已有的只能跑在 x86 平台的 Encalve 应用,现在可以运行在 HyperEnclave 支持的任何硬件平台上(包括国产 CPU),极大的缓解了用户 Enclave 代码跨平台移植的困扰,同时使得用户对信任链有更灵活的控制。

我们详细看一下这个系统的生命周期各阶段。首先 Linux 系统像往常一样启动。接着,我们的 hypervisor 模块开始加载。Hypervisor 加载完毕之后,会把原来的 Linux host 降级为一个不被信任的 guest。

这个 Hypevisor 支持创建 Enclave 虚拟机。Enclave 虚拟机支持传统机密计算 SDK 提供的二分式编程模型。Enclave 虚拟机也支持利用 Occlum 将整个应用运行在 Enclave 里面。

image.png

总结一下这个虚拟化技术的特点:

第一,安全第一的设计原则。TCB 是一个非常小的、可形式化验证的、用内存安全语言 RUST 开发的 hypervisor。

第二,支持基于 TPM/TXT 的 Enclave 可信启动和远程证明。

第三,兼容 Linux 已有生态。前面提到这是一个 Type 1.5 Hypervisor,顾名思义这是一个兼具Type 1 & Type 2 特点的 Hypervisor,更明确地说就是,它 boot like type 2, 但 run like type 1。这样一来我们可以很好地适应目前主流的 Linux 部署方式。另外,这个 Hypervisor 也可以跟 demoted Linux 里面的 KVM 很好地配合。

第四,我们可以比较容易地引入硬件提供的内存加密能力,比如 Intel MKTME/TDX 或者 AMD SEV。

KubeTEE

前面提到的 Occlum 和 HyperEnclave 都还是针对单个计算节点的技术。但是目前的互联网应用都是基于大规模集群的,尤其是基于 Kubernetes 的。Kubernetes 提供了很多基础的集群管理、调度、和监控能力,但这些能力并不能很好适用到机密计算场景。首先我们需要让Kubernetes 能够认识 Enclave 硬件,将 enclave 暴露给容器,监控 Enclave 资源,并处理Enclave 特有的事务比如远程证明等等。

闫守孟团队研发的 KubeTEE 就是 Kubernetes 和 Enclave 也就是 TEE 的有机结合。基于KubeTEE,用户可以使用 kubernetes 的工作流程来轻松管理机密计算集群,部署 Enclave 服务,使用 Enclave 中间件等等。

image.png

KubeTEE 也包含一个叫做 AECS 的组件,基于机密计算的远程证明机制,简化集群内 Enclave 的密钥分发和部署过程。

通过以上三个组件,蚂蚁开源的 SOFAEnclaves 技术栈解决了机密计算目前实际应用中的三大难题。相关技术和理念在工业界和学术界都获得了广泛认可,处于世界领先水平。

Rust 闪耀机密计算

我们注意到,在蚂蚁开源的 SOFAEnclaves 软件栈中,Rust 语言扮演了十分重要的角色。其中 Occlum 和 HypeEnclave 两大组件都主要由 Rust 语言开发完成。

闫守孟告诉我们,作为一门兼顾安全性与高性能的新兴编程语言,Rust 语言在蚂蚁集团内部已经被广泛运用,尤其是他所在的机密计算领域,Rust 语言成为了项目开发的主力语言。

“我们的东西基本上都是用 Rust 写的。一方面是 Rust 语言生态已经足够成熟,其内存安全等特性是我们非常看重的。此外,Rust 的开发效率也非常高,大大提升了我们团队的生产力。”

据悉,在蚂蚁机密计算技术团队中,有一位资深的 Rust 布道师 —— Occlum 的核心开发者田洪亮。关于 Rust 语言在蚂蚁内部的推广,这里面还有一个小故事。

当时,在蚂蚁内部,Java 技术栈是主流,而田洪亮则是 Rust 语言的忠实拥趸,虽然公司允许他用 Rust 开展工作,但知音难觅的他有点小郁闷。不过很快,田洪亮参加了支付宝内部的一个编程比赛,100 名参赛同事里面只有他一个人用 Rust,其他人要么用 Java 要么用 Python,从性能上来说,要比 Rust 慢很多。这一下田洪亮相当于开挂,在这场比赛中“大杀特杀”。

正是通过这场比赛,Rust 的名声在公司内打响了,有不少同事对 Rust 表示兴趣。于是趁热打铁,田洪亮在公司内分享了关于 Rust 的公开课,还成为阿里云的 Rust 布道师。

在 Gartner 发布的 2020 年云安全技术成熟度曲线报告中,机密计算被列为 33 种重要技术之一,并预测在未来 5 - 10 年内成为最普遍的云原生安全技术。

闫守孟表示,“我们希望 SOFAEnclave 机密计算软件栈能帮助大家降低机密计算的门槛,促进云原生到可信原生的演进。SOFAEnclave 的三个组件中,Occlum、KubeTEE 已经开源,HyperEnclave 也即将开源。希望跟业界加强交流合作!”

受访嘉宾介绍

image.png

闫守孟是蚂蚁集团资深技术专家和负责机密计算方向的研发总监。他目前的研究兴趣是基于可信执行环境 TEE 的机密计算技术。他领导了蚂蚁集团 SOFAEnclave(Occlum、HyperEnclave、KubeTEE 等)机密计算软件栈的研发,发起并主导了国内外多项TEE标准的制定。加入蚂蚁之前,闫守孟在 Intel 中国研究院任高级主任研究员,主要从事安全隔离技术的研究,研究成果融入 Intel 相关软硬件产品。加入 Intel 之前,他在 2005 年从西北工业大学计算机学院获得博士学位。他拥有 20 余项专利,并在 ASPLOS, PLDI, FSE, MM 等顶级会议发表文章。

延伸阅读

image.png

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
2天前
|
Rust 安全 程序员
Rust vs Go:解析两者的独特特性和适用场景
在讨论 Rust 与 Go 两种编程语言哪种更优秀时,我们将探讨它们在性能、简易性、安全性、功能、规模和并发处理等方面的比较。同时,我们看看它们有什么共同点和根本的差异。现在就来看看这个友好而公平的对比。
|
2天前
|
Rust 安全 程序员
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十三)(1)
Rust vs Go:常用语法对比(十三)(1)
63 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(七)(1)
Rust vs Go:常用语法对比(七)(1)
48 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(四)(1)
Rust vs Go:常用语法对比(四)(1)
122 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十三)(2)
Rust vs Go:常用语法对比(十三)(2)
73 1
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十二)(2)
Rust vs Go:常用语法对比(十二)(2)
59 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十二)(1)
Rust vs Go:常用语法对比(十二)(1)
64 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十一)(2)
Rust vs Go:常用语法对比(十一)(2)
55 0
|
8月前
|
Rust Go C++
Rust vs Go:常用语法对比(十一)(1)
Rust vs Go:常用语法对比(十一)(1)
48 0