初探SGX技术

在常见的计算机系统中,虽然有很多安保措施可保护应用免受其它应用入侵,保护操作系统免受未授权用户访问,但是几乎没有一种措施可保护应用免受拥有更高权限的处理器的入侵,包括操作系统本身。 获取管理权限的恶意软件可不受限制地访问所有系统资源以及运行在系统上的所有应用,这是十分不安全的!

对这些机密信息提供高级别的保护,同时抵御恶意软件的攻击,英特尔设计了英特尔SGX。

英特尔SGX 是一套 CPU 指令,可支持应用创建安全区: 应用地址空间中受保护的区域,它可确保数据的机密性和完整性。

结构对比图

"sgx结构对比图"

sgx安全措施

1.无论当前的权限是何种级别,CPU 处于何种模式,安全区内存不可从安全区外读写。

2.安全区环境不能通过传统函数调用、转移、注册操作或堆栈操作进入。调用安全区函数的唯一途径是完成可执行多道保护验证程序的新指令。

3.安全区内存采用具有保护功能的行业标准加密算法进行加密。

4.安全区中的隔离数据只能通过共享安全区的代码访问。

sgx安全设计

可信部分:它指的是安全区。 可信代码中的代码是访问应用机密 的代码(一款应用可以拥有一个以上可信部分/安全区)

不可信部分:它包括应用的剩余部分及其所有模块(注意:从安全区的角度来看,操作系统和虚拟机显示器都被看做不可信部分)

sgx应用执行过程:

"sgx应用执行图"

sgx认证机制

本地认证:适用于同一平台上两个安全区进行相互认证时。

远程认证:适用于某一安全区获取远程提供商的信任时

本地认证

当应用拥有一个以上需要相互协作才能完成任务的安全区时,或者两款应用必须在安全区之间进行数据通信时,本地认证非常有用。 每个安全区都须对另一安全区进行验证,以确认双方都是可信安全区。 一旦完成认证,它们就会建立受保护会话,采用 ECDH Key Exchange 共享会话秘钥。 该会话秘钥可用于对必须在这两个安全区之间进行共享的数据进行加密。

因为一个安全区不能对另一个安全区的受保护内存空间进行访问——即使它们运行在同一应用中,所以必须将所有指针解除引用至其值和副本,且必须将完整的数据集从一个安全区封送至另一安全区。

远程认证

借助远程认证,英特尔 SGX 软件和平台硬件的组合可用于生成评价,评价会被发送至第三方服务器以建立信任。 该软件包括应用安全区,以及评价安全区 (QE) 和配置安全区 (PvE),后两者皆由英特尔提供。 该认证硬件是英特尔 SGX 所支持的 CPU。 将该软件信息摘要与来自该硬件的平台唯一非对称秘钥相组合以生成评价,再通过已认证渠道将评价发送至远程服务器。 如果远程服务器确认安全区得到了正确实例化且运行在真正支持英特尔 SGX 的处理器上,远程服务器就会立即信任该安全区并选择通过已认证渠道向其提供机密信息。

sgx密封数据

密封数据是对数据进行加密,以便可在不泄露其内容的前提下将数据写至不可信内存或对其进行存储。 稍后,该安全区可将该数据读回并进行解封(解密)。 加密秘钥由内部按需推导,不会暴露给安全区。

1.安全区标识:本方法可生成一个所述安全区所独有的秘钥。

2.密封标识:本方法可生成一个基于安全区密封授权方标识的秘钥。 相同签名授权方的多个安全区可推导出相同秘钥。

有时间再持续更新……………………