moneeb07/sca_ASCON128
GitHub: moneeb07/sca_ASCON128
针对 NIST 轻量级密码标准 ASCON-128 的完整侧信道攻击流水线,通过模拟 ARM 功耗轨迹并结合一维 CNN 实现密钥字节恢复。
Stars: 0 | Forks: 0
# ASCON-128 侧信道分析
针对 ASCON-128 认证密码的完整功耗分析攻击流水线。该项目使用 Rainbow 框架模拟 ARM Cortex-M3 上的 ASCON 二进制文件,收集基于汉明重量(Hamming Weight)泄漏模型的模拟功耗轨迹,并训练一维 CNN 以恢复密钥。
## 概述
| 阶段 | 描述 |
|-------|-------------|
| 1 | 将 ASCON-128 参考的 C 语言源码编译为 ARM Cortex-M3 ELF 文件 |
| 2 | 通过 Rainbow/Unicorn 模拟 P8 置换并记录 HW 泄漏 |
| 3 | 在轨迹上训练一维 CNN(固定密钥和可变密钥场景) |
| 4 | 评估密钥排名——模型能够淘汰 256 个候选值中的多少个 |
泄漏模型是基于 CPU 寄存器值的**汉明重量(Hamming Weight)**:功耗 ∝ popcount(register)。该攻击的目标是 P8 置换,因为它是 ASCON 初始化期间调用的第一个置换,此时 320 位的状态直接编码了密钥。
## 仓库结构
```
ascon128_lab/
├── src/
│ ├── aead.c # ASCON-128a encrypt/decrypt (NIST ref impl)
│ └── printstate.c # Debug state printer
├── include/ # ASCON headers (api.h, ascon.h, permutations.h, …)
├── ascon128.elf # Pre-built ARM Cortex-M3 ELF (Thumb, -O2)
├── generate_traces.py # Phase 2 — emulate & collect HDF5 trace datasets
├── attack_fixed_key.py # Phase 3 — train/attack with a single fixed key
├── attack_variable_key.py # Phase 3 — train/attack with randomised keys
└── traces/ # Generated datasets, models, and plots (git-ignored)
├── fixed_key_traces.h5
├── variable_key_traces.h5
├── model_fixed_key.h5
├── model_variable_key.h5
├── *.png # Trace visualisations
└── results/ # Training curves and key-rank plots
```
## 前置条件
### 系统软件包
```
sudo apt install git gcc arm-none-eabi-gcc arm-none-eabi-binutils
```
### Python 环境(推荐使用 Python 3.12)
```
python3 -m venv ~/rainbow_env
source ~/rainbow_env/bin/activate
pip install donjon-rainbow==2.0 tensorflow numpy h5py matplotlib scikit-learn tqdm unicorn
```
已测试版本:Rainbow 2.0,TensorFlow 2.21.0,Unicorn 2.1.4。
## 步骤 1 — 为 ARM 编译 ASCON-128(可选 — 已包含 ELF 文件)
预构建的 `ascon128.elf` 使用 Thumb 编码面向 Cortex-M3。如需从源码重新构建:
```
arm-none-eabi-gcc \
-mcpu=cortex-m3 -mthumb -O2 \
-I include \
-c src/aead.c -o aead.o
arm-none-eabi-gcc \
-mcpu=cortex-m3 -mthumb -O2 \
-I include \
-c src/printstate.c -o printstate.o
arm-none-eabi-ld \
-Ttext=0x00008000 \
aead.o printstate.o \
-o ascon128.elf
```
验证:
```
file ascon128.elf
# → ELF 32-bit LSB 可执行文件, ARM, EABI5 …
arm-none-eabi-objdump -d ascon128.elf | head -30
```
## 步骤 2 — 生成功耗轨迹
激活虚拟环境,然后运行:
```
source ~/rainbow_env/bin/activate
python generate_traces.py
```
这将在 `traces/` 目录下生成两个 HDF5 数据集:
| 数据集 | 轨迹数 | 划分 | 密钥 |
|---------|--------|-------|-----|
| `fixed_key_traces.h5` | 2 500 | 2 000 用于 Profiling / 500 用于攻击 | 每条轨迹使用相同的密钥(`00…0F`) |
| `variable_key_traces.h5` | 1 000 | 800 用于 Profiling / 200 用于攻击 | 每条轨迹使用新的随机密钥 |
每条轨迹包含 859 个采样点(每条模拟指令对应一个 HW 值)。标签为 `HW(key[0] XOR nonce[0])`,范围是 0–8。
## 步骤 3 — 训练与攻击
### 固定密钥场景
```
python attack_fixed_key.py
```
模型在使用同一密钥的 2 000 条轨迹上进行 Profiling,然后针对 500 条攻击轨迹进行评估。密钥排名分析会遍历所有 256 个候选密钥字节,并根据累积对数概率对它们进行排名。
### 可变密钥场景
```
python attack_variable_key.py
```
模型在 800 条轨迹上进行训练,每条轨迹具有不同的随机密钥,然后在 200 条训练期间从未见过其密钥的轨迹上进行攻击。如果存在 `model_fixed_key.h5`,还将生成对比图(`results/comparison_key_rank.png`)。
## CNN 架构
```
Input (859, 1)
Conv1D(32, k=11) → BN → MaxPool(2)
Conv1D(64, k=7) → BN → MaxPool(2)
Conv1D(128, k=5) → BN → MaxPool(2)
Flatten
Dense(256) → Dropout(0.4)
Dense(128) → Dropout(0.3)
Dense(9, softmax) ← 9 classes for HW ∈ {0,…,8}
```
优化器:Adam (lr=1e-3)。回调函数:EarlyStopping (patience=10) + ReduceLROnPlateau。
## 结果
| 场景 | 攻击准确率 | 最终密钥排名(共 256 个) |
|----------|----------------|------------------------|
| 固定密钥 | 26.2 % | 13 |
| 可变密钥 | 23.0 % | 19 |
随机猜测的基线准确率是 11.1%(在 9 个 HW 类别上均匀分布)。两个模型都超过了这一基线,证实捕获了真实的泄漏。密钥排名 13/256 意味着淘汰了 243 个错误的候选值。要达到 0 排名(完全恢复),大约需要 10 倍以上的轨迹。
## 对策
`ascon-c` 仓库提供了抗 SCA(侧信道攻击)强化的变体。抵御功耗分析的主要防御措施包括:
- **掩码**——用新的随机掩码对所有中间值进行异或操作,从而使 HW 泄漏与密钥解除关联。
- **隐藏**——插入虚拟操作或打乱执行顺序以使轨迹错位。
- **常数时间标签比较**——此实现中已包含(`result |= c[i] ^ t[i]`)。
## 参考文献
- [ASCON 规范 (NIST LWC 获胜者)](https://ascon.iaik.tugraz.at/)
- [ascon/ascon-c — 官方 C 语言参考实现](https://github.com/ascon/ascon-c)
- [donjon/rainbow — ARM 侧信道模拟器](https://github.com/Ledger-Donjon/rainbow)
- Brier, Clavier, Olivier — *Correlation Power Analysis with a Leakage Model* (CHES 2004)
- Maghrebi et al. — *Breaking Cryptographic Implementations Using Deep Learning Techniques* (SPACE 2016)
标签:1-D CNN, AI安全, ARM Cortex-M3, ASCON-128, Chat Copilot, ELF, HDF5, NIST标准, Python, Rainbow框架, Unicorn模拟器, 侧信道攻击, 功耗分析, 卷积神经网络, 密码学, 密钥恢复, 嵌入式安全, 手动系统调用, 无后门, 汉明重量, 深度学习, 物联网安全, 硬件安全, 轻量级密码, 逆向工具