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模拟器, 侧信道攻击, 功耗分析, 卷积神经网络, 密码学, 密钥恢复, 嵌入式安全, 手动系统调用, 无后门, 汉明重量, 深度学习, 物联网安全, 硬件安全, 轻量级密码, 逆向工具