硬件级隐私保护的最后防线——代码和数据在 CPU 内部加密运行,
连操作系统和云厂商都无法窥视。AI 模型保护与推理可验证性的基础设施。
数据有三种状态:存储中(at rest)、传输中(in transit)、使用中(in use)。传统加密解决了前两种,但第三种一直是空白——你的代码和数据在 CPU 上运行时,必须是明文的。
TEE 填补了这最后一块拼图:数据在使用中的加密保护(Confidential Computing)。Confidential Computing Consortium(CCC,Linux 基金会旗下,2019 年成立,微软是创始成员之一)的定义:
前两种已经成熟,第三种是 TEE 的主战场。没有 TEE,你的数据一旦进入 CPU 执行,就像裸奔——操作系统内核、Hypervisor、云管理员都可以看到。
你的模型跑在 AWS/GCP/Azure 上——如何确保云厂商不会读取你的模型权重?传统方案:只能签 NDA。TEE 方案:物理上不可能读取。
模型权重保护同一台物理机上跑着别人的 VM——如何确保他们不会通过侧信道攻击窃取你的数据?Spectre/Meltdown 已经证明共享硬件不安全。
侧信道攻击用户付费调你的 AI API——如何证明你确实跑了模型,而不是返回缓存结果?TEE 的远程认证(Remote Attestation)提供密码学证明。
可验证计算GDPR、HIPAA、中国数据安全法要求敏感数据"可用不可见"——TEE 是目前唯一的技术手段。
数据合规根据 OMTP(Open Mobile Terminal Platform)最初的定义和 GlobalPlatform 的标准化:
TEE 中的代码和数据与 Rich OS(Android/Linux/Windows)完全隔离。即使 OS 被攻破、root 权限被获取,也无法读取 TEE 内部。
信任链的起点是制造时烧入芯片的不可变密钥(eFuses/PUF)。这些密钥无法被软件提取,即使物理攻击也极难获取。
远程方可以密码学验证:TEE 中运行的确切代码(通过度量值/哈希)、TEE 的硬件版本、是否有已知漏洞。无法在模拟器中伪造。
只有经过认证的 TEE 实例才能解密绑定到该 TEE 的密钥和数据。密钥永远不会离开硬件保护边界。
普通应用程序 • 完整的 OS 功能 • 可被攻破
可信应用 (TA) • 安全 OS • 受限 I/O • 硬件隔离
制造时烧入 • 不可变 • 每芯片唯一
TEE 不是单一技术,而是一系列硬件隔离方案的统称。不同方案的威胁模型、性能开销、适用场景差异巨大:
| 方案 | 厂商 | 粒度 | EPC/隔离大小 | 侧信道防护 | 主要场景 |
|---|---|---|---|---|---|
| Intel SGX | Intel | Enclave(函数级) | ~128MB-512MB EPC | ⚠️ 弱(多次被攻破) | 密钥保护、小程序 |
| Intel TDX | Intel | Trust Domain(VM 级) | 整个 VM 内存 | ✅ 较强 | 云 VM 机密计算 |
| AMD SEV-SNP | AMD | VM 级 | 整个 VM 内存 | ✅ 较强(SNP 增加完整性) | 云 VM 机密计算 |
| ARM TrustZone | ARM | Secure World(系统级) | 固定分区 | ⚠️ 中等 | 移动设备、IoT |
| ARM CCA | ARM | Realm(VM 级) | Realm 内存 | ✅ 较新 | 移动/云端 ARM |
| Nitro Enclaves | AWS | Enclave(VM 级) | 父实例分配 | ✅ Hypervisor 隔离 | AWS 云端密钥处理 |
| IBM Secure Execution | IBM | 分区级 | 整个分区 | ✅ 较强 | z15/LinuxONE |
| RISC-V Keystone | 开源 | Enclave 级 | 可配置 | 🧪 实验中 | 学术/定制硬件 |
SGX / Keystone
把关键函数放进小 Enclave
EPC 有限,需分割
侵入式改造代码
适合密钥/证书操作
TDX / SEV / CCA
整个 VM 都是可信域
无需改造应用代码
内存全加密
适合 AI 推理/数据库
Intel Software Guard Extensions 是最早的商用 TEE 方案之一,2015 年随 Skylake 处理器推出。它允许用户态代码定义Enclave——受硬件保护的私有内存区域。
关键机制:
// === enclave.edl (接口定义语言) ===
enclave {
trusted {
public int process_sensitive_data([in, out] uint8_t* data, size_t len);
public int get_attestation_evidence([out] uint8_t* evidence, size_t* ev_len);
};
untrusted {
void ocall_print([in] const char* msg);
};
};
// === enclave.cpp (可信侧实现) ===
#include "enclave_t.h"
#include <string.h>
int process_sensitive_data(uint8_t* data, size_t len) {
// 这段代码在 Enclave 内执行
// OS、Hypervisor、其他进程都无法读取 data 的明文
for (size_t i = 0; i < len; i++) {
data[i] = data[i] ^ 0xAB; // 简单 XOR 示例(实际用 AES)
}
ocall_print("Processing complete inside enclave");
return 0;
}
// === host.cpp (不可信侧宿主) ===
#include "enclave_u.h"
#include <openenclave/host.h>
int main() {
oe_enclave_t* enclave = nullptr;
// 创建 Enclave,加载 .signed 文件
oe_result_t result = oe_create_enclave_enclave(
"enclave.signed",
OE_ENCLAVE_TYPE_SGX,
OE_ENCLAVE_FLAG_DEBUG, // 生产环境用 0
nullptr, 0, &enclave);
if (result != OE_OK) {
printf("Enclave creation failed: %s\n", oe_result_str(result));
return 1;
}
uint8_t data[] = "sensitive payload";
// 调用 Enclave 内的函数(ECALL)
enclave_process_sensitive_data(enclave, data, sizeof(data));
oe_terminate_enclave(enclave);
return 0;
}
| 平台 | EPC 大小 | 实际可用 | 能做什么 |
|---|---|---|---|
| Client CPU (已弃用) | ~128MB | ~93MB | 小型密钥操作 |
| Xeon E (早期) | ~128MB | ~93MB | 小型 TA |
| Xeon (Ice Lake+) | ~512MB | ~390MB | 中等模型推理 |
| Azure DCsv3 | 配置相关 | 按 VM 大小 | 更大 Enclave |
AWS Nitro Enclaves 是 AWS 基于 Nitro Hypervisor 构建的隔离计算环境,2020 年正式发布。与 SGX 不同,它不依赖特定 CPU 指令,而是利用 Nitro Hypervisor 的 CPU 和内存隔离能力。
# === 1. 启用 Enclave(在 EC2 实例上)===
# 安装 nitro-cli
sudo amazon-linux-extras install aws-nitro-enclaves-cli -y
sudo usermod -aG ne $USER
# === 2. 创建 Enclave 镜像 (.eif) ===
# Dockerfile → EIF (Enclave Image Format)
nitro-cli build-enclave \
--docker-dir ./enclave-app \
--docker-file Dockerfile \
--output-file enclave.eif
# === 3. 运行 Enclave ===
# 分配 2 vCPU + 4096 MB 内存
nitro-cli run-enclave \
--eif-path enclave.eif \
--cpu-count 2 \
--memory 4096 \
--enclave-cid 16
# === 4. 查看运行状态 ===
nitro-cli describe-enclaves
# === 5. 远程认证(Attestation)===
# 获取认证文档,包含 Enclave 的度量值
nitro-cli attestation-documents --enclave-cid 16
# === 6. 从 Enclave 内调用 KMS ===
# Enclave 代码中(Python 示例)
import boto3
from nitro_enclaves import attestation
# 获取认证文档
attestation_doc = attestation.get_attestation_doc()
# 只有认证文档中的 PCRs 匹配时,KMS 才会解密
kms = boto3.client('kms', region_name='us-east-1')
response = kms.decrypt(
CiphertextBlob=encrypted_key,
Recipient={
'AttestationDocument': attestation_doc,
'KeyEncryptionAlgorithm': 'RSAES_OAEP_SHA_256'
}
)
# 现在你在 Enclave 内拿到了明文密钥
# 父实例的 root 用户都无法看到这个密钥!
Nitro Enclaves 与 AWS KMS 的集成是最实用的特性。你可以设置 KMS 密钥策略,要求解密操作只能在特定 PCR 度量值匹配的 Enclave 中执行:
{
"Sid": "AllowEnclaveDecrypt",
"Effect": "Allow",
"Principal": {"AWS": "arn:aws:iam::123456789012:role/MyRole"},
"Action": "kms:Decrypt",
"Resource": "*",
"Condition": {
"StringEquals": {
"kms:RecipientAttestation:ImageSha384": "<你的 Enclave 镜像 SHA384>",
"kms:RecipientAttestation:PCR0": "<PCR0 度量值>",
"kms:RecipientAttestation:PCR1": "<PCR1 度量值>",
"kms:RecipientAttestation:PCR2": "<PCR2 度量值>"
}
}
}
| 限制 | 影响 | 缓解方案 |
|---|---|---|
| 无网络访问 | 不能直接调外部 API | 通过父实例代理(vsock + 代理服务) |
| 无持久存储 | 重启后状态丢失 | 关键状态封存到 KMS/父实例 |
| 仅 Linux Enclave | 不能跑 Windows 应用 | 用容器化 Linux 应用 |
| 最多 4 个/实例 | 不适合大量并行 | 多实例部署 |
| 内存从父实例扣 | 减少可用内存 | 规划好资源分配 |
ARM TrustZone 是移动端最广泛部署的 TEE 方案。截至写作时,超过 95% 的智能手机使用 ARM 处理器,几乎所有都启用了 TrustZone。
TrustZone 通过 NS(Non-Secure)bit 将系统分为两个世界:
Rich OS (Android/Linux) • 普通应用 • 完整外设访问
Trusted OS (OP-TEE/Trusty) • 可信应用 (TA) • 受限外设访问
指纹/面部模板存储在 Secure World,匹配引擎也在 Secure World 运行。Normal World 只收到"匹配/不匹配"的结果。
指纹/面部Android Keystore 的密钥可绑定到 TrustZone。支付令牌的签名在 Secure World 完成,私钥永远不出 Secure World。
NFC/SEWidevine L1 认证要求视频解密在 TrustZone 中完成。4K Netflix/DRM 内容必须走 TEE 路径。
内容保护Android Keystore、iOS Secure Enclave 都基于 TrustZone 或类似 TEE。应用密钥不可导出。
密钥管理ARM 于 2020 年公布 CCA,是 TrustZone 的进化版,面向云端和移动端的 VM 级机密计算:
VM 级 TEE 是当前的主攻方向——不需要改代码,整个 VM 都受保护。
Intel TDX 于 2023 年在 Xeon 服务器商用,是 SGX 的继承者:
截至写作时,Google Cloud 的 Confidential VMs 已支持 Intel TDX,Azure 也在推进中。
AMD SEV 随 Zen 架构(2017)推出,经历了三代演进:
AMD SEV-SNP 由集成的 ARM Cortex-A5 安全处理器管理密钥,AES-GCM 硬件引擎实时加解密。Azure 的 DCasv5/ECasv5 系列使用 AMD SEV-SNP。
| 维度 | Intel TDX | AMD SEV-SNP |
|---|---|---|
| 发布时间 | 2023 | 2020 (SNP) |
| 加密粒度 | VM 级 | VM 级 |
| 内存加密 | MKTME(多密钥) | AES-128-GCM |
| 完整性保护 | ✅ 有 | ✅ 有(SNP 新增) |
| 寄存器保护 | ✅ 有 | ✅ 有(ES 新增) |
| 远程认证 | TD Quote | Attestation Report |
| Linux 支持 | 6.2+ Guest | 5.19+ Guest |
| 云厂商支持 | GCP, Azure | Azure, GCP, AWS |
| 成熟度 | 较新 | 更成熟 |
远程认证是 TEE 最重要的安全特性之一——它让你能密码学证明远程机器上运行的是什么代码。
| 方案 | 认证文档 | 签名方 | 验证服务 | 度量内容 |
|---|---|---|---|---|
| Intel SGX | Quote (SIGSTRUCT) | Intel EPID/DCAP | IAS / DCAP | MRENCLAVE/MRSIGNER |
| Intel TDX | TD Quote | Intel | TDX DCAP | TD 的度量值 |
| AMD SEV-SNP | Attestation Report | AMD PSP | AMD KDS | Launch digest, FW 等 |
| Nitro Enclaves | Attestation Document | Nitro Hypervisor | AWS KMS PCR | PCR0/1/2 |
| ARM CCA | Realm Token | RMM | CCA 验证服务 | Realm 度量值 |
| PCR | 内容 | 意义 |
|---|---|---|
| PCR0 | Enclave 镜像哈希 | 代码完整性——确保运行的是你编译的代码 |
| PCR1 | 内核 & bootstrap | 系统完整性——确保内核未被篡改 |
| PCR2 | 应用程序 & 配置 | 应用完整性——确保配置正确 |
| PCR3 | 父实例 IAM 角色 | 身份绑定——确保 Enclave 属于正确的实例 |
| PCR4 | Enclave 镜像指纹 | 镜像来源——确保来自可信构建流程 |
| PCR8 | 用户自定义数据哈希 | 自定义度量——如模型权重哈希 |
// Nitro Enclaves 远程认证验证(Node.js)
const https = require('https');
const crypto = require('crypto');
async function verifyAttestation(attestationDoc, expectedPCR0) {
// 1. 解析 CBOR 编码的认证文档
const doc = parseCBOR(attestationDoc);
// 2. 验证 AWS Nitro 签名证书链
const certChain = doc.certificate;
const rootCA = loadAWSNitroRootCA(); // AWS 公开的根证书
if (!verifyCertChain(certChain, rootCA)) {
throw new Error('Certificate chain verification failed');
}
// 3. 验证文档签名
const signature = doc.signature;
const payload = doc.document;
const cert = parseCertificate(certChain[0]);
if (!crypto.verify('sha384', payload, cert.publicKey, signature)) {
throw new Error('Signature verification failed');
}
// 4. 验证 PCR 度量值
const pcr0 = doc.pcrs[0]; // SHA384 哈希
if (pcr0 !== expectedPCR0) {
throw new Error(`PCR0 mismatch: got ${pcr0}, expected ${expectedPCR0}`);
}
// 5. 验证 Nonce(防重放)
if (doc.nonce !== ourNonce) {
throw new Error('Nonce mismatch - possible replay attack');
}
console.log('✅ Attestation verified! Enclave is running expected code.');
return true;
}
TEE 在 AI 领域有三大核心应用:模型权重保护、推理可验证性、数据防篡改。
问题:你的 AI 模型值数百万美元——训练 GPT-3 级模型花费 ~$4.6M。跑在云端,模型权重必须解密加载到 GPU/CPU 内存。
TEE 方案:用 SEV-SNP/TDX Confidential VM 运行推理服务。模型权重只在 VM 内解密,云厂商和同租户都无法读取。
现状:截至写作时,多家 AI 推理服务商(如 Opaque、Fortanix)已提供 TEE 保护的模型推理。Azure Confidential VMs + NVIDIA T4/A100 支持 GPU 直通。
核心场景问题:用户调 API 付费推理——如何证明你确实跑了模型?不是返回缓存?不是用了更便宜的模型?
TEE 方案:Enclave 内运行推理 + 认证。认证文档包含模型二进制度量值 + 输入输出哈希,用户可独立验证。
与 ZK 对比:ZK 证明计算正确但开销极大(~1000x 慢),TEE 只证明"跑了什么代码"但开销极小(~5-15% 性能损失)。
轻量可验证问题:AI 训练数据的来源和完整性如何保证?模型输出是否被中间人篡改?
TEE 方案:数据进入 Enclave 时绑定度量值,推理结果在 Enclave 内签名。任何篡改都会导致签名验证失败。
场景:金融风控模型、医疗诊断 AI、合规审计。
合规刚需问题:用户不想把隐私数据发给云端 AI——照片、病历、财务数据。
TEE 方案:数据加密发送到 Enclave,Enclave 内解密并推理,结果加密返回。云厂商看不到明文。
与 HE 对比:同态加密太慢(1000-10000x),TEE 接近原生速度。
实用方案
┌─────────────────────────────────┐
│ Cloud Provider │
│ ┌───────────────────────────┐ │
│ │ Confidential VM (SEV) │ │
│ │ ┌─────────────────────┐ │ │
│ │ │ AI 推理引擎 │ │ │
│ │ │ • 模型权重 (加密) │ │ │
│ │ │ • 推理逻辑 │ │ │
│ │ │ • 认证模块 │ │ │
│ │ └─────────────────────┘ │ │
│ │ 内存全加密 • Hypervisor │ │
│ │ 无法读取 │ │
│ └───────────────────────────┘ │
│ ↕ TLS + Attestation │
└─────────────────────────────────┘
↕
┌─────────────────────────────────┐
│ User Client │
│ • 验证 Attestation Quote │
│ • 确认 PCR = 预期模型度量 │
│ • 发送加密数据 → 接收加密结果 │
└─────────────────────────────────┘
| 方案 | CPU 开销 | 内存开销 | 网络开销 | 适用规模 |
|---|---|---|---|---|
| SGX Enclave | ~15-30% (含 ECALL) | 受 EPC 限制 | 无额外 | 小型推理 |
| SEV-SNP VM | ~2-7% | ~6% (加密元数据) | 无额外 | 中大型推理 |
| TDX VM | ~3-8% | ~5% | 无额外 | 中大型推理 |
| Nitro Enclave | ~5-10% | 从父实例分配 | vsock 开销 | 密钥操作 |
| 同态加密 (CKKS) | ~1000-10000x | 巨大 | 密文膨胀 | 仅理论 |
| ZK Proof | ~1000x (证明) | 大 | 证明体大 | 特定验证 |
TEE 不是银弹——特别是 SGX,已经经历了大量学术攻击。理解这些漏洞对于正确使用 TEE 至关重要。
| 类别 | 攻击方式 | 受影响方案 | 缓解措施 |
|---|---|---|---|
| 🔥 侧信道 | 缓存时序、分支预测 | SGX 严重、TrustZone 中等 | 常数时间代码、ORAM、随机化 |
| ⚡ 故障注入 | 电压/时钟毛刺 | 所有方案(需物理接触) | 电压调节锁定、硬件监测 |
| 🔓 推测执行 | Spectre/Meltdown 变种 | SGX 严重 | 微码更新、LFENCE、Retpoline |
| 🦠 恶意 Enclave | SGX 内运行恶意代码 | SGX | 签名验证、白名单策略 |
| 🔑 密钥提取 | 物理攻击(FIB/SEM) | 所有方案(极难) | PUF、防篡改封装 |
# === 前置条件 === # 1. 一个运行在 Nitro System 上的 EC2 实例(如 m5.xlarge) # 2. IAM 角色需有 kms:Decrypt, kms:GenerateDataKey 权限 # === Step 1: 安装工具 === sudo yum install -y aws-nitro-enclaves-cli \ aws-nitro-enclaves-cli-devel sudo systemctl enable nitro-enclaves-allocator.service sudo systemctl start nitro-enclaves-allocator.service # === Step 2: 构建 Enclave 镜像 === # 创建 Dockerfile cat > Dockerfile << 'EOF' FROM amazonlinux:2 RUN yum install -y python3 python3-pip RUN pip3 install boto3 pycbor2 COPY app.py /app.py ENTRYPOINT ["python3", "/app.py"] EOF # 构建 EIF nitro-cli build-enclave \ --docker-dir . \ --docker-file Dockerfile \ --output-file secure-processor.eif # === Step 3: 运行 Enclave === nitro-cli run-enclave \ --eif-path secure-processor.eif \ --cpu-count 2 \ --memory 4096 \ --enclave-cid 16 \ --debug-mode # 开发时启用调试 # === Step 4: 父实例代理 (vsock → TCP) === # Enclave 只能通过 vsock 通信 # 在父实例上运行代理,将 TCP 请求转发到 vsock python3 vsock_proxy.py --listen 0.0.0.0:8080 \ --vsock-cid 16 --vsock-port 5000
# === 前置条件 === # 需要 Intel Xeon E/SP 处理器(Ice Lake 或更新) # 注意:桌面 Core 处理器已不支持 SGX! # === Step 1: 安装 Open Enclave SDK === # Ubuntu 22.04 sudo apt update && sudo apt install -y \ libssl-dev libcurl4-openssl-dev \ open-enclave # === Step 2: 创建项目 === oeedger8r enclave.edl # 生成 Enclave 桥接代码 cmake -B build -DNIGHTLY=0 cmake --build build # === Step 3: 运行 === ./build/host/enclave_host # === 注意事项 === # 1. EPC 有限(通常 128-512MB),大应用需分页 # 2. 所有 I/O 必须通过 OCALL 回到不可信侧 # 3. 不能在 Enclave 内使用系统调用 # 4. 生产部署必须用 Release 模式(去掉 debug flag)
# === 最简单的方案:直接创建 Confidential VM ===
# Azure CLI
az vm create \
--resource-group myRG \
--name myConfidentialVM \
--image Canonical:ubuntu-24_04-lts:gen2:latest \
--size Standard_DC2as_v5 \ # AMD SEV-SNP
--security-type ConfidentialVM \
--os-disk-security-encryption-type \
DiskWithVMGuestState
# === 在 VM 内验证 SEV-SNP ===
# 检查 SNP 是否激活
cat /sys/module/kvm_amd/parameters/sev_snp
# 应该输出 Y 或 1
# 检查 SEV 状态
dmesg | grep -i sev
# === 获取认证报告 ===
# 使用 SEV-Guest 工具
sev-guest get-report --nonce $(openssl rand -hex 16)
# === 运行你的 AI 推理服务 ===
# 就像普通 VM 一样运行!
# 唯一的区别:内存被硬件加密
pip install vllm
python -m vllm.entrypoints.openai.api_server \
--model meta-llama/Llama-2-7b-chat-hf \
--port 8000
# 模型权重在 VM 内存中是加密的
# Azure 管理员无法读取!
| 场景 | 首选 | 备选 | 不推荐 | 原因 |
|---|---|---|---|---|
| API 密钥保护 | Nitro Enclaves | SGX | — | 密钥小、操作简单、KMS 集成好 |
| AI 推理保护 | SEV-SNP / TDX | Nitro + 代理 | SGX | 模型太大放不进 EPC;VM 级方案对应用透明 |
| 移动端安全 | TrustZone | Secure Element | SGX/SEV | 移动端只有 TrustZone,桌面 TEE 不适用 |
| 合规(GDPR/HIPAA) | SEV-SNP / TDX | Nitro Enclaves | — | 合规要求全链路加密,VM 级方案覆盖最全 |
| 可验证计算 | SGX + Attestation | SEV-SNP + Report | — | 需要精确度量值,SGX 粒度更细 |
| 多方隐私计算 | TEE + MPC | MPC alone | TEE alone | 单靠 TEE 信任单一硬件;MPC 不信任任何单点 |
| 云服务 | 实例类型 | TEE 方案 | 价格 (us-east-1) | 备注 |
|---|---|---|---|---|
| Azure | Standard_DC2s_v3 | Intel SGX | ~$0.296/hr | 含 EPC 内存 |
| Azure | Standard_DC2as_v5 | AMD SEV-SNP | ~$0.194/hr | 推荐 |
| AWS | m5.xlarge + Enclaves | Nitro Enclaves | ~$0.192/hr | 无额外费用 |
| GCP | n2d-standard-2 (confidential) | AMD SEV-ES | ~$0.134/hr | 自动启用 |
* 价格为 2025 年数据,按需实例,仅供参考。实际价格以云厂商官网为准。