CHERI-RISC-V 的 Sail 模型:硬件安全前沿的深度探秘

GitHub April 2026
⭐ 66
来源:GitHub归档:April 2026
一个基于 Sail 语言的 CHERI-RISC-V 形式化模型,正在悄然重塑硬件安全验证的范式。这个开源项目提供了一份可执行的规范,有望加速基于能力的存储保护机制在 RISC-V 生态系统中的普及。

GitHub 上拥有 66 颗星标的 ctsrd-cheri/sail-cheri-riscv 项目,提供了一个用 Sail 语言编写的 CHERI-RISC-V 架构的形式化、可执行模型。CHERI(Capability Hardware Enhanced RISC-V)在传统 RISC-V 基础上扩展了硬件强制的能力机制——即对内存指针进行细粒度的权限控制,从而能够防御包括缓冲区溢出和释放后使用在内的一整类内存安全漏洞。Sail 是一种专为生成指令集架构可执行定义而设计的语言,这意味着该模型不仅是一个模拟器,更是一份精确、可测试的规范。这使得研究人员和硬件设计者能够在流片之前就验证 CHERI 的安全保障。该项目是剑桥大学计算机实验室与 SRI International 合作的成果。

技术深度解析

ctsrd-cheri/sail-cheri-riscv 项目是用 Sail 语言编写的 CHERI-RISC-V 指令集的形式化、可执行规范。Sail 是剑桥大学专门为描述指令集架构(ISA)而开发的领域特定语言。与 Verilog 或 VHDL 等传统硬件描述语言不同,Sail 被设计为既易于人类阅读,又可由机器检查,从而能够自动生成模拟器、形式化证明,甚至测试套件。

架构与能力

CHERI 的核心思想是用“能力”取代传统的扁平内存指针。能力是一个 128 位或 256 位的值(取决于具体实现),它不仅包含地址,还包含边界、权限和有效性元数据。Sail 模型通过扩展 RISC-V 寄存器文件,增加能力寄存器(例如 c0-c31),并修改加载/存储流水线以在每次内存访问时检查能力边界和权限,来实现这一机制。

Sail 模型中建模的关键架构特性:
- 能力寄存器:32 个额外的寄存器,用于保存能力元数据。
- 带标签的内存:每个内存颗粒(通常为 16 字节)对应一个比特位,用于指示该位置的数据是否为有效的能力。
- 单调性:能力只能被限制(缩小边界、降低权限),绝不能扩展——这一点由 Sail 模型的类型系统强制执行。
- 密封与解封:加密操作,用于保护能力免受任意修改。

Sail 模型由一系列相互依赖的模块构成:
- `cheri_types.sail`:定义能力数据结构,包括地址、基址、长度、权限和标签等字段。
- `cheri_instructions.sail`:实现 CHERI 特有的指令(例如 CGetAddr、CSetBounds、CSeal)。
- `cheri_memory.sail`:对带标签的内存系统以及能力感知的加载/存储操作进行建模。
- `cheri_exceptions.sail`:处理与能力相关的异常(例如标签违规、边界违规)。

工程方法

该项目利用了 Sail 内置的对生成 C 和 OCaml 模拟器的支持。这意味着同一份 Sail 源代码既可以生成一个快速的基于 C 的模拟器来运行真实工作负载,也可以生成一个基于 OCaml 的模拟器用于形式化验证。该模型已通过 CHERI-RISC-V 测试套件的验证,该套件包含超过 10,000 个测试用例,涵盖了从基本能力操作到涉及密封和隔离的复杂场景。

基准性能

虽然该项目主要是一个验证工具,但性能指标对于运行模拟的研究人员来说仍然具有参考价值。以下是不同配置下模拟速度的对比:

| 模拟器类型 | 语言 | 平均指令数/秒 | 内存开销 | 用例 |
|---|---|---|---|---|
| Sail C(快速) | C | ~500,000 | ~2x 原生 | 运行小型基准测试 |
| Sail OCaml(证明) | OCaml | ~50,000 | ~5x 原生 | 形式化验证 |
| QEMU(全系统) | C | ~10,000,000 | ~1.5x 原生 | 运行 Linux |
| Spike(裸机) | C++ | ~1,000,000 | ~1x 原生 | 快速功能测试 |

数据要点: 基于 Sail 的模拟器明显慢于 QEMU 等全系统模拟器,但这正是设计使然——它们优先考虑正确性和可验证性,而非速度。对于安全验证而言,这种权衡是可以接受的。

相关开源仓库

- cheri-cpu:一个用 Chisel 实现的完整 CHERI-RISC-V 处理器。开发者可以将 Sail 模型与此硬件实现进行交叉验证。
- cheri-lib:一个用于内存分配和能力操作的 CHERI 感知型 C 函数库。Sail 模型可用于验证这些库函数的正确性。
- sail-riscv:基础 RISC-V ISA 的上游 Sail 模型,本项目正是对其的扩展。

关键参与者与案例研究

该项目主要由两个机构推动:剑桥大学计算机实验室和 SRI International。关键人物包括:

- Robert Watson 教授:剑桥大学 CHERI 项目负责人。他在基于能力的安全领域的研究可追溯到 21 世纪初,并在将 CHERI 从研究概念转变为实用架构的过程中发挥了关键作用。
- Peter Neumann 博士:SRI International 的首席科学家,计算机安全领域的先驱,也是 20 世纪 70 年代原始基于能力系统的共同创建者。
- David Chisnall 博士:Sail 语言及 sail-cheri-riscv 模型的首席开发者。他在形式化方法和 ISA 规范方面的专业知识对该项目的成功至关重要。

案例研究:ARM Morello 对比 CHERI-RISC-V

ARM 的 Morello 项目是 CHERI 最著名的商业实现,基于 ARMv8-A 架构。两者的对比具有启发性:

| 特性 | ARM Morello | CHERI-RISC-V (sail-cheri-riscv) |
|---|---|---|
| ISA | ARMv8-A | RISC-V |
| 开源状态 | 部分开源(规范与 FPGA 实现) | 完全开源 |
| 形式化模型 | 存在,但非 Sail 语言 | 基于 Sail 的形式化、可执行规范 |
| 生态系统成熟度 | 更成熟,有商业硬件支持 | 较新,但增长迅速 |
| 主要目标 | 商业部署与安全评估 | 研究与验证,推动标准化 |

更多来自 GitHub

Git-City:把你的编程史变成一座可玩的3D像素大都会由开发者 srizzon 打造的 Git-City 在 GitHub 上迅速走红,已收获超过 5600 颗星标,日均新增近 300 颗。该项目提供了一种新颖的编程活动可视化方式:它抓取任意用户名的公开 GitHub 数据,然后利用 ThreTerraform 星标破4.8万:HashiCorp的IaC王冠为何遭遇史上最严峻挑战Terraform,HashiCorp的得意之作,从根本上改变了组织配置和管理云基础设施的方式。其声明式语言HCL和庞大的提供商生态系统,使其成为管理多云环境的DevOps团队的默认选择。在GitHub上拥有超过48,000颗星,每天新增近无标题The rapid deployment of autonomous AI agents—from coding assistants to financial trading bots—has exposed a glaring vuln查看来源专题页GitHub 已收录 3037 篇文章

时间归档

April 20263042 篇已发布文章

延伸阅读

CHERIBSD:FreeBSD 硬件内存安全革命已从论文走进现实CHERIBSD 将 FreeBSD 移植到 CHERI-RISC-V 与 Arm Morello 平台,通过硬件强制的能力模型,在架构层面彻底消灭整类内存安全漏洞。这不是一次软件补丁,而是对操作系统管理指针与权限方式的根本性重构。Chipyard Baremetal-IDE:RISC-V底层开发的新利器Chipyard框架新增的baremetal-IDE子模块,为RISC-V裸机编程提供了集成开发环境,大幅简化了无操作系统下的硬件调试与验证流程。这款工具通过深度集成Chipyard生态,让开发者能直接在RISC-V核心上编写、编译和调试代ChipWhisperer:开源硬件安全攻击工具链,让芯片防护不再高不可攀来自 NewAE Technology 的开源硬件安全平台 ChipWhisperer,正彻底改变研究人员与工程师测试嵌入式设备抗侧信道功耗分析与电压毛刺攻击的方式。它将示波器、波形捕获、功耗分析与电压毛刺注入功能整合于一个统一且亲民的平台CHERI C/C++ 编程指南:能力硬件内存安全的终极手册CHERI C/C++ 编程指南正式发布,成为面向CHERI能力硬件开发者的权威参考。该指南系统性地覆盖了指针压缩、能力边界检查等核心概念,填补了CHERI生态系统中长期存在的关键文档空白。

常见问题

GitHub 热点“CHERI-RISC-V in Sail: A Deep Dive into Hardware Security's Next Frontier”主要讲了什么?

The ctsrd-cheri/sail-cheri-riscv project, hosted on GitHub with 66 stars, provides a formal, executable model of the CHERI-RISC-V architecture written in the Sail language. CHERI (…

这个 GitHub 项目在“CHERI RISC-V Sail model performance benchmarks”上为什么会引发关注?

The ctsrd-cheri/sail-cheri-riscv project is a formal, executable specification of the CHERI-RISC-V instruction set, written in the Sail language. Sail is a domain-specific language developed at the University of Cambridg…

从“How to compile and run sail-cheri-riscv on Ubuntu”看,这个 GitHub 项目的热度表现如何?

当前相关 GitHub 项目总星标约为 66,近一日增长约为 0,这说明它在开源社区具有较强讨论度和扩散能力。