shawmoonazad/RL-driven-Hybrid-PQC-TLS-Negotiation
GitHub: shawmoonazad/RL-driven-Hybrid-PQC-TLS-Negotiation
该项目利用离线强化学习在混合后量子 TLS 握手中实现密码策略的自适应选择,以在满足安全约束的前提下最小化握手延迟。
Stars: 1 | Forks: 0
# 用于混合 PQC-TLS 协议选择的离线 RL
这是一个将**离线强化学习**应用于混合后量子 TLS 握手中自适应密码策略选择的研究项目代码库。基于真实的握手测量数据训练了五种离线 RL 算法,并与基于规则的基线进行了评估对比。
## 项目功能
在 TLS 握手阶段,智能体会根据观测到的网络和密码学时间特征,从 **12 种密码学配置**(四种策略模式 × 三种 NIST 安全级别)中选择一种。目标是在遵守安全约束(无低于最低级别的纯经典回退)的前提下最小化延迟。
**策略模式:** `REQUIRE_HYBRID` · `PQC_ONLY` · `ALLOW_FALLBACK` · `CLASSICAL_ONLY`
**NIST 安全级别:** 1 · 3 · 5
**状态空间:** 15 个特征(RTT、密钥生成/封装/验证时间、传输开销)
## 算法
| 算法 | 描述 |
|-----------|-------------|
| **BC** | Behavioral Cloning(行为克隆)— 监督模仿基线 |
| **CQL** | Conservative Q-Learning(保守 Q 学习)(Kumar et al., 2020) |
| **IQL** | Implicit Q-Learning(隐式 Q 学习)(Kostrikov et al., 2021) |
| **BCQ** | Batch-Constrained Q-Learning(批量约束 Q 学习)(Fujimoto et al., 2019) |
| **AWAC** | Advantage Weighted Actor-Critic(优势加权 Actor-Critic)(Nair et al., 2020) |
所有模型均使用共享的 MLP 主干(2 × 256 隐藏单元,ReLU),并在离散的 12 动作空间上运行。
## 项目结构
```
hybrid_pqc_tls/ # Main package
├── rl_config.py # Action space, state space, reward config, hyperparameters
├── rl_models.py # PyTorch implementations of all 5 algorithms
├── rl_train.py # Training pipeline
├── rl_offline_dataset.py # Base dataset builder
├── rl_dataset_improved.py # Improved dataset (epsilon=0.3)
├── rl_dataset_improved_v2.py # Diverse dataset (epsilon=0.6, min 2% per action)
├── rl_evaluate.py # Evaluation v1
├── rl_evaluate_v2.py # Evaluation v2 — RL vs Rule-Based comparison
├── rl_inference.py # Single-model inference
├── rl_inference_multi.py # Multi-model inference (deployment)
├── rl_env.py # Gymnasium-compatible environment wrapper
├── generate_paper_figures.py # Publication figure generation
│
├── config.py # TLS/crypto configuration
├── policy.py # Cryptographic policy logic
├── primitives.py # Crypto primitives
├── protocol.py # TLS protocol simulation
└── session.py # Session management
run_rl_pipeline.py # Main pipeline entry point (place in project root)
run_pipeline_v2.py # Pipeline v2 (diverse dataset variant)
run_action_masking_eval.py # Inference-time action masking experiment
```
## 环境设置
```
pip install torch numpy pandas matplotlib scikit-learn gymnasium cryptography stable-baselines3
```
推荐使用 Python 3.9+ 版本。
## 用法
### 运行完整流水线
```
# 默认(100 epochs)
python run_rl_pipeline.py
# 自定义选项
python run_rl_pipeline.py --data-path path/to/handshake_raw.csv --epochs 200
# 如果已完成则跳过步骤
python run_rl_pipeline.py --skip-dataset # reuse existing dataset
python run_rl_pipeline.py --skip-training # reuse existing models
```
### 运行多样化数据集变体
```
python run_pipeline_v2.py
```
### 运行动作掩码评估(无需重新训练)
```
python run_action_masking_eval.py
```
## 数据
流水线预期的原始 TLS 握手测量数据位于:
```
results/eval_grid/handshake_raw.csv
```
数据集构建器会对约 10,000 次转换进行采样,支持配置探索 epsilon 和最小动作覆盖率,随后将结果保存至:
```
results/rl/offline_rl_dataset_v2.npz
```
## 输出结果
运行完成后,结果将写入:
```
results/rl/
├── models/ # Trained model checkpoints (.pt)
├── evaluation/ # CSV comparison tables
│ ├── action_masking/ # Masked vs unmasked results
│ └── latex/ # LaTeX-ready tables
└── figures/ # PNG plots
```
## 关键超参数
| 参数 | 默认值 |
|-----------|---------|
| 隐藏层维度 | 256 × 256 |
| Batch size | 256 |
| Learning rate | 3e-4 |
| 折扣因子 γ | 0.99 |
| CQL α | 1.0 |
| IQL τ (expectile) | 0.7 |
| BCQ threshold | 0.3 |
| AWAC λ | 1.0 |
| 最低可接受安全级别 | 3 |
## 奖励函数
奖励依赖于 RTT,并编码了安全优先级层级:
```
R = base_reward
− α(RTT) × latency # RTT-scaled latency penalty
− β × wire_overhead_KB # Wire cost penalty
+ γ(RTT) × security_level # RTT-scaled security bonus
+ mode_bonus # REQUIRE_HYBRID: +3.0, PQC_ONLY: +1.5,
# ALLOW_FALLBACK: −1.0, CLASSICAL_ONLY: −15.0
− violation_penalty # −5.0 if level < 3
```
标签:Apex, PyTorch, TLS协议, 凭据扫描, 后量子密码学, 密码学, 手动系统调用, 机器学习, 离线强化学习, 逆向工具