来自王老师的机密计算技术简介:https://heartever.github.io/files/ConfidentialComputing-Guilin.pdf
参考阅读文献
- Intel Software Developer’s Manuals chapter 35.4
- Intel SGX DCAP Quick Install Guide
- Introduction to Intel® SGX Data Center Attestation Primitives: Components and Flows
- Intel DCAP ECDSA Orientation
- Supporting Third Party Attestation for Intel® SGX with Intel® Data Center Attestation Primitives (ECDSA主要看这篇文章)
- SGX VC pitch - SysTEX 2019
- Which Platforms Support Intel® Software Guard Extensions (Intel® SGX) Datacenter Attestation Primitives (DCAP)?
- Which Platforms Support Intel® Software Guard Extensions (Intel® SGX) SGX2?
术语
- TCB(Trusted computing base) 为实现计算机系统安全保护的所有安全保护机制的集合,机制可以硬件、固件和软件的形式出现。现代操作系统努力降低TCB的大小。
硬件实现
EPC(Enclave Page Cache) Enclave被保存在EPC中,而EPC位于DRAM中的处理器保留存储器(PRM)中
SECS(SGX Enclave Control Structure) 每个enclave一个
TCS(Thread Control Structure) 每个enclave中包含多个TCS,每个TCS又有一个对应的SSA
SSA(Save State Area) 每个TCS都有一个SSA,存储了异常和中断处理时处理器的状态。如果正在运行的enclave被停止或者中断,像寄存器这样的上下文信息都会从CPU中清除并移到它们各自的EPC中。
SIGSTRUCT and VA Page 每个EPC通常拥有它的SIGSTRUCT和VA Page
EPCM(Enclave Page Cache Map)用于管理Enclave Pages的安全属性,EPCM包含了EPC中列出的每一个页面的进一步的信息。 EPCM是CPU中的一个查询表,其中包含了enclave相关的数据
MEE(Memory Encryption Engine) MEE是CPU的一部分,由于EPC在DRAM中,CPU在MEE的协助下加密EPC内容,以保证其安全性,确保CPU是系统中唯一能够正确读取enclave中的数据的地方。
度量过程
SGX在enclave创建之初对所有EADD指令添加到enclave内的内存和其他元数据计算一个sha256,而不是在运行时动态measure
软件服务
- AESM(Application Enclave Services Manager)
即SGX应用安全容器的服务管理系统。是一个系统服务,通常位于
/opt/intel/sgx-aesm-service/aesm/aesm_service
,sgx程序通过unix-sockets与之通信 provides launch support for SGX Enclave, key provisioning, and remote attestation services.
EPID模式的attestation
Intel Enhanced Privacy ID (EPID)
一组机器共同使用一对非对称密钥,以提供匿名性增强
两个密钥
Root Provisioning Key (RPK)
随机密钥,在制造时嵌入到cpu中,且intel知道所有设备的RPK。该密钥和远程证明以及Provisioning Enclave有关。
Root Sealing Key (RSK)
随机密钥,出厂时在cpu中产生,intel不知晓该密钥
EGETKEY
借助这两个key派生出之后的所有key
两个特殊的Enclave
Provisioning Enclave (PvE),供应Enclave
负责Platform Provisioning过程:根据RPK与Intel Provisioning Service通信,执行EPID加入流程,获得EPID private key,即attestation key。
Quoting Enclave (QE)
负责远程证明过程。它验证请求的enclave的report(相当于一个LA过程),然后用上一步PvE拿到的attestation key对report签名成为quote,然后将quote使用硬编码的IAS公钥进行加密。最后将加密好的quote发给SP,SP拿去找IAS验证。
其他服务组件
Intel Provisioning Service
一个在线服务,与PvE交互,负责EPID组的加入,以及EPID private key(即attestation key )的供应过程
Intel Attestation Service (IAS)
一个很重要的在线服务,负责验证verifier发来的evidence(即加密的quote)。
quote只能由IAS解密。解密完成后IAS会向SP返回一个Attestation Verification Report,里面包含了QE生成的QUOTE结构体。
Service Provider (SP) 服务供应商
在实际场景中,一个Service Provider(作为verifier)如果想要使用IAS,必须先找IAS注册,将自己的TLS证书和自己的SPID绑定,才能使用IAS的服务
数据结构
Report (EREPORT):
Hardware report generated by the Intel® SGX HW that provides identity and measurement information of the enclave and the platform. It can be MAC’d with a key available to another enclave on the same platform.
Quote
Data structure used to provide proof to an off-platform entity that an application enclave is running with Intel® SGX protections on a trusted Intel® SGX enabled platform.
通常是由Quoting Enclave产生的,加密后发给IAS
Attestation Verification Report
IAS返回的对quote的验证结果,包含了enclave产生的数据,如MRENCLAVE、MRSIGNER等
Attestation Verification Report Signature
由IAS对Attestation Verification Report做的签名
Attestation Report Signing Certificate
和Attestation Verification Report Signature签名所用私钥对应的公钥证书,由IAS返回
Attestation Report Signing CA Certificate
Attestation Report Signing Certificate的上级CA证书,这是Attestation Verification Report的信任根,因此通常由verifier自己以可信的方式获取。
ECDSA模式的attestation
- Data Center Attestation Primitives(DCAP)
服务组件
Intel Provisioning Certification Service (Intel PCS)
英特尔提供的在线供应认证服务,允许检索必要的材料,包括PCK证书、PCK证书撤销列表(CRLs)。这些材料用以证明支持SGX的飞地
https://api.portal.trustedservices.intel.com/provisioning-certification
Provisioning Certification Caching Service (PCCS)
数据中心中对PCS的缓存服务,由服务提供商SP管理,不需要运行在SGX平台之上,SP可以自定义其实现。PCCS在访问PCS时需要使用在intel页面上订阅的api密钥。
PCK Certificate ID Retrieval Tool
一个工具,在Provisioning阶段使用,用于获取provisioning data:包含了该CPU唯一的Platform Provisioning ID (PPID),以及TCB信息,然后发给PCCS。
一些Quote Library(ql)
ECDSA Quote Provider Library (qpl库)
SP可以自定义其实现,负责从PCCS获取PCK证书,嵌入到Quote里面
- 这个库被后面的Quote Generation Library和Quote Verification Library所依赖
ECDSA Quote Generation Library
负责生成Quote并且使用平台密钥签名
SP可以自定义其实现。包含了PCE和QE
ECDSA Quote Verification Library
由Intel提供,包含了QVE。
在SGX平台和非SGX平台上都可以运行
When the platform supports SGX, the library can return an SGX REPORT authenticating the verification result was produced by the Intel® SGX Quote Verification Enclave (QVE).
特殊的Enclave
Provisioning Certification Enclave (PCE)
为本地运行的QE扮演了一个本地CA的角色,持有平台特定的Provisioning Certification Key(PCK)(通过
EGETKEY
获得)。QE可以自己产生一对attestation key,然后把公钥给PCE签名形成一个类似于证书的结构,包含了公钥和QE的身份信息。这个结构会用PCK签名。
Quoting Enclave (QE)
与EPID里的QE不同。
Intel提供了其源码,但需要注意的是如果SP自己编译这个enclave,那么相当于把SP包括在了TCB中。因此Intel还提供了自己签名好的的enclave二进制文件。
Quote Verification Enclave QVE
在Verify环节用到,是可选的。由DCAP 1.3引入,目的是「Keeps 3rd party verifiers out of the SGX Attestation TCB」
Key和Certificate
Provisioning Certification Key (PCK)
PCE持有的一对和TCB关联的签名密钥,用于对attestation key签名。
PCK Certificate
Intel颁发的证书,由PCS提供
Attestation Key
QE产生的一对非对称密钥
数据结构
Collateral
材料,指的是Intel PCS提供的远程证明相关的材料,也可以从PCCS那里获得
Quote
Quote中至少包含了:attester enclave的元数据、QE的身份标识、PCK证书、
其它术语
Platform Provisioning ID (PPID)
Is unique to the platform and PCE identity, but not to the specific TCB. This values and corresponding TCB SVNs are used to identify the platform when requesting the corresponding PCK certificate from Intel.
三个过程
Provisioning过程
在设备初始化时,或者TCB更新时需要重新进行该过程
流程是:
- 运行PCK Certificate ID Retrieval Tool,将PPID和TCB信息发给PCCS进行注册。
- PCCS向PCS获取certificates,以及对应该TCB level的其余endorsements数据,PCCS会将其存储起来。
Evidence(Quote) Generation过程
- attester应用调用Quote Generation Library生成quote,后者调用Quote Provider Library去向PCCS获取PCK证书,以嵌入到quote中
Quote & TCB Verify 过程
步骤
To verify an Intel® SGX attestation, the verifier should take the following steps.
- Verify the integrity of the signature chain from the Quote to the Intel-issued PCK certificate.
- Verify no keys in the chain have been revoked.
- Verify the Quoting Enclave is from a suitable source and is up to date.
- Verify the status of the Intel® SGX TCB described in the chain.
- Verify the enclave measurements in the Quote reflect an enclave identity expected.
需要的信息,除了quote之外还要:
- Intel-issued Certificate for the PCK that certified the attestation key,
- Revocation list that applies to the PCK certificate and any intermediate CA used to certify it.
- Up-to-date SVNs for the CPU & PCE.
- Identity of Quoting Enclave trusted to generate attestation key and issue Quotes.
开发相关
软件组成
- SGX driver
- SGX driver存在三个版本(具体区别可以看上面的pdf文档)
- Out-of-tree Driver (/dev/isgx): https://github.com/intel/linux-sgx-driver
- 2021年底停止更新,适用于没有Flexible Launch Control (FLC)功能的CPU
- 对于archlinux用户,可以选择安装aur中的linux-sgx-driver-dkms-git包
- i5-7200U支持SGX但是是Legacy Launch Control
- DCAP Driver (/dev/{sgx_enclave, sgx_provision},新的是/dev/sgx/enclave和/dev/sgx/provision): https://github.com/intel/SGXDataCenterAttestationPrimitives/
- 较新的驱动,支持DCAP模式,需要Flexible Launch Control.
- DCAP Driver(In-kernel Driver) (/dev/{sgx_enclave, sgx_provision}): Mainline kernel release 5.11 or higher
- 需要Flexible Launch Control.
- Out-of-tree Driver (/dev/isgx): https://github.com/intel/linux-sgx-driver
- SGX driver存在三个版本(具体区别可以看上面的pdf文档)
- SGX PSW
- 对于ubuntu和Red Hat Enterprise Linux用户,Intel 提供了repository,可以直接用包管理器安装,参考https://download.01.org/intel-sgx/sgx-linux/2.14/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf
- SGX PSW(SGX Platform SoftWare) 该部分主要包含aesm服务
- SGX SDK
主要分为三部分:
- Untrusted RunTime System (URTS):被链接到基于sgx的应用程序中(通常是libsgx_urts.so),通过socket与aesm通信
- Trusted RunTime System (TRTS):与enclave代码链接在一起构建成ELF共享库文件
- enclave standard library code:intel提供的一部分标准库文件,与enclave代码链接在一起
安装方式
- 建议阅读文档 https://download.01.org/intel-sgx/sgx-linux/2.14/docs/Intel_SGX_SW_Installation_Guide_for_Linux.pdf
- 从docker中启动sgx开发环境
使用github的intel/linux-sgx仓库中
linux/installer/docker
目录下的的文件来构建。这里我做了一些修改来创建一个专门用来开发sgx程序的镜像
运行aesm服务所在的docker容器:
build_and_run_aesm_docker.sh
创建并启动一个sgx开发环境的docker容器 进入该容器
docker build --target sgx_sdk --build-arg https_proxy=$https_proxy --build-arg http_proxy=$http_proxy -t sgx_sdk -f ./Dockerfile ./ docker create --device=/dev/isgx -v aesmd-socket:/var/run/aesmd --network=host -v /run/media/imlk/Data/workspace/sgx:/code --name=sgx_sdk_container -t -i sgx_sdk docker start sgx_sdk_container
docker exec -it sgx_sdk_container /bin/bash