首页 > 编程知识 正文

occ表示(机密绝密秘密)

时间:2023-05-04 10:43:45 阅读:98478 作者:1444

根据SOFAChannel#18直播分享,本文的主题是:零门槛的机密计算:Occlum LibOS的使用介绍和技术启示。

大家好,我是今天的讲师bzdjd(花名:Cherry),蚂蚁集团高级技术专家,也是Occlum开源负责人。今天,我将与大家分享如何使用oculum轻松开发机密计算应用程序,以及oculum的技术架构和功能。

前言

云计算、大数据和人工智能,我们正处于一个数据爆炸的时代。如何在享受和利用海量数据产生的价值的同时,保证数据的安全和用户的隐私?这是用户、企业和监管部门共同关注的问题。

近年来,机密计算的兴起正是为了解决这个问题。使用可信执行环境(TEE)技术,机密计算始终保持数据加密和强隔离,从而确保用户数据的安全性和隐私性。机密计算可以解决许多应用场景中的“信任”问题,如多个互不信任的组织之间的数据融合和联合分析、区块链智能合约的保密保护、公共云平台抵御外部或内部攻击、高度敏感信息(如密码资料、医疗文件等)的安全保护等。),等等。

但是底层机密计算所依赖的TEE技术——,比如目前最成熟的云TEE技术英特尔SGX——,也带来了额外的功能限制和兼容性问题。这使得机密计算的开发者面临一个巨大的障碍:应用开发困难。

本文首先分析SGX应用开发者目前会遇到的挑战和痛点,然后介绍蚂蚁集团开发的开源TEE OS系统Occlum如何大幅降低SGX应用开发门槛,让大家玩转机密计算。

为什么 SGX 应用开发难?

SGX应用是基于分区的模型:在面向用户(不可信)的应用中(上图红色部分),可以嵌入SGX TEE保护的区域(上图绿色部分),称为Enclave。支持SGX的英特尔中央处理器确保飞地中受保护的内容在内存中加密,并与外部世界高度隔离。外部代码要进入飞地执行可信代码,必须通过指定的入口点,入口点可以实施访问控制和安全检查,确保飞地不被外界滥用。

由于SGX应用程序基于这种划分的架构,应用程序开发人员通常需要使用一些SGX软件开发工具包,如英特尔SGX软件开发工具包、Open Envelope软件开发工具包、谷歌Asylo或Apache Rust SGX软件开发工具包。但是,无论上面使用哪种SDK,开发人员都会遇到以下开发困难:

目标应用程序必须分为两部分:开发人员需要决定哪些组件应该放在Enclave内部,哪些组件应该放在Enclave外部,以及如何相互通信。对于复杂的应用程序,确定高效、合理和安全的分区方案是一项具有挑战性的任务,更不用说实现分区所需的工作量了。局限于某一种编程语言:无论使用哪一种SDK进行开发,一个开发者都会局限于该SDK所支持的语言,通常是指C/C(使用英特尔SGX SDK、Open Enclave SDK或Google Asylo时),但不能使用Java、Python、Go等更友好的编程语言。只能获得非常有限的功能:由于硬件限制和安全考虑,飞地之外的(不可信)操作系统无法在飞地中直接访问。由于Enclave缺乏OS支持,各种SDK在一般不可信环境下只能提供一小部分功能子集,使得很多现有的软件库或工具无法在Enclave中运行。上述困难使得为SGX开发应用成为一项非常痛苦的任务,这限制了SGX和机密计算的普及和接受。

学会 Occlum 的“三板斧”

Occlum是蚂蚁集团的开源TEE OS,可以大大降低SGX应用的开发门槛。有多低?你只需要学习Occlum的三个命令:新建、构建和运行。在这一节中,我们用奥克洛姆在SGX运行一个Hello World程序作为例子。

这里有一个非常简单的。

Hello World 程序。

$ cat hello_world.c #include <stdio.h> int main() { printf("Hello World!n"); return 0; }

首先,我们用 Occlum 提供的 GCC 工具链( occlum-gcc)编译这个程序,并验证它在 Linux 上能正常工作。

$ occlum-gcc hello_world.c -o hello_world $ ./hello_world Hello World!

然后,我们为这个程序创建一个 Occlum 的实例目录(使用 occlum new 命令)。

$ occlum new occlum_hello $ cd occlum_hello

该命令会创建一个名为 occlum_hello 的目录,并在该目录中准备一些必要的文件(如 Occlum.json 配置文件)子目录(如 image/)。

接下来,我们基于刚刚编译好的 hello_world 制作一个 Occlum 的 Enclave 文件和可信镜像(使用 occlum build 命令)。

$ cp ../hello_world image/hsjdmj $ occlum build

最后,我们在 SGX 中运行 hello_world(使用 occlum run 命令)。

$ occlum run /hsjdmj/hello_world Hello World!

更复杂的程序也可以用类似上面的流程通过 Occlum 移植进 SGX 中。用户无需理解 SGX 的二分编程模型,无需或只需少量修改应用代码,还可以自由选择编程语言(比如 Java、Python、Go 等)。使用 Occlum,应用开发者可以将宝贵的精力集中在编写应用上,而非为 SGX 做应用移植。

用起来像 Docker 的 TEE OS

在了解了 Occlum 的基本用法和体验之后,很自然地会好奇 Occlum 的技术原理:Occlum 的用户接口为什么这样设计?而简单接口背后的技术架构又是怎样的?本节就试图回答这些问题。

Occlum 的一个设计理念是 Enclave-as-a-Container。在云原生时代,容器至关重要,容器无处不在。容器最常见的实现方式是基于 Linux 的 cgroup 和 namespace(比如 Docker),但也有基于虚拟化的实现(比如 Kata)。我们观察到,TEE 或者 Enclave 也可以作为一种容器的实现手段。因此,为了传达这种理念,同时给用户提供一种熟悉的体验,我们特意将 Occlum 的用户接口设计成与 Docker 和 OCI 标准接近。除了前面提到的 new、 build和 run 三个命令,Occlum 还提供 start、 exec、 stop、 kill 等命令,其语意与 Docker 同名命令类似。

简单的用户接口隐藏着复杂的实现细节。为了高层次地描述 Occlum 的技术原理,我们分可信的开发环境和不可信的部署环境两个视角来讨论。

在可信的开发环境(上图中的上半部分),用户使用 occlum build 命令打包和制作可信镜像,该可信镜像是利用 Merkel Hash Tree 来保证镜像在上传到不可信的部署环境之后,无法被攻击者篡改。可信镜像的内容是 Occlum 启动时所载入的 rootfs,组织结构与通常的 Unix 操作系统类似,具体内容由用户决定。

在不可信的部署环境(上图中的下半部分),用户使用 occlum run 命令启动一个新的 Occlum Enclave,该 Enclave 中的 Occlum TEE OS 会从可信镜像中载入并执行相应的应用程序。Occlum 向应用程序提供与 Linux 兼容的系统调用,因此应用程序无需修改(或只需少量修改)即可运行在 Enclave 中。应用程序的内存状态由 Enclave 保护,应用程序的文件 I/O 由 Occlum 做自动的加解密,因此可以同时保护应用在内存和外存中数据的机密性和完整性。

更高效、更强大、更安全和更多内容

除了提供类容器的、用户友好的接口以外,Occlum 还有三个主要特色:

高效多进程支持:Occlum 实现了一种轻量级的进程,相比此前最先进的开源 TEE OS(Graphene-SGX),进程启动提速 10-1000 倍,进程间通信的吞吐量提升 3 倍(详见我们的论文,链接见文末);强大文件系统:Occlum 支持多种文件系统,比如保护完整性的文件系统、保护机密性的文件系统、内存文件系统、主机文件系统等等,满足应用的各种文件 I/O 需求;内存安全保障:作为全球首个使用 Rust 语言开发的 TEE OS,Occlum 极大降低了内存安全问题的几率(据统计,Linux 有 50% 的安全漏洞都与内存安全有关),因此更值得信赖;

下面的传送门提供了更多资料:

Occlum 官方网站:https://occlum.ioOcclum 项目地址:https://github.com/occlum/occlumOcclum 学术论文:https://arxiv.org/abs/2001.07450SOFAChannel 直播回顾视频:https://www.bilibili.com/video/BV1S5411a7gr

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。