5 分钟上手 liboqs:后量子密码学 C 库的新手完整指南

5 分钟上手 liboqs:后量子密码学 C 库的新手完整指南

【免费下载链接】liboqsC library for prototyping and experimenting with quantum-resistant cryptography项目地址: https://gitcode.com/GitHub_Trending/li/liboqs

liboqs 是一个用 C 编写的开源后量子密码学(PQC)库,把 ML-KEM、ML-DSA、SLH-DSA 等 NIST 已标准化的抗量子算法,以及一大批候选算法封装进统一的 API,让你不碰数学细节就能调用、测试和对比这些算法的性能。它是 Open Quantum Safe(OQS)项目的核心组件,定位很明确:帮你在原型阶段回答一个问题——"这些抗量子算法在我自己的硬件上到底跑得怎么样、体积多大、内存吃多少"。

为什么需要它:一条今天截获的 HTTPS 流量

🔐 先说一个不新鲜的威胁模型:现在收集,将来解密。攻击者今天无法破解你服务器的 RSA 或 ECDH 会话密钥,但他可以把密文原封不动存下来,等十年后量子计算机成熟再批量解密。医疗记录、企业合同、个人隐私数据,都可能躺在这个"时间胶囊"里。

问题在于:你不可能等到量子计算机真正落地才做迁移。团队现在就需要一个能上手的工具来回答:

  • ML-KEM-768 在我服务器的 TLS 握手里会增加多少毫秒?
  • ML-DSA-65 的签名体积比 ECDSA 大多少倍,数据库字段要扩多长?
  • 资源受限的嵌入式设备上,哪些算法的内存占用能接受?

逐个读 NIST 规范、自己找参考实现、再写基准测试,工作量不小。liboqs 把这些工作打包好了:算法实现、统一 API、基准工具、已知答案测试(KAT)全部内置,你只需要关注"选哪个算法、怎么评估"。

核心概念通俗解读:三类"抗量子"积木

liboqs 里的算法分成三类,对应加密世界里三个基本动作。理解这三类,就看懂了库的骨架:

1. KEM(密钥封装机制)——"把共享钥匙装进保险箱"📦

传统 Diffie-Hellman 的思路在量子计算机面前不成立,KEM 换了个思路:

甲方生成一个"保险箱"(公钥)寄给乙方;乙方把共享密钥连同物品一起封箱寄回;只有甲方用私钥能开箱。整个过程不需要任何"双方各持一半数学难题"的假设,因此天然抗量子。

ML-KEM(即 NIST FIPS 203 标准,前身 Kyber)就是这一类里已经标准化的选手。

2. 无状态签名——"盖一个带防伪水印的章"✍️

ML-DSA(FIPS 204,前身 Dilithium)和 SLH-DSA(FIPS 205,前身 SPHINCS+)是 NIST 标准化的两个数字签名方案。区别在于:ML-DSA 基于格,签名快但公钥较大;SLH-DSA 基于哈希树,公钥极小、假设极简,但签名更慢。liboqs 里还有 Falcon、MAYO、CROSS 等在 NIST 后续标准化流程中的候选方案,方便你做横向对比。

3. 有状态签名——"用一页只能写一次的编号便签"📝

XMSS 和 LMS 这类哈希签名,安全强度不依赖任何"难解数学问题",只依赖哈希函数——但代价是私钥像一支只能写有限次数的笔,每签一次就消耗一个编号,重复使用会泄露全部秘密。所以 liboqs 默认只允许验证、不允许生成密钥和签名(需显式打开几个带"危险"前缀的 CMake 开关才能开启),这个设计本身就值得注意。

统一 API 是另一个关键点。无论底层是格、哈希还是码,上层调用形状一致:OQS_KEM_<算法>_keypair / encaps / decaps和OQS_SIG_<算法>_sign / verify。切换算法基本是换函数名,应用逻辑不用重写。库还支持编译期裁剪:用OQS_MINIMAL_BUILD="KEM_ml_kem_768;SIG_ml_dsa_44"就能得到一个只含两个算法的最小库,这对嵌入式场景很实用。

⚠️ 一个必须说在前面的事实:liboqs 官方明确标注它面向研究与原型验证,不建议直接用于生产环境或保护敏感数据。真实部署建议采用"混合模式"——抗量子算法与现有 RSA/椭圆曲线并用,详见 README.md 中的 Limitations and Security 一节。

快速上手:从 clone 到跑通 ML-KEM 四步

以下命令以 Linux/macOS 为例(Ubuntu 依赖最典型):

第 1 步:装依赖并获取源码

sudo apt install cmake ninja-build libssl-dev git clone -b main https://gitcode.com/GitHub_Trending/li/liboqs cd liboqs

第 2 步:配置并编译

mkdir build && cd build cmake -GNinja .. ninja

产物是静态库lib/liboqs.a和一批可执行测试程序,全部在build/tests/下。

第 3 步:跑最小示例

./tests/example_kem

它会完整演示一次 KEM 会话:生成密钥对、封装、解封装,并校验双方得到的共享密钥一致。签名侧对应./tests/example_sig。这两个示例的源码(tests/example_kem.c)只有两百来行,是最直接的上手教材。

第 4 步(可选):跑基准测试

./tests/speed_kem --kems ml_kem_768 --cycles

speed_kem和speed_sig会输出密钥生成、封装/签名、解封装/验签的耗时数据,是评估"换算法到底付出多少性能代价"的主力工具。

常用构建选项(完整列表见 CONFIGURE.md):

选项作用
OQS_MINIMAL_BUILD="KEM_ml_kem_768;SIG_ml_dsa_44"只编译指定算法,库体积最小化
OQS_ALGS_ENABLED=STD只构建 NIST 已标准化算法集合
OQS_MEMOPT_BUILD=ON选用内存优化版实现(牺牲部分性能换内存)
OQS_USE_OPENSSL=ON复用 OpenSSL 的 AES/SHA 实现,减少代码体积(默认开启)
BUILD_SHARED_LIBS=ON构建动态库liboqs.so而非静态库

真实使用场景:四件具体的事

📊 场景一:给迁移排期提供数据。安全架构组准备把内部服务的密钥交换从 X25519 换成 ML-KEM-768,但 CTO 要一份"握手延迟变化报告"。你用speed_kem在目标机型上跑出新旧算法的耗时对比,再结合tests/test_kem_mem看内存占用,一两周就能把"每笔握手多花 X 毫秒、会话密钥字段多占 Y 字节"写进方案文档,而不是拍脑袋。

🔩 场景二:嵌入式设备选型。硬件团队要在 MCU 上评估签名方案。用OQS_MINIMAL_BUILD只编 SLH-DSA-Sha2_128s 一个变体,配合OQS_MEMOPT_BUILD=ON选内存优化实现,再拿test_sig_mem测峰值内存——如果连最小变体都放不下,这条技术路线就可以尽早排除。liboqs 还提供了 Zephyr RTOS 模块,带现成示例(zephyr/samples/),支持 Zephyr 3.4/3.5。

🚀 场景三:探索 GPU 加速。如果数据中心要批量处理 PQC 运算,liboqs 支持通过OQS_USE_CUPQC或OQS_USE_ICICLE选项把 ML-KEM 卸载到 NVIDIA GPU 上执行(src/kem/ml_kem/ 下有对应的 CUDA/ICICLE 实现目录)。开启前先用 CPU 基线跑一轮speed_kem,再对比 GPU 版本,量化收益是否值得引入依赖。

🔬 场景四:验证与审计自己的集成。算法实现是否正确?kat_kem/kat_sig按 NIST 提交规范生成已知答案值,配合tests/test_kat.py与上游参考值比对;是否存在依赖密钥的分支泄露(侧信道)?tests/test_constant_time.py借助 Valgrind 做常时检测,结果记录在 tests/constant_time/。这些工具是你在自己代码里集成 PQC 之后的"回归测试基建"。

生态与延伸:不只是一个 C 库

liboqs 背后是 Linux 基金会旗下 PQCA 支持的 OQS 项目,周边生态大致有这几块:

  • TLS 集成:OQS 提供 OpenSSL 3 的 Provider 原型,让 TLS 握手能跑 PQC 密钥交换,无需大改应用代码(README 中 Overview 一节有说明)。你本地这份源码主要负责"算法层",协议层集成靠 Provider。
  • 算法文档:每个算法家族都有独立说明页(标准化状态、优化变体、上游维护情况),入口在 docs/algorithms/;全量算法矩阵见 ALGORITHMS.md,平台支持分级见 PLATFORMS.md。
  • 平台覆盖:x86-64(含 AVX2/AVX512 优化)、ARM64v8(含 NEON)、ARM32v7,源码按平台分目录组织,如 src/kem/ml_kem/ 下能看到_x86_64、_aarch64、_ref多套实现,构建系统会在运行期按 CPU 特性分发到最优版本(OQS_DIST_BUILD控制)。
  • 许可:核心库为 MIT License(LICENSE.txt),个别第三方子模块使用其他许可,README 有逐项清单。
  • 安全响应:漏洞上报流程见 SECURITY.md,各算法的上游维护承诺(是否有人跟进修复)在 ALGORITHMS.md 中有明确分级,选型时值得看一眼。

API 的 HTML 文档可以在build目录里用ninja gen_docs生成,然后打开docs/html/index.html浏览。

适合谁,下一步做什么

liboqs 适合这几类人:正在制定 PQC 迁移路线的安全工程师、需要量化算法开销的架构师、在嵌入式或学术场景做密码学实验的研究者。如果你的目标是直接上生产环境加密业务,它不是终点站——但它是做决策之前绕不开的"试验台"。

一个明确的建议:今天就跑一次speed_kem。拿你的目标机型、你业务里实际会用的算法档位(比如 ML-KEM-768),把延迟和内存数据存下来。等未来 TLS 栈正式支持 PQC 时,这份基线数据会是你迁移方案里最硬的部分。

【免费下载链接】liboqsC library for prototyping and experimenting with quantum-resistant cryptography项目地址: https://gitcode.com/GitHub_Trending/li/liboqs

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

连接器与自动化控制厂商评估:三维度框架甄选长期合作伙伴

连接器与自动化控制厂商评估:三维度框架甄选长期合作伙伴

做设备集成和产线升级的工程师&#xff0c;应该都遇到过这种尴尬&#xff1a;聊连接器&#xff0c;一堆做线缆和接插件的厂商讲得头头是道&#xff0c;但一问到总线协议、运动控制和故障诊断&#xff0c;马上含糊其辞&#xff1b;反过来&#xff0c;找自动化整体方案&#xff0…

2026/10/20 1:18:52 阅读更多 →
php内存缓存插件yac的安装配置--平替apcu,多进程共享内存

php内存缓存插件yac的安装配置--平替apcu,多进程共享内存

1. 安装依赖与Yac扩展1.1 安装PHP开发工具及依赖Bashsudo apt update sudo apt install php7.4-dev php-pear pkg-config # 开发工具与PECL管理器1.2 通过PECL安装YacBashsudo pecl install yac安装过程需确认时&#xff0c;直接按回车使用默认配置。⚙️ 2. 配置PHP加载Yac扩…

2026/10/20 1:18:52 阅读更多 →
Tailwind组件库实战:从原子类到主题定制与避坑指南

Tailwind组件库实战:从原子类到主题定制与避坑指南

简介&#xff1a;这是一份 Tailwind CSS 6.23 版本的组件库资源包&#xff0c;面向 Web 前端开发者与 UI 工程师&#xff0c;以 utility-first 为核心&#xff0c;汇总了高频组件、实用类和官方 Tailwind UI 最佳实践&#xff0c;帮助快速搭建响应式、无障碍的现代界面&#xf…

2026/10/20 1:18:52 阅读更多 →

最新新闻

Unity代码热更新实战:ILRuntime集成Addressable的完整方案与避坑指南

Unity代码热更新实战:ILRuntime集成Addressable的完整方案与避坑指南

做Unity客户端这些年&#xff0c;只要是做手游的&#xff0c;基本绕不开热更新这个话题。资源热更还好说&#xff0c;AssetBundle或者Addressable都能解决&#xff0c;真正麻烦的是代码热更。以前用Lua&#xff0c;好是好&#xff0c;但团队要养Lua程序员&#xff0c;C#的代码也…

2026/10/20 2:00:13 阅读更多 →
MapReduce核心原理解析:从分而治之到Shuffle与优化实践

MapReduce核心原理解析:从分而治之到Shuffle与优化实践

1. 为什么先要有MapReduce&#xff1a;单机跑不动的那一刻我最早接触MapReduce是在某培训机构的课程笔记里&#xff08;也就是标题里这个"学习历程"系列&#xff09;&#xff0c;前几章还在讲HDFS&#xff0c;讲数据怎么分块存储、怎么备份。当时我的感觉是&#xff…

2026/10/20 2:00:13 阅读更多 →
排队论与Anylogic仿真:车站进站拥堵优化实践

排队论与Anylogic仿真:车站进站拥堵优化实践

简介&#xff1a;一份基于排队论与Anylogic仿真研究车站进站排队优化的学术PDF文档&#xff0c;面向铁路运营管理、车站规划设计及客流管理相关从业者与研究人员&#xff0c;也适合交通工程、运筹学方向学生作为案例参考。文档针对实名制售票下旅客进站排队过长、体验不佳的问题…

2026/10/20 2:00:13 阅读更多 →
轻量级数据抓取与清洗:用Python和规则配置打造自动化处理工具

轻量级数据抓取与清洗:用Python和规则配置打造自动化处理工具

1. 为什么会做"rea"这个项目"rea"这个名字从一开始就不是什么复杂的单词缩写&#xff0c;它只是我手上这个小工具的一个代号。当时我维护着一个内容站点&#xff0c;每天需要从几个固定的数据源抓取素材&#xff0c;经过人工筛选、格式整理之后再发布到后台…

2026/10/20 2:00:13 阅读更多 →
ANSYS弹塑性分析实战:从弹性到塑性收敛调试

ANSYS弹塑性分析实战:从弹性到塑性收敛调试

简介&#xff1a;《2021年ANSYS弹性及塑性分析非常经典.docx》是一份面向ANSYS初、中级用户及机械、土木、航天等工程领域从业者的中文教程资料&#xff0c;聚焦弹性与塑性非线性分析的核心原理和软件操作方法&#xff0c;帮助读者理解材料屈服、塑性变形和ANSYS塑性选项的实际…

2026/10/20 2:00:13 阅读更多 →
HyperDbg:Windows Ring0级内核调试代理原理与实践

HyperDbg:Windows Ring0级内核调试代理原理与实践

简介&#xff1a;本资源为开源Ring0级内核调试器Hyperdbg的完整源码工程&#xff0c;面向Windows驱动开发者、系统安全研究员及操作系统学习者&#xff0c;用于深入理解与实践内核层调试技术&#xff0c;解决驱动开发调试、恶意代码行为分析、系统稳定性优化等高阶问题。压缩包…

2026/10/20 1:59:13 阅读更多 →

日新闻

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

CLRC663芯片Pin-to-Pin替代实战:从评估到量产全记录

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
ESP32舵机控制指南:原理、多路驱动与避坑实战

ESP32舵机控制指南:原理、多路驱动与避坑实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →
位移法实现一阶低通滤波:单片机ADC采样降噪实战

位移法实现一阶低通滤波:单片机ADC采样降噪实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/20 1:01:30 阅读更多 →

周新闻

基于GMM的语音识别系统原理与MATLAB实现详解

基于GMM的语音识别系统原理与MATLAB实现详解

说到基于高斯混合模型&#xff08;GMM&#xff09;的语音识别系统&#xff0c;很多人第一反应就是一堆数学公式&#xff0c;觉得门槛很高。但如果你真的在MATLAB里把它落地跑通&#xff0c;会发现核心其实就是三件事&#xff1a;把声音变成特征向量&#xff0c;用GMM给每个类别…

2026/10/19 10:02:04 阅读更多 →
数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理入门:反白、灰度化、调色板修改与导出txt实践

数字图像处理这四个字听起来挺唬人&#xff0c;但落到具体操作上&#xff0c;无非就是让计算机按你的想法“摆弄”像素。我在一个模拟项目X里用了一套特别经典的基础处理流程&#xff1a;对图像做反白、改调色板、彩色转灰度&#xff0c;最后把像素数据导出成txt文件。单看每一…

2026/10/19 17:32:41 阅读更多 →
机器人大脑技术盘点:具身智能的感知、决策与数据闭环

机器人大脑技术盘点:具身智能的感知、决策与数据闭环

如果你的信息流最近也天天刷到“机器人大脑”这个词&#xff0c;你会发现一个很有意思的现象&#xff1a;每个人说的“大脑”根本不是同一个东西。有人指的是大语言模型&#xff0c;有人指的是运动控制系统&#xff0c;还有人指的是能理解物理世界的端到端模型。在2026年这个时…

2026/10/19 1:30:52 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 2:54:50 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/19 9:10:22 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/18 12:16:16 阅读更多 →