aethyrai/esp32-awp-edge

GitHub: aethyrai/esp32-awp-edge

面向 ESP32-S3 的后量子加密 IoT 边缘节点固件,在廉价微控制器上实现 ML-KEM-768 密钥交换与端到端加密通信,解决嵌入式设备应对量子计算威胁的长期数据安全问题。

Stars: 16 | Forks: 2

# esp32-awp-edge 面向 ESP32-S3 的后量子加密 IoT 边缘节点。使用 [AethyrWire Protocol](https://aethyr.cloud) (AWP),支持 ML-KEM-768 密钥交换、BLAKE3 帧完整性和 XChaCha20-Poly1305 负载加密。 **在价值 5 美元的芯片上,从冷启动到建立后量子加密会话仅需 2.1 秒。** ## 基准测试 所有数据均在 ESP32-S3-WROOM-1 @ 240MHz 上测量,运行 50 次迭代,报告平均值和标准差。 | 操作 | 平均值 | 标准差 | |---|---|---| | ML-KEM-768 密钥生成 | 9,052us | 164us | | ML-KEM-768 封装 | 10,070us | 11us | | ML-KEM-768 解封装 | 12,197us | 11us | | XChaCha20-Poly1305 加密 | 243us | 46us | | BLAKE3 (1KB) | 255us | 102us | | BLAKE3 KDF | 49us | 60us | | AWP 帧编码 + 解码 | 363us | 95us | | 指标 | 值 | |---|---| | 冷启动到 PQC 会话 | 2.1 秒 | | 固件大小 | 833KB | | 空闲堆内存 (运行时) | 157KB | ## 安全性 | 层 | 算法 | 实现 | |---|---|---| | 密钥交换 | ML-KEM-768 | [mlkem-native](https://github.com/pq-code-package/mlkem-native) v1.0.0 (形式化验证) | | 帧完整性 | BLAKE3-256 | [官方 C 语言实现](https://github.com/BLAKE3-team/BLAKE3) (可移植) | | 负载加密 | XChaCha20-Poly1305 | mbedTLS | | 密钥派生 | BLAKE3 | — | | Nonce 持久化 | ESP32 NVS flash | — | ### 加固 - **无明文回退。** 若无后量子密钥交换,握手将中止。 - **恒定时间密码运算。** 缓解了时序侧信道攻击。 - **防止 Nonce 重用。** 计数器持久化至 flash,可抵御异常断电。 - **双向认证。** 在会话建立时验证会话密钥的持有权。 - **启动自检。** 每次启动时运行 14 项密码学测试。若失败则固件停止运行。 ### 验证 - 每次启动时运行 14 项自检 - 跨平台互操作性经过逐字节验证 - 410,000 次 fuzz 迭代 (AddressSanitizer + UBSan),零崩溃 - 100,000 次单比特翻转测试,100% 检出率 ## 快速入门 前置条件:ESP32-S3 开发板、USB 数据线、[ESP-IDF v5.4](https://docs.espressif.com/projects/esp-idf/en/v5.4/esp32s3/get-started/index.html)。 ``` git clone https://github.com/aethyrai/esp32-awp-edge cd esp32-awp-edge # 配置 WiFi 和 upstream 节点 idf.py menuconfig # → AWP Edge Node 配置 # WiFi SSID / 密码 # Upstream 主机 IP 和端口 # 构建并烧录 idf.py build idf.py -p /dev/ttyUSB0 flash monitor ``` 启动时的串口输出: ``` Crypto Self-Test Suite [1] BLAKE3: empty input... PASS [2] BLAKE3: 251 sequential bytes... PASS [3] BLAKE3: derive_key (KDF mode)... PASS [4] XChaCha20-Poly1305: encrypt/decrypt round-trip...PASS [5] XChaCha20-Poly1305: tamper detection... PASS [6] XChaCha20-Poly1305: wrong key rejection... PASS [7] XChaCha20-Poly1305: nonce uniqueness... PASS [8] ML-KEM-768: keygen + encap/decap round-trip... PASS [9] ML-KEM-768: wrong secret key rejection... PASS [10] INTEROP: BLAKE3 KDF matches Python... PASS [11] INTEROP: decrypt Python-produced ciphertext... PASS [12] Replay window: accept / duplicate / too-old... PASS [13] AWP: frame encode/decode round-trip... PASS [14] AWP: BLAKE3 checksum tamper detection... PASS ALL 14 TESTS PASSED (261ms) ML-KEM-768 keypair ready WiFi connected TCP connected to upstream PQC session established ``` ## 项目结构 ``` esp32-awp-edge/ ├── main/ │ ├── awp_protocol.{c,h} Frame encoder/decoder │ ├── awp_stream.{c,h} TCP stream reassembly │ ├── awp_edge_node.{c,h} Edge node lifecycle │ ├── awp_crypto.{c,h} Post-quantum crypto │ ├── sensor_hub.{c,h} Pluggable sensor drivers │ ├── crypto_test.{c,h} Boot self-tests │ └── main.c Entry point ├── components/ │ ├── blake3/ BLAKE3 official C (portable, no SIMD) │ └── mlkem768/ mlkem-native v1.0.0 (formally verified ML-KEM-768) ├── test/ │ └── fuzz_awp.c Frame decoder fuzzer ├── jetson/ │ ├── setup-mesh-ap.sh Create dedicated WiFi AP on Jetson │ ├── stop-mesh-ap.sh Stop mesh AP │ └── aios-node.service systemd service for AWP node ├── demo/ │ └── run_demo.py Scripted 2-minute demo └── sdkconfig.defaults Build defaults ``` ## 栈使用 ML-KEM 操作的最小安全任务栈大小:**24KB**。 ## Fuzz 测试 在主机(非 ESP32)上编译并运行: ``` cc -fsanitize=address,undefined -g -O1 \ -Itest -Imain -Icomponents/blake3 \ test/fuzz_awp.c main/awp_protocol.c main/awp_stream.c \ components/blake3/blake3.c components/blake3/blake3_portable.c \ components/blake3/blake3_dispatch.c \ -DBLAKE3_NO_SSE2 -DBLAKE3_NO_SSE41 -DBLAKE3_NO_AVX2 \ -DBLAKE3_NO_AVX512 -DBLAKE3_NO_NEON \ -o test/fuzz_awp -Wno-format -lm && ./test/fuzz_awp ``` ## 硬件 已在以下设备上测试: - **ESP32-S3-WROOM-1** (QFN56, rev v0.2) — WiFi, BLE, 8MB PSRAM - **Jetson Orin Nano Super** — 上游 NODE,专用 2.4GHz WiFi AP 应兼容任何支持 ESP-IDF v5.4 的 ESP32-S3 开发板。 ## 连接目标 此固件是 [Aethyr](https://aethyr.cloud) 分布式代理网格的边缘节点。ESP32 负责传感边缘层:传感器、执行器和加密传输。智能部分则位于上游。 ## 许可证 Apache 2.0
标签:BLAKE3, CISA项目, ESP32-S3, ML-KEM-768, XChaCha20-Poly1305, 低功耗设备, 加密通信, 后量子密码学, 固件开发, 客户端加密, 密钥交换, 嵌入式安全, 嵌入式开发, 形式化验证, 微控制器, 抗量子加密, 物联网, 物联网协议, 硬件安全, 端到端加密, 网络安全, 边缘计算, 隐私保护