embetrix/meta-oqs
GitHub: embetrix/meta-oqs
这是一个面向嵌入式 Linux 的 Yocto 构建层,将 NIST 批准的后量子密码学算法集成到物联网和边缘设备中,帮助开发者为即将到来的量子计算威胁提前做好安全准备。
Stars: 24 | Forks: 1
# meta-oqs
This layer is an OpenEmbedded/Yocto layer dedicated to Open Quantum Safe, providing experimental integration and testing of quantum-safe cryptographic algorithms for embedded Linux systems.
此层是一个致力于 Open Quantum Safe (OQS) 的 OpenEmbedded/Yocto 层,为嵌入式 Linux 系统提供抗量子密码算法的实验性集成与测试。
## OQS (Open Quantum Safe)
Open Quantum Safe (OQS) 项目旨在开发和集成抗量子密码算法。这些算法旨在抵御未来量子计算机的潜在威胁。OQS 项目提供了一个 C 库 liboqs,其中包含多种抗量子算法的实现。
OQS 实现了最新的 [NIST 批准的后量子密码学 (PQC) 算法](https://csrc.nist.gov/projects/post-quantum-cryptography)。
欲了解更多信息,请访问 [Open Quantum Safe 网站](https://openquantumsafe.org)。
**免责声明:** OQS 项目和 `liboqs` 均为**实验性**项目,不应在生产环境中使用。其实现可能包含安全漏洞,且未经过与成熟密码库同等程度的审计。侧信道和时序攻击不在 OQS 的威胁模型范围内。有关更多详细信息,请参阅 [liboqs 安全策略](https://github.com/open-quantum-safe/liboqs/security)。
## 架构概览
```
+-------------------------------+ +--------------------------------+
| OpenSSL-based Applications | | Non-OpenSSL Applications |
| (NGINX, OpenSSH, curl, MQTT) | | (C, C++, Rust, Python, Go...) |
+---------------+---------------+ +---------------+----------------+
| |
v |
+---------------+ |
| OpenSSL 3.x | |
+-------+-------+ |
| |
v |
+---------------+ |
| oqs-provider | |
+-------+-------+ |
| |
+-----------------+ +-----------------+
| |
v v
+----------------+
| liboqs |
+-------+--------+
|
v
+----------------+
| PQC Algorithms |
+----------------+
```
## 配置
此层可以集成到您的层中,或使用 [kas-tool](https://github.com/siemens/kas) 独立构建:
要通过 `oqs-provider` 启用带有 oqs 支持的 `OpenSSL`,您应设置:
`DISTRO_FEATURES:append = " oqs"`
这将使 `OpenSSL` 识别 Hybrid/PQC 算法,并将默认 TLS 组设置为:
`X25519MLKEM768:mlkem768:x25519:prime256v1:x448:secp521r1:secp384r1`
同时也启用了 `OpenSSH`(fork 自 [open-quantum-safe/openssh](https://github.com/open-quantum-safe/openssh)),在经典算法之上支持 Hybrid 和纯 PQC 密钥交换。
**建议:** 推荐使用如 `X25519MLKEM768` 这样的混合密钥交换,因为 PQC 算法仍在成熟过程中。混合模式将经典算法 `X25519` 与后量子算法 `MLKEM-768` 相结合,在 PQC 有效的假设下提供最佳的量子抗性,并在其失效时以经典安全性作为回退保障。
## 语言绑定
此层提供多种语言的 OQS 绑定:
| 语言 | 配方 | 描述 |
|----------|--------|-------------|
| *C* | [`liboqs`](recipes-crypto/liboqs) | 核心 PQC 库,包含用于测试和基准测试的 `oqs_test_*` 和 `oqs_speed_*` 二进制文件 |
| *C++* | [`liboqs-cpp`](recipes-crypto/liboqs-cpp) | C++ 绑定,附带示例二进制文件:`oqs_cpp_rand`、`oqs_cpp_kem`、`oqs_cpp_sig` |
| *GO* | [`liboqs-go`](recipes-crypto/liboqs-go) | GO 绑定,附带示例二进制文件:`oqs_go_rand`、`oqs_go_kem`、`oqs_go_sig` |
| *Python* | [`python3-liboqs`](recipes-devtools/python) | Python 3 绑定,附带示例脚本:`oqs_python_rand`、`oqs_python_kem`、`oqs_python_sig` |
| *Rust* | [`liboqs-rust`](recipes-crypto/liboqs-rust) | 使用 clang 构建的 Rust crate 绑定,发布 `rlib` 构件 |
## OQS 速度测试
[`liboqs`](recipes-crypto/liboqs) 配方构建并安装 `oqs_speed_kem` 和 `oqs_speed_sig` 基准测试二进制文件(来自 `liboqs-tests` 包)。这些可在目标设备上用于测量所有可用 KEM 和签名算法的性能。
## OQS 演示
[`oqs-demos`](recipes-support/oqs-demos) 配方为 PQC/Hybrid TLS 和 VPN 场景提供了即用型演示配置:
- *`设备证书`*:[`device-certs`](recipes-support/oqs-demos/files/device-certs.sh) 脚本及 systemd 单元,用于生成由内置 CA 签名的设备证书(经典/PQC)。
- *`Nginx`*:端口 `443`|`444`|`445` 上的经典、混合和纯 PQC TLS 服务器配置
- *`OpenVPN`*:端口 `1194`|`1195`|`1196` 上的经典、混合和纯 PQC 隧道服务器配置
- *`Mosquitto`*:端口 `8883`|`8884`|`8885` 上的经典、混合和纯 PQC TLS MQTT 代理配置
- *`主机名设置`*:启动时根据 MAC 地址自动设置唯一主机名,确保设备群拥有不同的身份。
- *`TLS 握手基准测试`*:[`tls-handshake-bench`](recipes-support/oqs-demos/files/tls-handshake-bench.sh) 脚本,使用 curl 通过多轮测试来测量 TLS 握手延迟
有关更多演示命令(PQC 签名、Curl、SSH、OpenVPN、MQTT),请参阅 [指南](GUIDES.md)。
### 快速测试
#### 与 Google 的混合 TLS 握手
Google 服务器已支持 `X25519MLKEM768` 混合密钥交换。您可以从目标设备验证其工作状态:
:444`
2. 接受自签名证书警告
3. 点击锁图标 → **Connection is secure** → **Certificate** 以验证连接详情
4. 打开开发者工具 (`F12`) → **Security** 标签页以确认使用的密钥交换:
kas build kas-oqs.yml
```
或使用 [kas-container](https://kas.readthedocs.io/en/latest/userguide/kas-container.html#building-in-a-container)(需要 [Docker](https://docs.docker.com/engine/install/)):
```
KAS_MACHINE= kas-container build kas-oqs.yml
```
例如:
```
KAS_MACHINE=raspberrypi5 kas build kas-oqs.yml
```
或
```
KAS_MACHINE=raspberrypi5 kas-container build kas-oqs.yml
```
## 准备 SD 卡
使用 [bmap-tool](https://github.com/yoctoproject/bmaptool) 将镜像刷入 SD 卡:
```
sudo bmaptool copy \
build/tmp/deploy/images//oqs-demo-image-.rootfs-.wic.bz2 \
/dev/mmcblk0
```
## 使用 Qemu 模拟
为 `qemux86-64` 构建:
```
KAS_MACHINE=qemux86-64 kas build kas-oqs.yml
```
运行:
```
KAS_MACHINE=qemux86-64 kas shell kas-oqs.yml -c 'runqemu kvm serialstdio nographic qemuparams="-m 1024"'
```
## 已测试机器
| 机器 | BSP 层 | CPU | 核心 | 架构 | PQC 优化 |
|---------|-----------|-----|------|------|:----------------:|
| `qemux86-64` | [poky](https://git.yoctoproject.org/poky/log/?h=scarthgap) | Generic x86-64 | core2 | x86_64 | 是 |
| `beaglebone-yocto` | [poky](https://git.yoctoproject.org/poky/log/?h=scarthgap) | TI AM335x | Cortex-A8 | ARMv7 | 否 |
| `raspberrypi5` | [meta-raspberrypi](https://github.com/agherzan/meta-raspberrypi/tree/scarthgap) | BCM2712 | Cortex-A76 | AArch64 | 是 |
| `raspberrypi4-64` | [meta-raspberrypi](https://github.com/agherzan/meta-raspberrypi/tree/scarthgap) | BCM2711 | Cortex-A72 | AArch64 | 是 |
| `stm32mp157f-dk2` | [meta-stm32mp15x](https://github.com/embetrix/meta-stm32mp15x/tree/scarthgap) | STM32MP157F | Cortex-A7 | ARMv7 | 否 |
| `imx8mq-phanbell` | [meta-coral-ai](https://github.com/embetrix/meta-coral-ai/tree/scarthgap) | NXP i.MX 8M Quad | Cortex-A53 | AArch64 | 是 |
| `wandboard` | [meta-freescale-3rdparty](https://github.com/Freescale/meta-freescale-3rdparty/tree/scarthgap) | NXP i.MX 6 | Cortex-A9 | ARMv7 | 否 |
## 层依赖
此层依赖于:
- [`meta-openembedded`](https://github.com/openembedded/meta-openembedded/tree/scarthgap)(`meta-oe`、`meta-python`、`meta-networking`、`meta-webserver`)
- [`meta-clang`](https://github.com/kraj/meta-clang/tree/scarthgap)(clang 工具链)
- [`meta-lts-mixins`](https://git.yoctoproject.org/meta-lts-mixins/log/?h=scarthgap/rust)(用于 scarthgap 的较新 Rust 工具链)
root@raspberrypi5-c8-bf-64:~# curl -v https://google.com * Host google.com:443 was resolved. * IPv4: 142.250.201.78 * Trying 142.250.201.78:443... * Connected to google.com (142.250.201.78) port 443 * ALPN: curl offers http/1.1 * TLSv1.3 (OUT), TLS handshake, Client hello (1): * CAfile: /etc/ssl/certs/ca-certificates.crt * CApath: none * TLSv1.3 (IN), TLS handshake, Server hello (2): * TLSv1.3 (IN), TLS handshake, Encrypted Extensions (8): * TLSv1.3 (IN), TLS handshake, Certificate (11): * TLSv1.3 (IN), TLS handshake, CERT verify (15): * TLSv1.3 (IN), TLS handshake, Finished (20): * TLSv1.3 (OUT), TLS change cipher, Change cipher spec (1): * TLSv1.3 (OUT), TLS handshake, Finished (20): * SSL connection using TLSv1.3 / TLS_AES_256_GCM_SHA384 / X25519MLKEM768 / id-ecPublicKey * ALPN: server accepted http/1.1 * Server certificate: * subject: CN=*.google.com * start date: Feb 2 08:36:42 2026 GMT * expire date: Apr 27 08:36:41 2026 GMT * subjectAltName: host "google.com" matched cert's "google.com" * issuer: C=US; O=Google Trust Services; CN=WE2 * SSL certificate verify ok. * Certificate level 0: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA256 * Certificate level 1: Public key type EC/prime256v1 (256/128 Bits/secBits), signed using ecdsa-with-SHA384 * Certificate level 2: Public key type EC/secp384r1 (384/192 Bits/secBits), signed using ecdsa-with-SHA384 * using HTTP/1.x > GET / HTTP/1.1 > Host: google.com > User-Agent: curl/8.7.1 > Accept: */*#### 使用 Chrome 浏览器进行混合 TLS Chrome 原生支持 `X25519MLKEM768` 混合密钥交换。您可以从浏览器连接到目标设备的 Nginx 混合 TLS 服务器: 1. 打开网址:`https://

标签:Cryptography, Cybersecurity, Embedded Security, Layer, liboqs, Meta-layer, NIST, OpenEmbedded, Open Quantum Safe, OpenSSL, PQC, Yocto, 可视化界面, 后量子密码学, 密码学, 嵌入式Linux, 手动系统调用, 抗量子算法, 日志审计, 物联网安全, 网络安全, 逆向工具, 量子安全, 量子计算, 隐私保护