本文介绍如何在g7t、c7t或r7t实例(下文简称为vSGX实例)中构建SGX加密计算环境,并演示如何运行示例代码以验证SGX功能。
前提条件
已创建并登录vSGX实例。背景信息
Intel® SGX以硬件安全保障信息安全,不依赖固件和软件的安全状态,为用户提供物理级的加密计算环境。Intel® SGX通过新的指令集扩展与访问控制机制实现SGX程序的隔离运行,保障关键代码和数据的机密性与完整性不受恶意软件的破坏。不同于其他安全技术,Intel® SGX的可信根仅包括硬件,避免了基于软件的可信根可能自身存在安全漏洞的缺陷,极大地提升了系统安全保障。
检查SGX使能状态
构建SGX加密计算环境前,您可以通过cpuid检查SGX使能状态。本文以Alibaba Cloud Linux 2/3 UEFI镜像为例演示检查过程。
- 安装cpuid。
yum install -y cpuid
- 检查SGX使能状态。
cpuid -1 -l 0x7 |grep SGX
下图表示SGX已经被正确使能。说明 SGX被正确使能后,运行SGX程序还需要SGX驱动。阿里云提供的专用镜像已经内置了SGX驱动,如果您没有使用专用镜像,请自行安装SGX驱动。 - 检查SGX驱动安装情况。
ls -l /dev/{sgx_enclave,sgx_provision}
下图表示已经安装SGX驱动。
构建SGX加密计算环境
为开发SGX程序,您需要在vSGX实例上安装运行时(runtime)、SDK,并配置远程证明服务,建议您使用阿里云提供的专用镜像获得更好的使用体验。这些镜像已搭载SGX驱动,并提供完全兼容Intel® SGX SDK的阿里云TEE SDK。本文以Alibaba Cloud Linux 2/3 UEFI镜像为例演示构建过程,如果您使用Ubuntu、CentOS等Linux镜像,请参考Intel官方提供的Intel® SGX软件安装指南安装所需的驱动、PSW等。
- 可选:安装阿里云SGX运行时。说明 如果您通过ECS管理控制台创建vSGX实例,会自动安装阿里云SGX运行时。您可以跳过本步骤,直接开始安装阿里云TEE SDK。
- 安装阿里云TEE SDK。
yum install -y sgxsdk
阿里云TEE SDK完全兼容Intel® SGX SDK,安装阿里云TEE SDK后,您可以参见Intel® SGX Developer Reference开发SGX程序。说明 阿里云TEE SDK中包含的Intel® SGX SDK的默认安装目录为/opt/alibaba/teesdk/intel/sgxsdk/。 - 配置阿里云SGX远程证明服务。阿里云SGX远程证明服务完全兼容Intel® SGX ECDSA远程证明服务和Intel® SGX SDK,因此阿里云vSGX实例能够通过远程证明来获得远程提供商或生产者的信任。阿里云SGX远程证明服务为SGX SDK提供下列信息:
- SGX certificates:SGX证书。
- Revocation lists:已被撤销的SGX证书列表。
- Trusted computing base information:可信根信息。
说明 Intel Ice Lake仅支持基于Intel SGX DCAP的远程证明方式,不支持基于Intel EPID的远程证明方式,您可能需要适配程序后才能正常使用远程证明功能。更多远程证明的信息,请参见attestation-service。阿里云SGX远程证明服务采用区域化部署,您可以访问vSGX实例所在地域的阿里云SGX远程证明服务来获得最佳的稳定性。安装阿里云TEE SDK后会自动生成远程证明服务的默认配置文件/etc/sgx_default_qcnl.conf,您需要修改该配置文件以适配vSGX实例所在地域的阿里云SGX远程证明服务,方法如下:说明 目前阿里云SGX远程证明服务仅支持如下地域和可用区。支持的地域 Region ID 华北1(青岛) cn-qingdao 华北2(北京) cn-beijing 华北3(张家口) cn-zhangjiakou 华北6(乌兰察布) cn-wulanchabu 华东1(杭州) cn-hangzhou 华东2(上海) cn-shanghai 华南1(深圳) cn-shenzhen 华南2(河源) cn-heyuan 华南3(广州) cn-guangzhou 西南1(成都) cn-chengdu 中国(香港) cn-hongkong 新加坡 ap-southeast-1 印度尼西亚(雅加达) ap-southeast-5 - (推荐)方法一:自动化完成/etc/sgx_default_qcnl.conf文件的配置。执行如下命令,自动化完成/etc/sgx_default_qcnl.conf文件的配置。更多命令信息,请参见查看实例元数据。
# 查看实例所在Region token=$(curl -s -X PUT -H "X-aliyun-ecs-metadata-token-ttl-seconds: 5" "http://100.100.100.200/latest/api/token") region_id=$(curl -s -H "X-aliyun-ecs-metadata-token: $token" http://100.100.100.200/latest/meta-data/region-id) # 配置PCCS_URL指向实例所在Region的PCCS PCCS_URL=https://sgx-dcap-server-vpc.${region_id}.aliyuncs.com/sgx/certification/v3/ cat > /etc/sgx_default_qcnl.conf << EOF # PCCS server address PCCS_URL=${PCCS_URL} # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE EOF
- 方法二:手动修改/etc/sgx_default_qcnl.conf配置文件。
- 如果vSGX实例已分配公网IP,/etc/sgx_default_qcnl.conf文件的内容修改如下。其中,[Region-ID]需替换为vSGX实例所在地域的ID。
# PCCS server address PCCS_URL=https://sgx-dcap-server.[Region-ID].aliyuncs.com/sgx/certification/v3/ # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE
- 如果vSGX实例只有VPC内网IP,/etc/sgx_default_qcnl.conf文件的内容修改如下。其中,[Region-ID]需替换为vSGX实例所在地域的ID。
# PCCS server address PCCS_URL=https://sgx-dcap-server-vpc.[Region-ID].aliyuncs.com/sgx/certification/v3/ # To accept insecure HTTPS cert, set this option to FALSE USE_SECURE_CERT=TRUE
- 如果vSGX实例已分配公网IP,/etc/sgx_default_qcnl.conf文件的内容修改如下。其中,[Region-ID]需替换为vSGX实例所在地域的ID。
验证SGX功能示例一:启动Enclave
阿里云TEE SDK中提供了SGX示例代码用于验证SGX功能,默认位于/opt/alibaba/teesdk/intel/sgxsdk/SampleCode目录下。
本节演示其中的启动Enclave示例(SampleEnclave),效果为启动一个Enclave,以验证是否可以正常使用安装的SGX SDK。
- 安装编译工具。
- 如果为Alibaba Cloud Linux 2 UEFI镜像,安装devtoolset。
- 安装devtoolset。
yum install -y devtoolset-9
- 设置devtoolset相关的环境变量。
source /opt/rh/devtoolset-9/enable
- 安装devtoolset。
- 如果为Alibaba Cloud Linux 3 UEFI镜像,安装Development Tools。
yum groupinstall -y "Development Tools"
- 如果为Alibaba Cloud Linux 2 UEFI镜像,安装devtoolset。
- 设置SGX SDK相关的环境变量。
source /opt/alibaba/teesdk/intel/sgxsdk/environment
- 编译示例代码SampleEnclave。
- 运行编译出的可执行文件。
./app
验证SGX功能示例二:SGX远程证明示例
阿里云TEE SDK中提供了SGX示例代码用于验证SGX功能,默认位于/opt/alibaba/teesdk/intel/sgxsdk/SampleCode目录下。
本节演示其中的SGX远程证明示例(QuoteGenerationSample、QuoteVerificationSample),效果为生成和验证Quote。该示例涉及被挑战方(在vSGX实例中运行的SGX程序)和挑战方(希望验证SGX程序是否可信的一方),其中QuoteGenerationSample为被挑战方生成Quote的示例代码,QuoteVerificationSample为挑战方验证Quote的示例代码。
- 安装编译工具。
- 如果为Alibaba Cloud Linux 2 UEFI镜像,安装devtoolset。
- 安装devtoolset。
yum install -y devtoolset-9
- 设置devtoolset相关的环境变量。
source /opt/rh/devtoolset-9/enable
- 安装devtoolset。
- 如果为Alibaba Cloud Linux 3 UEFI镜像,安装Development Tools。
yum groupinstall -y "Development Tools"
- 如果为Alibaba Cloud Linux 2 UEFI镜像,安装devtoolset。
- 设置SGX SDK相关的环境变量。
source /opt/alibaba/teesdk/intel/sgxsdk/environment
- 安装SGX远程证明依赖的包。
yum install -y libsgx-dcap-ql-devel libsgx-dcap-quote-verify-devel
- 编译被挑战方示例代码QuoteGenerationSample。
- 运行编译出的可执行文件生成Quote。
./app
- 编译挑战方示例代码QuoteVerificationSample。
- 对QuoteVerificationSample Enclave进行签名。发布对外的正式版Enclave时,您需要提供签名密钥进行签名操作。
sgx_sign sign -key Enclave/Enclave_private_sample.pem -enclave enclave.so -out enclave.signed.so -config Enclave/Enclave.config.xml
- 运行编译出的可执行文件验证Quote。
./app
更新SGX SDK、PSW及DCAP软件包
Intel® SGX的软件栈主要包括SGX SDK、SGX PSW和SGX DCAP,阿里云建议您定期更新软件版本以提供最佳的安全性。
- 执行如下命令,升级SGX SDK、SGX PSW和SGX DCAP相关软件包。
rpm -qa --qf "%{NAME}\n"|grep -E "sgxsdk|libsgx-|libtdx-|^sgx-|^tdx-"|xargs bash -c '</dev/tty yum update "$@"' _
- 查看SGX SDK、SGX PSW和SGX DCAP软件版本。
已知问题
yum install -y alinux-release-experimentals && \
yum install -y kernel-hotfix-5577959-23.al7.x86_64