ARM CCA 机密计算架构:Realm Management Extension 多租户 AI 隔离的硬件基础与工程实践
ARM Confidential Compute Architecture(CCA)通过 Realm Management Extension(RME)引入了全新的硬件隔离范式。不同于 Intel TDX 的模块级信任根或 AMD SEV-SNP 的虚拟机级加密隔离,ARM CCA 在硬件层面实现了"Realm"(领域)这一全新安全世界,让 AI 工作负载在不信任 Hypervisor 乃至物理管理员的前提下安全执行。本文将深入剖析 CCA 的架构机制,并探讨其在多租户 AI 推理场景的工程价值。
一、为什么传统 TEE 无法承载 AI 工作负载
在深入 CCA 之前,我们需要理解为什么现有的可信执行环境(TEE)技术(如 ARM TrustZone、Intel SGX)在 AI 推理场景面前捉襟见肘。
TrustZone 的局限:TrustZone 将系统划分为"安全世界"和"普通世界",但安全世界运行在处理器最高安全级别,共享整个普通世界的物理内存映射。TrustZone 没有提供对 Hypervisor 或操作系统本身的反向隔离——云平台的管理员仍然可以窥探 AI 模型的输入输出。
Intel SGX 的瓶颈:SGX 提供了飞地(Enclave)级别的隔离,但受限于 Enclave Page Cache(EPC)的大小(通常仅 128MB-256MB),大语言模型根本无法装入。且 SGX 不支持设备直通,GPU 加速遥不可及。
AMD SEV-SNP 的突破与不足:SEV-SNP 通过反向映射表(RMP)实现了虚拟机级别的内存加密和完整性保护,已经能承载 AI 推理工作负载。但它的信任根是虚拟机 monitor(Hypervisor),一旦 Hypervisor 的代码被攻破,隔离即告失效。
ARM CCA 的设计目标是:让工作负载不仅加密隔离,还能完全排除 Hypervisor 和系统管理员的信任依赖。
二、RME 的四世界模型
ARM CCA 引入了一个全新的架构概念:Realm Management Extension(RME),它在原有的 Normal World 和 Secure World 基础上,增加了第四个安全世界——Realm World。
这形成了一个四世界模型:
┌─────────────────────────────────────────────────────────┐
│ World 0: Root (EL3, Secure Monitor) │
│ ┌───────────────────────────────────────────────────┐ │
│ │ World 1: Secure (EL2/EL1, Trusted OS) │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ World 2: Non-secure (EL2/EL1, Hypervisor/OS) │ │
│ └───────────────────────────────────────────────────┘ │
│ ┌───────────────────────────────────────────────────┐ │
│ │ World 3: Realm (EL2/EL1, Realm VM) │ │
│ │ ← 全新的隔离世界,Hypervisor 无法访问 │ │
│ └───────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
关键差异在于:
- Root(Root World):EL3,运行 Secure Monitor,是 CCA 的信任根。物理内存分配的最终仲裁者。
- Secure(Secure World):传统 TEE,运行 Trusted OS/Trusted Applications。
- Non-secure(Normal World):运行 Rich Execution Environment(Hypervisor + OS)。
- Realm:新引入的世界,运行 Realm VM,硬件保证 Hypervisor 和物理管理员无法观测 Realm 的内存或状态。
三、Granule Protection Table:硬件强制的内存隔离基石
RME 的核心数据结构是 Granule Protection Table(GPT),这是一个硬件维护的表,记录每个物理页(Granule,通常 4KB)所属的世界。
Granule 的状态转换遵循严格的状态机,由硬件强制执行:
# Granule Protection Table 状态机(概念模型)
GRANULE_STATES = {
"NonSecure": "属于 Normal World,OS/Hypervisor 可访问",
"Secure": "属于 Secure World,Trusted OS 可访问",
"Realm": "属于 Realm World,仅 RMM 和 Realm 可访问",
"Root": "属于 Root World,仅 EL3 固件可访问",
}
# 状态转换规则
VALID_TRANSITIONS = {
("NonSecure", "Realm"): "通过 SMC 调用 RMM辅助",
("Realm", "NonSecure"): "通过 RIC(Realm Interface Command)回收",
("NonSecure", "Secure"): "由 EL3 Secure Monitor 分配",
("Secure", "NonSecure"): "由 EL3 Secure Monitor 回收",
}
class GranuleProtectionTable:
"""RME 的 GPT 硬件实现概念模型"""
def __init__(self, memory_size, granule_size=4096):
self.granule_size = granule_size
self.num_granules = memory_size // granule_size
# 每个 Granule 有 2-bit 状态编码
self.table = ["NonSecure"] * self.num_granules
def assign_granule(self, phys_addr, new_state):
"""硬件强制执行的状态转换"""
idx = phys_addr // self.granule_size
old_state = self.table[idx]
# 硬件拒绝非法转换
if (old_state, new_state) not in VALID_TRANSITIONS:
raise PermissionError(
f"GPT 拒绝非法状态转换: {old_state} -> {new_state}"
)
# 关键:转换前硬件会自动擦除内存内容
if old_state in ("Realm", "Secure") and new_state == "NonSecure":
self._zero_granule(phys_addr) # 防止数据泄漏
self.table[idx] = new_state
return True
def access_check(self, phys_addr, accessor_world):
"""MMU 每次内存访问进行的硬件检查"""
idx = phys_addr // self.granule_size
granule_owner = self.table[idx]
if granule_owner != accessor_world:
# 触发 Granular Protection Fault (GPF)
raise GranularProtectionFault(
f"{accessor_world} 无法访问属于 {granule_owner} 的 Granule"
)
return True
GPT 的意义在于:即使 Hypervisor(EL2 Non-secure)被完全攻破,它也无法读取物理内存中标记为 "Realm" 的页面。这是由硬件 MMU 在每个内存访问时强制执行的安全检查,不依赖软件的正确性。
四、Realm Management Monitor (RMM):Realm 的"操作系统"
RMM(Realm Management Monitor)是 CCA 架构中运行在 EL2 Realm 世界的固件,负责管理 Realm VM 的生命周期。可以将其理解为"Realm 世界的 Hypervisor",但它运行在 EL2 的 Realm 安全状态下,对 Non-secure 世界的 Hypervisor 不可见。
RMM 与 Non-secure Hypervisor 之间的交互通过 Realm Management Interface(RMI) 完成:
# RMI (Realm Management Interface) 调用模型
class RealmManagementInterface:
"""
Non-secure Hypervisor 通过 SMC 调用 RMI 来管理 Realm。
RMM 执行实际的操作并返回状态码。
"""
def create_realm(self, realm_config):
"""Hypervisor 创建 Realm VM 的请求"""
# 1. RMM 验证配置合法性
# 2. RMM 分配 Realm Granule(通过 GPT 状态转换)
# 3. RMM 配置 Realm 寄存器上下文
# 4. 返回 Realm ID
return {"status": "SUCCESS", "realm_id": realm_id}
def run_realm(self, realm_id, entry_point):
"""调度 Realm vCPU 运行"""
# 1. RMM 恢复 Realm vCPU 寄存器状态
# 2. 硬件切换到 Realm EL1
# 3. Realm VM 执行,直到发生退出事件(interrupt/trap/PSCI)
# 4. 退回到 Realm EL2 RMM,RMM 转发事件给 Hypervisor
return {"exit_reason": "IRQ", "vector": 27}
def destroy_realm(self, realm_id):
"""销毁 Realm 并安全擦除所有状态"""
# 1. 将所有 Realm Granule 状态转回 Non-secure
# 2. 硬件在转换时自动归零页面内容
# 3. 释放所有硬件资源
return {"status": "SUCCESS"}
def add_memory_to_realm(self, realm_id, phys_addr):
"""动态将内存分配给 Realm"""
# 通过 RMI → GPT 状态转换
# Non-secure Granule → Realm Granule
# 硬件在转换时保证隔离
return {"status": "SUCCESS"}
关键的信任模型是:Hypervisor 负责资源调度和时间片分配,但不理解 Realm 内的数据内容。Hypervisor 告诉 RMM "在 pCPU 2 上调度 realm_id=5's vCPU 3,运行 10ms",RMM 负责执行,但 Hypervisor 看不到 Runtime 内的任何寄存器、内存或 IO 数据。
五、多租户 AI 推理场景:CCA 如何保护模型与数据
在云平台的 AI 推理服务场景,一个核心的安全需求是:模型提供方不希望云平台管理员或 Hypervisor 能够窃取模型权重,使用者也不希望云平台能看到输入数据。
传统 Cloud AI 推理模型:
用户请求 → [云平台 App] → [Hypervisor] → [Model Process] → GPU 推理
↑ 云平台管理员可以看到一切
CCA 保护后的 AI 推理模型:
用户请求 → [Normal App] → [Hypervisor] → [Transport → Realm VM] → GPU 推理
↑ 只能看到加密的传输信使
↑ Realm VM 拥有独立执行环境
- 模型权重加密存储于 Realm GPA
- Hypervisor 无法访问
- 甚至物理管理员工也不行
结合 GPU 领域的 Trusted Execution 技术(如 NVIDIA H100 Confidential Computing、Qualcomm 的 Secure AI pipeline),CCA 可以实现从 CPU 到 GPU 的全链路隔离:
- 模型部署阶段:模型权重加密上传到 Realm 内存,仅 Realm 内的算子库可以解密。
- 请求处理阶段:用户输入通过安全通道(通常是 realm 认证的共享内存)传入 Realm,Hypervisor 仅传递信封但不能读取内容。
- GPU 推理阶段:GPU 硬件(如果支持 TEE)与 Realm 建立安全上下文,模型权重在 GPU 显存中保持加密,只有 GPU 内的安全处理器可以解密。
- 结果返回阶段:推理结果在 Realm 内签名后传出,用户可验证结果确实来自未被篡改的 Model。
六、与 Intel TDX / AMD SEV-SNP 的技术对比
| 维度 | ARM CCA (RME) | Intel TDX | AMD SEV-SNP |
|---|---|---|---|
| 隔离单元 | Realm(可与 VM 一一对应或更小粒度) | TD(可信域) | VM(SEV-SNP VM) |
| Hypervisor 信任 | 不信任 | 部分信任(需验证 TDX module) | 部分信任 |
| 信任根 | Root Firmware (EL3) | Intel TDX Module + CPU | AMD PSP + SNP firmware |
| 内存加密 | 可选(通过 Realm 归属) | 必选(MKTME/ TME) | 必选(SME) |
| 内存完整性 | GPT 访问控制 | Merkle Tree | 反向映射表 (RMP) |
| 中断隔离 | 直接分配 (Direct IRQ) | 通过 TDX module | 安全 AVIC |
| 设备支持 | 需 IOMMU (SMMUv3 RME 扩展) | TDX IOMMU | 有限的 STP 支持 |
| 生态成熟度 | 发展中(首批芯片如 Cortex-X4/A720) | 第四代 Xeon 已部署 | EPYC 7003+ 已部署 |
ARM CCA 的独特优势在于它的 动态粒度:Realm 不一定需要是一个完整的 VM,RMM 可以管理更灵活的执行单元(类似于容器化到组件级别)。此外,ARM 在移动和边缘端统治地位使得 CCA 直接在智能手机、IoT 设备上实现机密 AI 成为可能——这是 x86 方案(TDX/SEV)力有未逮的场景。
七、Linux 内核的 CCA 支持:从 KVM 到 RMM
CCA 在 Linux 生态中的集成涉及多个层面:
- EL3 固件:Trusted Firmware-A (TF-A) 的 RME 支持(从 TF-A 2.7+ 开始实验性引入)
- RMM 实现:RMM Reference Implementation 和 Hafnium(Google 发布的 RMM 参考实现)
- KVM 扩展:Linux 5.18+ 引入了 KVM 的 CCA/Realm 支持,作为 Hypervisor(Non-secure)侧的接口
- 用户空间工具:Realm Management Tool (rmmtool)
// KVM 创建 Realm 的 ioctl 流程(简化)
// /include/uapi/linux/kvm.h
#define KVM_CAP_ARM_REALM 1 // 检测 Realm 支持
#define KVM_SET_USER_MEMORY_REGION_FLAGS 0x4020AE46
struct kvm_userspace_memory_region2 {
__u32 slot;
__u32 flags;
__u64 guest_phys_addr;
__u64 memory_size;
__u64 userspace_addr;
__u64 realm_handle; // Realm-specific handle
};
// 设置 Realm 内存属性
int set_realm_memory(kvm_vm, gpa, size, hva, realm_flags) {
struct kvm_userspace_memory_region2 mem2 = {
.slot = next_slot++,
.guest_phys_addr = gpa,
.memory_size = size,
.userspace_addr = hva,
.realm_handle = realm_id,
.flags = KVM_MEMRealm, // 标记为 Realm 内存
};
return ioctl(vm_fd, KVM_SET_USER_MEMORY_REGION_FLAGS, &mem2);
}
八、工程实践:构建一个简单的 CCA Realm 推理服务
以下是一个概念性的端到端架构,展示如何在 ARM CCA Realm 中部署 AI 推理服务:
# CCA Realm AI 推理部署参考架构
class CCARealmInferenceService:
"""
在 ARM CCA Realm 中运行机密 AI 推理服务
信任假设:仅 Realm VM + GPU 可信,其余(OS、Hypervisor、管理员)不可信
"""
def __init__(self, model_provider: str, gpu_device: str):
self.realm_id = None
self.model_size = 0
self.model_weights_handle = None
self.gpu_context = None
self.attestation_report = None
def provision_realm(self, realm_config: dict):
"""步骤 1:创建 Realm 并建立信任链"""
# 调用 RMM 分配 Realm 运行环境
# 生成初始 attestation report(包含 Realm 的初始测量值)
# 模型提供方验证 attestation 确认 Realm 处于安全状态
self.realm_id = RMM.create_realm({
"num_vcpus": realm_config.get("vcpus", 4),
"ram_mb": realm_config.get("ram_mb", 8192),
"supports_dao": True, # 支持 Direct Assignment of Objects
})
print(f"[{self.realm_id}] Realm 已创建,等待模型部署...")
def load_model_encrypted(self, encrypted_model: bytes):
"""步骤 2:加载加密模型到 Realm 内存"""
# 模型使用 Realm 公钥加密,仅 Realm 中的私钥可以解密
# 解密仅在 Realm 内进行,Hypervisor 看到的只是加密的 blob
self.model_weights_handle = RealmCrypto.decrypt_and_verify(
ciphertext=encrypted_model,
signature="model_provider_signature"
)
RMM.add_memory_to_realm(
realm_id=self.realm_id,
phys_addr=self.model_weights_handle.phys_addr,
size=self.model_weights_handle.size,
attributes="Realm" # GPT 标记为 Realm 归属
)
print(f"[{self.realm_id}] 模型已安全加载到 Realm GPA")
def setup_gpu_tee(self, gpu_device: str):
"""步骤 3:配置 GPU 安全上下文"""
# 如果 GPU 支持 Confidential Computing (e.g., NVIDIA H100 CC mode)
# 建立 Realm → GPU 的安全通道
self.gpu_context = GPULinkEstablisher.create_secure_context(
target_device=gpu_device,
realm_id=self.realm_id,
expected_attestation=self.attestation_report
)
print(f"[{self.realm_id}] GPU 安全通道已建立")
def run_inference(self, encrypted_input: bytes) -> bytes:
"""步骤 4:在 Realm 中执行推理"""
# 解密输入(仅 Realm 内可见)
plaintext_input = RealmCrypto.decrypt(encrypted_input)
# 在 Realm 内执行推理(权重从 Realm 内存,通过安全 GPU 通道)
raw_output = self.gpu_context.execute(
model_handle=self.model_weights_handle,
input_data=plaintext_input
)
# 输出加密和签名
signed_output = RealmCrypto.sign_and_encrypt(
data=raw_output,
recipient=self.user_public_key
)
return signed_output
# 部署流程示例
if __name__ == "__main__":
service = CCARealmInferenceService(
model_provider="acme-ai-labs",
gpu_device="gpu0"
)
# Step 1: Provisioning
service.provision_realm({"vcpus": 8, "ram_mb": 16384})
# Step 2: 模型提供方验证 attestation 后部署加密模型
service.load_model_encrypted(encrypted_model_blob)
# Step 3: GPU TEE 链路
service.setup_gpu_tee("nvidia-h100-confidential")
# Step 4: 推理服务上线
print("CCA Realm 推理服务就绪,等待用户请求...")
九、CCA 的挑战与局限
尽管 CCA 架构设计精妙,但在大规模部署 AI 推理工程实践中仍面临挑战:
1. 性能代价:GPT 访问控制增加了每次内存访问的微架构检查。Realm 的内存归属性切换(Non-secure → Realm)涉及硬件擦除,频繁的动态内存分配会带来延迟。
2. 调试困难:Realm 的内存对 Hypervisor 不可见,意味着传统的内核调试工具(如 kdb、gdb)在 Realm 内部失效。需要 RMM 提供专门的调试接口。
3. 硬件依赖:需要支持 RME 的 CPU(如 Cortex-A720/Cortex-X4)、RME-aware 的 SMMU、以及支持 CHI 安全扩展的核心网互联。当前市场上支持 RME 的服务器芯片有限。
4. GPU 生态:即使 CPU 侧 CCA 就绪,GPU 厂商对机密 AI 的支持仍然碎片化。NVIDIA H100 的 Confidential Computing 模式与 CCA 的集成仍是早期阶段。
5. 模型尺寸限制:虽然解决了 SGX 的 EPC 限制,但 Realm AI 推理仍受限于 GPU 机密模式的显存分配策略,超大模型(如 GPT 级别)的机密部署仍需仔细设计。
十、展望:CCA 与机密 AI 的未来
ARM CCA 代表了处理器架构对"在不可信基础设施上运行敏感计算"这一需求的正面回击。它不是简单地加密内存(SEV),也不是依赖于外部模块(TDX Module),而是将隔离机制内嵌到地址转换的最低层——GPT。
对于 AI 工程而言,CCA 的意义在于它首次让以下场景成为工程现实:
- 隐私推理即服务(Private Inference-as-a-Service):用户在不暴露查询内容的情况下让云端的 LLM API 处理请求。
- 多方安全联合推理:多个参与方的数据分别在不同 Realm 中汇聚推理,没有任何单一方能看到完整数据。
- 模型知识产权保护:模型提供方将模型部署到用户端的 Realm 中运行,用户获得推理结果但无法提取模型权重。
随着 ARM Neoverse V 系列服务器芯片的成熟和 Linux CCA 生态的完善,我们有望在 2025-2026 年看到 CCA 从实验室走进云数据中心。届时,深度理解 RME 架构将成为 AI 基础设施工程师的核心竞争力之一。
延伸阅读:
- ARM Realm Management Extension 官方架构规范
- ARM CCA 白皮书:Building a Secure Foundation for Confidential Computing
- Trusted Firmware-A (TF-A) RME 实现仓库
- Hafnium Hypervisor 项目(RMM 参考实现)
- Linux KVM ARM64 Realm patches 系列讨论

发表评论 取消回复