技术深度解析
mkannwischer/saber-clean 项目的目标看似简单:'生成清理后的 Saber 参考实现代码,并整合至 https://github.com/PQClean/PQClean'。但要真正实现一个干净、可审计且可移植的后量子算法实现,其背后的工程技术挑战巨大。Saber 本身是一种基于模块-LWR(Learning With Rounding)的密钥封装机制。与使用模块-LWE 并需要从离散高斯分布中采样的 CRYSTALS-Kyber 不同,Saber 使用二项分布和舍入步骤来派生共享秘密。这一设计选择消除了对复杂、恒定时间高斯采样器的需求,而后者正是侧信道漏洞和实现错误的常见来源。
saber-clean 中的“clean”体现在以下几个具体的工程决策上:
1. 零外部依赖: 参考实现仅使用标准 C 库(stdint.h、string.h 等)。不依赖 OpenSSL、平台特定内联函数或汇编代码。这使得它可轻松移植到任何拥有 C 编译器的平台,从嵌入式微控制器到超级计算机。
2. 恒定时间执行: 该实现被设计为恒定时间,意味着执行路径和内存访问模式不依赖于秘密数据。这对于防止时序侧信道攻击至关重要。代码避免了依赖秘密的分支和表查找。
3. 最小化抽象: 代码避免了不必要的宏、函数指针或复杂数据结构。它采用直截了当的过程式风格编写,尽可能贴近数学规范。这使其成为安全审计和形式化验证的理想选择。
4. 与 PQClean 的集成: 生成的代码会自动集成到 PQClean 的测试框架中,该框架包含广泛的功能测试、内存消毒器(AddressSanitizer、MemorySanitizer)和恒定时间验证工具。这确保了“干净”的实现能随着算法的演进保持其纯净性。
生成过程本身也值得关注。该仓库包含 Python 脚本,这些脚本接收原始的 Saber 提交(可能包含平台特定优化和非必要代码),并生成清理后的输出。这种方法允许维护者更新参考实现,而无需每次手动重写代码。
基准数据: 虽然 saber-clean 项目本身不提供性能基准(它旨在清晰而非速度),但底层 Saber 算法已被广泛基准测试。下表比较了 Saber 与其他 NIST 决赛选手及最终胜者 CRYSTALS-Kyber 的性能特征:
| 算法 | 密钥生成(周期) | 封装(周期) | 解封装(周期) | 公钥大小(字节) | 密文大小(字节) | 安全等级 |
|---|---|---|---|---|---|---|
| Saber(Light) | 42,000 | 52,000 | 58,000 | 672 | 736 | NIST Level 1 |
| Saber | 66,000 | 81,000 | 92,000 | 992 | 1,088 | NIST Level 3 |
| Saber(Fire) | 106,000 | 130,000 | 148,000 | 1,312 | 1,472 | NIST Level 5 |
| Kyber-512 | 52,000 | 62,000 | 70,000 | 800 | 768 | NIST Level 1 |
| Kyber-768 | 82,000 | 98,000 | 110,000 | 1,184 | 1,088 | NIST Level 3 |
| Kyber-1024 | 132,000 | 156,000 | 176,000 | 1,568 | 1,568 | NIST Level 5 |
数据要点: 在同等安全等级下,Saber 通常提供比 Kyber 略小的密钥和密文大小,且其周期数具有竞争力。然而,Kyber 在标准化和更广泛生态系统支持方面的优势使其成为默认选择。saber-clean 项目确保 Saber 在特定性能特征有利的专用场景中,仍是一个可行的替代方案。
关键人物与案例研究
saber-clean 背后的主要人物是 Matthias J. Kannwischer(mkannwischer),一位后量子密码学界的知名研究者。Kannwischer 也是 PQClean 的核心贡献者,并在创建各种 PQC 算法的干净、可移植实现方面发挥了关键作用。他在 pqm4 项目(ARM Cortex-M4 微控制器上的 PQC)上的工作在嵌入式安全社区被广泛引用。saber-clean 项目正是基于这一专长,将同样的极简主义和可审计性原则应用于 Saber 算法。
PQClean 项目本身是一项协作努力,涉及来自学术界(如拉德堡德大学、埃因霍温理工大学)和工业界(如微软研究院、谷歌)的研究人员。它作为参考实现的核心仓库,用于:
- 基准测试: 在公平的平台上比较不同 PQC 算法的性能。
- 标准化: 提供可作为标准文档基础的实现。
- 安全审计: 提供一个可信的基线,用于对比优化后的实现。