引言
ARM64 Pointer Authentication Code (PAC) 是 ARMv8.3 架构引入的革命性安全特性,通过硬件级别的指针签名与验证机制,从根源上防御 ROP/JOP 等内存攻击。截至 2026 年,PAC 已广泛应用于 Apple M 系列芯片、ARM Cortex-X 系列内核以及主流移动设备的安全防护中。本文从硬件微架构层面出发,深入解析 PAC 的完整技术栈。
2. PAC 的硬件基础
2.1 核心思想
PAC 利用指针中未使用的高位比特(在 64 位系统中,虚拟地址通常只使用 48 或 52 位),存储一个加密签名(即 PAC)。CPU 在指针被使用前自动验证签名,若被篡改则触发异常,从而阻止控制流劫持攻击。
2.2 五大密钥
ARM64 架构定义了 5 组独立的 PAC 密钥,每组 128 位,由硬件寄存器存储,对用户态/内核态进行隔离:
- APIAKey:用户态指针认证(Instruction)
- APIBKey:用户态指针认证(备份,用于不同上下文)
- APDAKey:用户态数据指针认证
- APDBKey:用户态数据指针认证(备份)
- APGAKey:通用密钥,用于 Pointer Authentication 通用签名
2.3 QARMA 算法
PAC 内部使用 QARMA(QUAd-round Mesh-based ARchitecture)轻量级分组密码进行签名计算。QARMA-64 是一个 64 位分组的迭代结构,每轮由置换、密钥加、列混淆组成,仅需 4-6 轮即可满足安全需求,保证了极低的硬件开销(延迟

发表评论 取消回复