SGX软件栈(一)——硬件、驱动、可信运行时、不可信运行时、应用程序、Enclave程序
SGX软件栈如图所示。下面将先对硬件、驱动、Platform Software提供的不可信运行时、SDK提供的可信运行时、开发者的应用程序、开发者的Enclave程序这六个模块进行介绍,之后将对硬件指令、驱动接口、API接口、桥函数这四个接口进行介绍。
硬件
最下层是SGX硬件,主要指支持SGX特性的CPU(需要Intel 6代CPU及以上),此外还包括PRM、EPCM、PMH等(具体见上文“SGX硬件原理”章节)。CPU向上提供硬件指令ENCLS(内核权限级Enclave硬件指令)及ENCLU(用户权限级Enclave硬件指令),其中内核权限指令提供对Enclave的生命周期管理等功能,用户权限指令提供环境切换等功能。
驱动
驱动处于内核权限,向上会接收不可信运行时要求调用ENCLS的命令,然后向下调用ENCLS硬件指令,并将结果反馈给不可信运行时。因此驱动一种功能是不可信运行时想要调用ENLCS指令的代理(主要是Enclave生命周期管理以及EP的部分管理),并完成与该指令相关工作,其中一个非常重要的工作就是sgx_encl结构体的管理(其中包括保管每个Enclave所被分配到的EP集合)。另一方面,由于SGX不信任驱动,要求驱动通过调用内核权限指令完成如TLB刷新、EP页交换等安全性和高效性的保障,只有如此,程序才能继续正常运行。
不可信运行
不可信运行时处于用户态权限。一方面,不可信运行时向下调用驱动接口来管理Enclave生命周期,向上将该功能以API形式提供给开发者。另一方面,还能调用用于进入Enclave的用户态权限硬件指令,提供不可信环境下SGX设备能力查询、不可信密钥交换API等功能(见下文“SGX API”章节)。
可信运行时
可信运行时同样处于用户态权限。可信运行时向下能够调用用户态权限硬件指令用于离开可信世界、创建加密报告等。可信运行时向上能够给开发者提供Enclave开发的API。由于安全原因以及环境隔离,Enclave代码不能调用外部任何库,只能静态链接安全库,同时SGX设计者希望能够让Enclave代码开发能够满足常规的开发需求,提供良好的开发环境,因此可信运行时包含了很多经过安全审计的标准库和开发库,比如C\C++标准库、加密库等(具体见下文“SGX API”章节)。
应用程序
应用程序处于用户态权限,并属于不可信世界,能够利用不可信运行时API完成Enclave生命周期管理,还能调用普通世界的任意库函数,也就是说应用程序开发与传统的程序开发没有区别。
Enclave程序
需要执行的敏感程序,利用可信运行时提供的API来完成开发,同时由于EPC大小有限,开发者应该保证Enclave程序规模不能太大。
本文地址:https://blog.csdn.net/clh14281055/article/details/107631241
上一篇: 使用开源PGP技术实现Solaris 10下的加密解密(图)
下一篇: 动态加解密技术详解(图)