O(x)Caml 在太空:以内存安全保障最终疆域

将软件部署到低地球轨道(LEO)面临一系列独特的挑战:极端环境、有限的连通性以及高昂的失败代价。当 bug 进入轨道后,无法简单地 SSH 到服务器并重启进程;内核补丁变成了一个复杂的交付问题,整个系统崩溃可能意味着数百万美元资产的损失。

最近,代号为 Borealis 的项目——一个 pure-OCaml 实现的 CCSDS 协议栈——成功在 DPhi Space 的 ClusterGate-2 载荷模块中启动。此部署表明,高层次、内存安全的语言不仅适用于太空应用,而且对于保障下一代载荷卫星至关重要。

Borealis 的架构

Borealis 作为守护进程运行,管理地面站与卫星之间的通信。虽然它提供了用于遥测和指令的标准客户端-服务器接口,但底层传输是一个 pure-OCaml 实现的 CCSDS(空间数据系统咨询委员会)协议族。

延迟容忍网络

由于卫星缺乏持续的网络连接,Borealis 将文件系统视为延迟容忍网络。每个指令、响应和遥测样本都会序列化为 BPv7(Bundle Protocol version 7)捆绑并写入磁盘。DPhi 的 API 随后在下一个可用的过境期间转发这些不透明字节。

安全封装

在共享硬件上作为租户运行时,安全至关重要。Borealis 使用 BPSec 将每个捆绑包包装在加密和认证块中。这确保即使宿主的 Linux 内核被攻破——考虑到诸如 “Dirty Frag” 或 “Copy Fail” 等内核级 CVE 的普遍性,这是一种真实威胁——路由路径仍然位于信任路径之外。卫星运营商只能看到不透明的字节;他们无法读取、修改或伪造内容。

后量子准备

面向长期任务(10-15 年),Borealis 使用 ML-DSA-65 实现了后量子签名密钥的 Over-The-Air Rekeying (OTAR)。这是一项 NASA 空间系统保护标准 (NASA-STD-1006A) 的关键要求。通过实现 OTAR,Parsimoni 能在不重新刷写卫星的情况下轮换密钥,标志着首批公开的轨道后量子 OTAR 演示之一。

性能与 OxCaml 优势

虽然 OCaml 5 提供了安全的多线程和高性能,但卫星调度的 “热路径”——每个数据包都必须解码并路由——要求极低的抖动。这正是 OxCaml,Jane Street 的实验性编译器分支发挥变革性作用的地方。

消除 GC 抖动

在标准 OCaml 中,每个数据包的分配通常落在堆上,触发小规模的垃圾回收(GC)循环。在高吞吐量环境下,这些循环会产生延迟峰值(抖动),可能破坏严格的调度截止时间。

通过使用 OxCaml 的模式系统和 exclave_ stack_ 注解,开发者可以将分配标记为栈绑定。这确保它们永不进入堆,也永不触发 GC。结果十分显著:

  • p99.9 延迟: 从每包 29 ns 降至 9 ns。
  • GC 压力: 在 2500 万个数据包中,从 394 次小 GC 降至零。

正如社区成员所指出的,这使得开发者在默认情况下仍能享受基于 GC 的语言的人体工学优势,而仅在性能关键的地方选择手动式的内存控制。

为什么选择 OCaml 用于太空?

历史上,太空软件主要由 C 和 C++ 主导,但这些语言承载着大量内存损坏漏洞。Microsoft 和 Chromium 的研究表明,约 70% 的严重 CVE 源于内存安全问题。在太空领域,这一点体现在诸如 NASA CryptoLib TC 帧解析器中发现的堆缓冲区溢出等错误上。

OCaml 从根本上消除了整类攻击面。为进一步确保正确性,Borealis 采用了多层防御:

  1. 形式化验证: 使用 libcruxfiat-crypto 实现密码学原语。
  2. 类型化模式: 线格式编解码器由类型化模式生成,并通过 Microsoft 的 EverParse 进行验证。
  3. 类型驱动状态机: 协议状态被编码为 GADT,使编译器在编译时拒绝无效的状态转换。

前进之路:扩展舰队

Borealis 不仅是轨道上的单一二进制文件;它是构建太空软件新方式的概念验证。该项目利用 MirageOS 的库,证明十年前用于云 unikernel 的同一工具集同样适用于卫星载荷的管道工作。

下一个挑战是规模化。随着硬件变得常规化,焦点转向软件栈:以与 Docker 管理地面 Linux 容器相同的轻松方式管理专用载荷二进制文件的舰队。这涉及创建安全的、签名的更新路径以及在单一卫星总线上的多个租户之间实现强隔离。

通过将 ML 的数学严谨性与 OxCaml 的性能优化相结合,Parsimoni 正在展示 “最终疆域” 同时可以安全且高效。

Sources