# 射频指纹合谋仿冒攻击开源代码 **Repository Path**: lingbandeng/CollusionAttack-RFF ## Basic Information - **Project Name**: 射频指纹合谋仿冒攻击开源代码 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 22 - **Forks**: 17 - **Created**: 2026-03-17 - **Last Updated**: 2026-03-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # RFFI 无线设备射频指纹识别与合谋攻击仿真框架 ## 项目简介 本项目围绕**无线设备射频指纹识别(RFFI, Radio Frequency Fingerprint Identification)**及其安全性展开研究,实现了从仿真数据生成、识别网络训练到合谋攻击的完整实验流水线。 项目基于 IEEE 802.11(Wi-Fi)前导码(L-STF + L-LTF,共320个采样点),通过提取发射机硬件缺陷(IQ不平衡)产生的射频指纹,训练深度学习分类器实现设备身份识别。在此基础上,进一步研究攻击者(Mallory)如何通过生成对抗信号,绕过 RFFI 系统的身份验证机制(**合谋攻击 / 模仿攻击**)。 --- ## 项目结构 ``` ├── Data_Generation/ # 仿真数据生成模块(MATLAB) │ ├── calculateCLPS.m # CLPS 特征提取 │ ├── calculateDolos.m # DoLoS 特征提取 │ ├── create_standard_channel_model.m # TGn 标准信道模型构建 │ ├── generate_database.m # 数据集生成主脚本 │ └── generate_sample_baseband.m # 单样本基带信号生成 │ ├── RFFI/ # 射频指纹识别网络(Python/PyTorch) │ ├── resnet_model.py # ResNet 分类器 │ ├── resnet_train.py # ResNet 训练脚本 │ ├── resnet_test.py # ResNet 测试脚本 │ ├── grnet_model.py # GRNet 分类器 │ ├── grnet_train.py # GRNet 训练脚本 │ ├── grnet_test.py # GRNet 测试脚本 │ └── ls_equalization.py # LS 信道均衡 + CFO 补偿 │ └── Impersonation_Attack/ # 合谋攻击模块(Python/PyTorch) ├── CHANNEL_CONFIG.py # 信道场景配置 ├── channel_sim.py # PyTorch 可微信道仿真器(TGn + AWGN) ├── dac_module.py # 可微 DAC 量化模块(STE) ├── robust_feature.py # 信道鲁棒特征提取(CLPS / DoLoS) ├── ls_equalization.py # 接收端 DSP(LS 均衡) ├── VAE_model.py # VAE / AE 生成网络 ├── ResGen_model.py # 残差生成网络 ├── Unet_model.py # U-Net 生成网络 ├── grnet_model.py # GRNet 目标分类器 ├── resnet_model.py # ResNet 目标分类器 ├── attack_DNN_train.py # 针对深度学习方法的攻击训练 └── attack_feature_train.py # 针对特征提取方法的攻击训练 ``` --- ## 系统流程 ``` [Data_Generation] MATLAB仿真 → IQ不平衡建模 → TGn信道 + AWGN → CLPS/DoLoS特征提取 → 数据集 [RFFI] 原始IQ数据 → LS均衡 + CFO补偿 → ResNet / GRNet → 设备分类 [Impersonation_Attack] Mallory基带信号 → 生成网络(AE/VAE/ResGen/UNet) ↓ 可微DAC量化 ↓ TGn + AWGN 信道仿真 ↓ LS均衡 / 信道鲁棒特征提取 ↓ 目标RFFI分类器(冻结) ↓ 对抗损失 + 结构损失 + 特征中心损失 → 攻击网络收敛 → 生成可欺骗分类器的伪造射频信号 ``` --- ## 模块说明 ### 1 仿真数据生成模块(MATLAB) 位于 `Data_Generation/`,基于 MATLAB 通信工具箱,仿真完整的 Wi-Fi 物理层发射链路。 **主要功能:** - **`generate_database.m`**:数据集生成主脚本,支持11个发射设备(不同 IQ 不平衡参数)和1个 Mallory 设备,支持并行加速(`parfor`),输出训练/测试/攻击三类数据集。 - **`generate_sample_baseband.m`**:单样本生成流水线,依次执行: 1. 从 ROM 十六进制码生成标准 802.11 前导码(STF 160点 + LTF 160点) 2. 施加发射机 IQ 不平衡(幅度 + 相位) 3. 经过 TGn 多径信道 + AWGN 信道 4. Z-Score 归一化 5. 提取 CLPS 或 DoLoS 特征 - **`create_standard_channel_model.m`**:构建标准化 TGn 信道,支持4种场景: | 场景标识 | 描述 | TGn模型 | SNR | |---|---|---|---| | `indoor_simple` | 简单室内(住宅/小房间) | Model-B | 20 dB | | `indoor_moderate` | 中等室内(小办公室) | Model-C | 18 dB | | `indoor_complex` | 复杂室内(办公室) | Model-D | 15 dB | | `high_multipath` | 强多径(大空间/准室外) | Model-F | 10 dB | - **`calculateCLPS.m`**:提取循环平稳功率谱(CLPS)特征——对接收信号计算自相关函数,再做 FFT 得到功率谱,取对数后去均值。 - **`calculateDolos.m`**:提取 DoLoS 特征——对 STF 和 LTF 片段进行 CFO 补偿、平均去噪、FFT,在12个公共子载波上计算对数功率差,消除信道影响保留硬件指纹。 --- ### 2 RFFI 识别网络训练 位于 `RFFI/`,提供两种深度学习识别网络,以原始 IQ 信号为输入,经过 LS 均衡预处理后进行设备分类。 #### 2.1 接收端信号预处理(`ls_equalization.py`) `SignalProcessor` 类实现完整的接收端 DSP 流水线: 1. **CFO 估计与补偿**:利用 L-STF 16点周期结构,通过相邻符号相关估计载波频偏,并在时域补偿相位旋转。 2. **LS 信道均衡**:以第二个 LTF 做信道估计(`H = Y/X`),采用正则化迫零均衡(`W = H* / (|H|² + λ)`)对 STF 和 LTF 各段做分段频域均衡。 3. **Z-Score 归一化**:消除幅度尺度差异。 #### 2.2 ResNet 分类器(`resnet_model.py`) 基于标准 ResNet 架构,输入双通道特征图(I/Q 通道),通过四个残差阶段和全局平均池化输出设备类别。 - 输入格式:`(B, 2, 1, signal_length)`(CLPS/DoLoS 特征) - 训练脚本:`resnet_train.py` - 测试脚本:`resnet_test.py`(含混淆矩阵可视化) #### 2.3 GRNet 分类器(`grnet_model.py`) 专为短前导码(320点)设计的分组残差网络(Grouped Residual Network): - **输入切片**:将 `(B, 2, 320)` 重排为 `(B, 20, 32, 1)`,即 M=10 个切片,每切片长 L=32,保留 I/Q 二维结构。 - **分组卷积**:每个残差块内使用分组卷积独立处理各切片,降低参数量。 - **通道融合(RC)**:每个残差块后接 1×1 全连接卷积,在切片间交换信息,实现局部细粒度特征与全局交互的结合。 - 训练脚本:`grnet_train.py` - 测试脚本:`grnet_test.py` --- ### 3 合谋攻击实现 位于 `Impersonation_Attack/`,实现端到端可微的射频指纹模仿攻击框架。攻击者(Mallory)训练一个生成网络,将自身基带信号转化为可被目标 RFFI 系统误认为合法设备的伪造信号。 #### 3.1 信道仿真模块(`channel_sim.py`) `ChannelSimulator` 整合 TGn 多径信道与 AWGN 信道,全程在 PyTorch 张量上运算,支持梯度传播: - **`WlanTGnChannelTorch`**:支持 Model-A 至 Model-F,实现随机信道系数生成、多普勒效应模拟和多径叠加。 - **`AWGNChannel`**:按目标 SNR 添加复高斯噪声。 - 信道场景由 `CHANNEL_CONFIG.py` 统一管理(`in1`/`in2`/`in3`/`out`)。 #### 3.2 可微 DAC 模块(`dac_module.py`) `DACModule` 使用**直通估计器(STE, Straight-Through Estimator)**实现可微量化: - **前向**:对信号执行均匀量化(模拟 DAC/ADC 有限精度,默认12位)。 - **反向**:梯度直接通过量化操作,保证端到端可训练。 #### 3.3 信道鲁棒增强模块(`robust_feature.py`) 完整的接收端特征提取流水线,使生成信号的特征分布向目标设备靠拢: **3.3.1 特征提取** - **CLPS**:`extract_clps()` 在 PyTorch 上实现 FFT 自相关 → 功率谱 → 对数归一化,输出 `(B, 1, 1, signal_length)`。 - **DoLoS**:`extract_dolos()` 实现 CFO 补偿 → STF/LTF 均值去噪 → 频域子载波功率差,输出 `(B, 1, 1, 12)`。 **3.3.2 LS 均衡模块** 复用 `RFFI/ls_equalization.py` 中的 `SignalProcessor`,在攻击训练中模拟接收端的 CFO 补偿和信道均衡过程。 `RobustFeatureExtractor` 类统一封装完整流水线:信道仿真(可选)→ Z-Score 标准化 → CLPS/DoLoS 特征提取。 #### 3.4 攻击生成网络 提供四种生成网络架构,接口统一(输入 `(B, 2, 1, 320)`,输出 `(B, 2, 1, 320)` 及 VAE 参数): | 网络 | 文件 | 特点 | |---|---|---| | **AE** | `VAE_model.py` | 三层卷积编解码器,确定性重建 | | **VAE** | `VAE_model.py` | 变分自编码器,潜空间正则化,支持 KL 损失 | | **ResGen** | `ResGen_model.py` | 残差扰动生成器,在原始信号基础上叠加可学习扰动 | | **U-Net 1D** | `Unet_model.py` | 编解码器 + 跳跃连接,捕获多尺度时域特征 | #### 3.5 攻击网络训练 ##### 3.5.1 针对特征提取方法(`attack_feature_train.py`) 攻击目标为基于 CLPS/DoLoS 特征的 ResNet 分类器,优化以下联合损失: $$\mathcal{L} = w_\text{recon} \cdot \mathcal{L}_\text{recon} + w_\text{clps} \cdot \mathcal{L}_\text{clps} + w_\text{cls} \cdot \mathcal{L}_\text{cls}$$ - **$\mathcal{L}_\text{recon}$(结构损失)**:余弦相似度损失,保持生成信号与 Mallory 基带信号的波形结构一致性。 - **$\mathcal{L}_\text{clps}$(分布对齐损失)**:MMD 损失 + 均值/标准差对齐,使生成信号的 CLPS 特征分布向目标设备靠拢。 - **$\mathcal{L}_\text{cls}$(分类欺骗损失)**:交叉熵损失,引导分类器将生成信号判定为目标类别。 ##### 3.5.2 针对深度学习方法(`attack_DNN_train.py`) 攻击目标为端到端 GRNet 分类器,优化以下联合损失: $$\mathcal{L} = w_\text{adv} \cdot \mathcal{L}_\text{adv} + w_\text{rec} \cdot \mathcal{L}_\text{rec} + w_\text{feat} \cdot \mathcal{L}_\text{feat}$$ - **$\mathcal{L}_\text{adv}$(对抗损失)**:交叉熵损失,引导 GRNet 输出目标类别。 - **$\mathcal{L}_\text{rec}$(结构损失)**:余弦相似度损失,约束生成信号的波形合理性。 - **$\mathcal{L}_\text{feat}$(特征中心损失)**:MSE 损失,拉近生成信号的 GRNet 特征向量与目标设备特征中心之间的距离(目标中心由目标设备真实数据预计算得到)。 两个训练脚本均支持以下**消融实验开关**: ```python USE_QUANTIZATION = True # 是否启用可微 DAC 量化 USE_CHANNEL_SIM = True # 是否启用 TGn + AWGN 信道仿真 ``` --- ## 环境依赖 **MATLAB 模块(Data_Generation)** - MATLAB R2020b 及以上 - Communications Toolbox(`wlanTGnChannel`、`comm.AWGNChannel`) - WLAN Toolbox **Python 模块(RFFI / Impersonation_Attack)** ```bash pip install torch torchvision numpy scipy scikit-learn matplotlib seaborn tqdm ``` | 依赖 | 说明 | |---|---| | Python ≥ 3.8 | | | PyTorch ≥ 1.12 | 支持 `torch.fft`、复数张量 | | NumPy | 数值计算 | | SciPy | `.mat` 文件读取 | | scikit-learn | 数据集划分 | | matplotlib / seaborn | 混淆矩阵可视化 | --- ## 快速开始 ### 第一步:生成仿真数据集 在 MATLAB 中运行: ```matlab % 修改 generate_database.m 中的参数 % NumofSample = 10000; % 训练集 % SEED = [51, 100]; % 训练集种子 % scenario_type = 'indoor_simple'; run('Data_Generation/generate_database.m') ``` ### 第二步:训练 RFFI 识别网络 ```bash # 训练 ResNet(基于 CLPS 特征) cd RFFI python resnet_train.py # 训练 GRNet(基于原始 IQ + LS 均衡) python grnet_train.py ``` ### 第三步:测试识别性能 ```bash python resnet_test.py python grnet_test.py ``` ### 第四步:训练攻击网络 ```bash cd Impersonation_Attack # 针对特征提取方法(ResNet + CLPS) python attack_feature_train.py # 针对深度学习方法(GRNet + Raw IQ) python attack_DNN_train.py ``` --- ## 数据格式说明 | 数据类型 | 格式 | 说明 | |---|---|---| | 原始 IQ 数据(txt) | 每样本:Real(320行) + Imag(320行) 顺序写入 | 实测设备数据 | | 仿真特征数据(mat) | `Device_data`,shape `(N, signal_length)` | CLPS/DoLoS 特征 | | Mallory 基带信号(mat) | `Device_data`,shape `(N, 320)` | 攻击者基带 IQ | | 网络输入(张量) | `(B, 2, signal_length)` 或 `(B, 2, 1, signal_length)` | I/Q 双通道 | --- ## 主要参数配置 **信道场景(`CHANNEL_CONFIG.py`)** ```python channel_configs = { 'in1': {'snr_db': 20, 'tgn_model': 'Model-B', 'environment_speed': 1.0}, # 简单室内 'in2': {'snr_db': 18, 'tgn_model': 'Model-C', 'environment_speed': 1.2}, # 中等室内 'in3': {'snr_db': 15, 'tgn_model': 'Model-D', 'environment_speed': 1.5}, # 复杂室内 'out': {'snr_db': 10, 'tgn_model': 'Model-F', 'environment_speed': 3.0}, # 准室外 } ``` **攻击训练损失权重** | 损失项 | 针对特征方法 | 针对DNN方法 | |---|---|---| | 对抗/分类损失 | `cls: 10.0` | `adv: 10.0` | | 结构重建损失 | `recon: 5.0` | `rec: 5.0` | | 特征对齐损失 | `clps: 10.0` | `feat: 10.0` | | KL 散度(VAE) | `kl: 0.001` | `kl: 0.001` | ---