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` 混合密钥交换。您可以从目标设备验证其工作状态:
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://:444` 2. 接受自签名证书警告 3. 点击锁图标 → **Connection is secure** → **Certificate** 以验证连接详情 4. 打开开发者工具 (`F12`) → **Security** 标签页以确认使用的密钥交换:

## 构建 使用 [kas](https://kas.readthedocs.io/en/latest/userguide/getting-started.html): ``` KAS_MACHINE= 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 工具链)
标签:Cryptography, Cybersecurity, Embedded Security, Layer, liboqs, Meta-layer, NIST, OpenEmbedded, Open Quantum Safe, OpenSSL, PQC, Yocto, 可视化界面, 后量子密码学, 密码学, 嵌入式Linux, 手动系统调用, 抗量子算法, 日志审计, 物联网安全, 网络安全, 逆向工具, 量子安全, 量子计算, 隐私保护