机密计算的实现--Intel SGX&TDX

各种架构的机密计算

经过多年的发展,针对不同的体系架构出现了多种机密计算技术路线,诸如:Intel SGX、Intel TDX、AMD SEV、ARM Trustzone、RISC-V Keystone等等。部分参数如图一所示:

图一

Intel SGX&TDX

英特尔在数年前就推出了SGX(Intel® Software Guard Extensions,Intel® SGX)技术, 通过构建可信的“飞地(Enclave)”来为云环境应用程序中的敏感数据提供增强的安全防护。

后续又提出了TDX,Intel® Trust Domain Extensions (Intel® TDX),这种基于硬件的可信执行环境 (TEE) 有助于部署信任域 (TD),信任域 (TD) 是硬件隔离的虚拟机 (VM),旨在保护敏感数据和应用程序免受未经授权的访问。

SGX 和TDX 有各自的优势,可以互为补充:SGX 更适用于安全性要求更高、代码更易于改动或从头构建的应用 。TDX 更适用于大型的成熟应用。

SGX提供了应用程序级别的隔离,TDX提供了虚拟机/容器级别的隔离,如图二所示。

图二 intel SGX与TDX的对比

应用程序级别的隔离

应用程序级别的隔离是指应用程序在执行过程中能够独立运行,不受其他应用程序或系统环境的影响。

SGX主要体现在:

1.SGX通过创建一个称为“enclave”的安全区域,使应用程序的某些部分可以在这个隔离的环境中执行。这个enclave是独立的,不受操作系统、虚拟机管理程序或其他应用程序的干扰。

2.应用程序的数据和代码是加密存储的,只有在enclave内部才会被解密使用。

3.SGX确保在enclave中执行的代码没有被修改,并且数据在处理过程中保持完整。

4.只有经过授权的代码才能进入enclave并访问其中的数据。即使是系统管理员或操作系统本身,也不能直接访问enclave内的数据和代码。

一个简化的示例说明SGX如何实现应用程序级别的隔离(问的AI)

#include <sgx_urts.h>
#include <sgx_uae_service.h>
#include <stdio.h>
#include "Enclave_u.h"

sgx_enclave_id_t eid;

// 创建enclave
if (sgx_create_enclave("Enclave.signed.so", SGX_DEBUG_FLAG, NULL, NULL, &eid, NULL) != SGX_SUCCESS) {
    printf("Failed to create enclave.\n");
    return -1;
}

// 调用enclave中的函数
int result;
if (ecall_my_function(eid, &result) != SGX_SUCCESS) {
    printf("Failed to call enclave function.\n");
    sgx_destroy_enclave(eid);
    return -1;
}

printf("Result: %d\n", result);

// 销毁enclave
sgx_destroy_enclave(eid);

ecall_my_function是在enclave中执行的函数,enclave创建后,该函数在一个隔离的环境中运行,不受外部干扰,保证了其执行的安全性。

虚拟机/容器级别的隔离

虚拟机/容器级别的隔离使虚拟机或容器在执行过程中能够独立运行,不受其他虚拟机、容器或系统环境的影响。

TDX(Trust Domain Extensions)提供的虚拟机/容器级别的隔离主要体现在以下几个方面:

1.TDX创建一个称为“信任域”(Trust Domain)的隔离环境,使虚拟机或容器的部分或全部运行在这个隔离环境中,独立于其他虚拟机、容器或宿主操作系统。

2.虚拟机或容器的数据和代码是加密存储的,只有在信任域内部才会被解密使用。

3.TDX确保在信任域中执行的代码没有被修改,并且数据在处理过程中保持完整。

4. 只有经过授权的代码才能进入信任域并访问其中的数据。即使是虚拟机管理程序(hypervisor)或容器编排系统,也不能直接访问信任域内的数据和代码。

一个简化的示例,说明TDX如何实现虚拟机/容器级别的隔离(问的AI)

#include <tdx_sdk.h>
#include <stdio.h>

tdx_domain_id_t domain_id;

// 创建信任域
if (tdx_create_domain(&domain_id) != TDX_SUCCESS) {
    printf("Failed to create trust domain.\n");
    return -1;
}

// 在信任域中运行虚拟机或容器
if (tdx_run_in_domain(domain_id, "vm_or_container_image") != TDX_SUCCESS) {
    printf("Failed to run in trust domain.\n");
    tdx_destroy_domain(domain_id);
    return -1;
}

printf("Virtual Machine/Container is running in isolated environment.\n");

// 销毁信任域
tdx_destroy_domain(domain_id);

tdx_run_in_domain函数在信任域中运行一个虚拟机或容器镜像。信任域创建后,该虚拟机或容器在一个隔离的环境中运行,不受外部干扰。

发展现状

在最新一代的Intel 酷睿系列的处理器已经没有SGX功能了,但是在Intel 至强系列的处理器中二者还是并存的。

SGX发展至今,存在着一部分缺点:SGX不仅加剧了硬件设计的复杂度,也显著提升了软件设计的复杂度。SGX程序员必须手工指定好机密数据,并将相关处理代码显式放入Enclave中,对外暴露为ecall(enclave call)的形式。随着接口数量和参数复杂度的增加,很容易出现机密数据保护的不完备,以及接口被滥用或攻击的问题

参考了这里!icon-default.png?t=N7T8https://zhuanlan.zhihu.com/p/460081164

TDX目前还没有像SGX的大规模使用以及各种问题的出现,还有等待考量。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值