ARM CCA 机密计算架构

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 无法访问           │  │
│  └───────────────────────────────────────────────────┘  │
└─────────────────────────────────────────────────────────┘

关键差异在于:

  1. Root(Root World):EL3,运行 Secure Monitor,是 CCA 的信任根。物理内存分配的最终仲裁者。
  2. Secure(Secure World):传统 TEE,运行 Trusted OS/Trusted Applications。
  3. Non-secure(Normal World):运行 Rich Execution Environment(Hypervisor + OS)。
  4. 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 的全链路隔离:

  1. 模型部署阶段:模型权重加密上传到 Realm 内存,仅 Realm 内的算子库可以解密。
  2. 请求处理阶段:用户输入通过安全通道(通常是 realm 认证的共享内存)传入 Realm,Hypervisor 仅传递信封但不能读取内容。
  3. GPU 推理阶段:GPU 硬件(如果支持 TEE)与 Realm 建立安全上下文,模型权重在 GPU 显存中保持加密,只有 GPU 内的安全处理器可以解密。
  4. 结果返回阶段:推理结果在 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 生态中的集成涉及多个层面:

  1. EL3 固件:Trusted Firmware-A (TF-A) 的 RME 支持(从 TF-A 2.7+ 开始实验性引入)
  2. RMM 实现:RMM Reference Implementation 和 Hafnium(Google 发布的 RMM 参考实现)
  3. KVM 扩展:Linux 5.18+ 引入了 KVM 的 CCA/Realm 支持,作为 Hypervisor(Non-secure)侧的接口
  4. 用户空间工具: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 系列讨论
点赞(0) 打赏

评论列表 共有 0 条评论

暂无评论
立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部