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, 低功耗设备, 加密通信, 后量子密码学, 固件开发, 客户端加密, 密钥交换, 嵌入式安全, 嵌入式开发, 形式化验证, 微控制器, 抗量子加密, 物联网, 物联网协议, 硬件安全, 端到端加密, 网络安全, 边缘计算, 隐私保护