siri423/sentinelai

GitHub: siri423/sentinelai

基于差分隐私训练的信用风险评分 API 系统,在大规模真实金融数据上同时量化隐私、效用与公平性三项指标。

Stars: 0 | Forks: 0

# SentinelAI **具备 DP-SGD 防御机制的隐私保护信用风险评分 API,可抵御成员推理和模型提取攻击。** 基于 30 万零 7 千条真实贷款申请数据进行训练。在 ε=2.0 时实现了**低于 1% 的 AUC 降幅**,同时提供严格的差分隐私保证(ε=2.0, δ=1e-5)。 [![PyTorch](https://img.shields.io/badge/PyTorch-2.0+-EE4C2C?logo=pytorch)](https://pytorch.org/) [![FastAPI](https://img.shields.io/badge/FastAPI-0.110+-009688?logo=fastapi)](https://fastapi.tiangolo.com/) [![Opacus](https://img.shields.io/badge/Opacus-DP--SGD-4A90D9)](https://opacus.ai/) [![Python](https://img.shields.io/badge/Python-3.9+-3776AB?logo=python)](https://python.org/) [![License: MIT](https://img.shields.io/badge/License-MIT-green)](LICENSE) ## 问题背景 通过 API 提供服务的信用评分模型面临三大同时存在的威胁: **威胁 1 — 成员推理攻击。** 攻击者通过查询 API 来确定特定个人的财务记录是否被用于模型训练。这违反了 GDPR 第 22 条和《公平信用报告法》。 **威胁 2 — 模型提取。** 攻击者无需访问训练数据,仅需不到 1 万次 API 查询即可克隆专有模型(Tramèr 等人)。 **威胁 3 — 公平性退化。** 标准的 DP-SGD 防御机制可能会对代表性不足的群体造成不成比例的损害(Bagdasaryan 等人,NeurIPS 2019)。 现有的研究都是孤立地应对这些威胁。SentinelAI 提供了一个统一的 pipeline:DP-SGD 训练、MIA 评估、提取防御、公平性审计以及 API 加固——全部基于大规模真实金融数据运行。 ## 架构 ``` Home Credit Dataset (307K records, 122 features) | v Data Preprocessing <-- SMOTE to 25%, median impute, MinMax scale + Fairness Baseline 165 features after encoding | v DP-SGD Training (Opacus) <-- epsilon in {0.5, 1.0, 2.0, 4.0, 8.0} | v FastAPI Deployment <-- JWT auth + rate limiting + label-only output | /v1/predict | +-------> MIA Simulation (confidence-based RF classifier) | +-------> Model Extraction (KnockoffNets, 10K query budget) | v Evaluation: Privacy x Utility x Fairness ``` **神经网络架构:** MLP 结构为 `Input(165) → 256 (GroupNorm, ReLU, Dropout 0.3) → 128 → 64 → 2 (Softmax)`。使用 GroupNorm 替代 BatchNorm 以兼容 Opacus——因为 BatchNorm 的跨批次统计信息会破坏 DP-SGD 所需的样本级梯度隔离。 ## 结果 ### 三态评估 | 指标 | 正常服务 | 受到攻击 | 启用防御 (ε=2.0) | |--------|---------------|-------------|---------------------| | 模型 AUC-ROC | 0.7430 | 0.7430 | 0.7369 (−0.8%) | | MIA 攻击优势 | — | 0.0049 | 0.0110 | | 提取保真度 (10K) | — | 0.9295 | 0.9087 (仅标签) | | 公平性 AIR (性别) | 1.2636 | 1.2636 | 1.0431 | | 均等化奇偶差异 | 0.1481 | 0.1481 | 0.0523 | | 隐私保证 | 无 | 无 | ε=2.0, δ=1e-5 | ### 关键发现 **大规模应用 DP-SGD 的成本几乎可以忽略不计。** 已发表的文献预测 AUC 会下降 15–20%。我们在所有 epsilon 值下测得的降幅均不到 1%。30.7 万个训练样本吸收了梯度噪声——而以往论文使用的数据集要小得多。 **MIA 攻击优势保持在接近零的水平。** 所有六个模型均低于 0.05 的目标阈值。DP-SGD 在接近零的经验抵抗力之上,又增加了严格的数学保证。 **两种威胁需要两层防御。** 根据 ML-Doctor (2022) 的研究,DP-SGD 实际上会因为平滑决策边界而加剧模型提取。因此,DP-SGD 负责处理 MIA;API 加固负责处理提取。速率限制设为 50 req/hr 后,执行一次 1 万次查询的提取攻击需要耗费 200 多个小时。 **DP 提升了公平性。** 与 Bagdasaryan 等人 (NeurIPS 2019) 的结论相反,DP-SGD 在该金融数据集上将均等化奇偶差异从 0.148 降至 0.052。这是首次在此等规模的真实金融表格数据上同时测量这三项指标。 完整的数值结果:[`results/phase2_results.json`](results/phase2_results.json) **三重权衡 — 隐私 × 效用 × 公平性:** ![三重权衡](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/b6ffdba5c7110845.png) **所有 epsilon 值下的 MIA 攻击优势(越低 = 隐私保护越好):** ![MIA 攻击优势](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/1b44648f7f110851.png) **三态仪表板 — 正常服务 / 受到攻击 / 启用防御:** ![三态仪表板](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/159564c360110857.png) **提取防御 — 有无速率限制 + DP-SGD 的攻击耗时对比:** ![提取防御时间线](https://static.pigsec.cn/wp-content/uploads/repos/2026/06/a42df0002c110904.png) ## 项目结构 ``` sentinelai/ ├── api/ │ ├── __init__.py │ └── main.py # FastAPI: JWT auth, rate limiting, label-only output, PII redaction ├── models/ │ ├── __init__.py │ └── mlp.py # CreditRiskMLP: 165 -> 256 -> 128 -> 64 -> 2 ├── notebooks/ │ └── SentinelAI.ipynb # Full experiment pipeline with all outputs ├── results/ │ ├── phase2_results.json # All experimental metrics │ └── README.md # Describes all generated output files ├── train_baseline.py # Standalone training script (supports --demo flag) ├── requirements.txt ├── .gitignore └── README.md ``` 模型权重、预处理工件和数据集不包含在 repo 中(参见 `.gitignore`)。所有输出均可通过运行 notebook 复现。 ## 快速开始 ### 1. 克隆并安装 ``` git clone https://github.com/siri423/sentinelai.git cd sentinelai # 必须先安装 numpy pip install numpy==1.26.4 pip install -r requirements.txt ``` ### 2. 数据集 **Home Credit Default Risk** — 307,511 条记录,122 个特征,8.1% 的违约率。 从 [Kaggle](https://www.kaggle.com/competitions/home-credit-default-risk/data) 下载。将 `application_train.csv` 放置在 `data/home_credit/` 目录下,或在 notebook 中设置 `DATA_DIR`。 ### 3. 在 Google Colab 中运行(推荐用于完整 pipeline) 打开 `notebooks/SentinelAI.ipynb`。将 runtime 设置为 **T4 GPU**。运行 Cell 1,重启 runtime,然后运行所有剩余的 cell。总运行时间:在 T4 上约为 35 分钟。 ### 4. 仅训练基线模型(本地) ``` # 在合成数据上的快速演示,无需下载 python train_baseline.py --demo # 在真实数据集上 python train_baseline.py --data_dir data/home_credit/ ``` ### 5. 运行 API ``` uvicorn api.main:app --reload --port 8000 # 获取 JWT token curl -X POST http://localhost:8000/token \ -d "username=demo&password=secret" # 进行预测(替换 ) curl -X POST http://localhost:8000/v1/predict \ -H "Authorization: Bearer " \ -H "Content-Type: application/json" \ -d '{"features": [0.5, 0.3, 0.8, ...], "applicant_id": "APP_001"}' # 健康检查(无需 auth) curl http://localhost:8000/health ``` API 仅返回**标签**(`DEFAULT` 或 `NO_DEFAULT`)。原始概率绝对不会暴露。 ## API 防御层 | 层级 | 机制 | 应对威胁 | |-------|-----------|-----------------| | 1 | JWT HS256 身份验证 | 未经授权的访问 | | 2 | 速率限制(每个 IP 50 req/hr) | 模型提取(1 万次查询 = 200 多小时) | | 3 | 仅输出标签 | 置信度分数窃取 | | 4 | DP-SGD 训练 | 成员推理 | | 5 | 日志中的 PII 自动脱敏 | 通过访问日志造成的数据泄露 | | 6 | Pydantic 输入验证 | 格式错误 / 注入输入 | | 7 | CORS 中间件 | 跨域攻击 | ## 实现说明 **为什么使用 GroupNorm 而不是 BatchNorm?** Opacus 需要计算样本级梯度。BatchNorm 会聚合整个批次的统计信息,这与上述要求冲突。`GroupNorm(num_groups=1)` 会按样本进行归一化,使得该架构无需更改结构即可完全兼容 DP-SGD。 **为什么使用 SMOTE 增加到 25%,而不是 50%?** 原始数据集的违约率为 8.1%。过采样至 25% 可以平衡学习信号,同时不会生成过多的合成副本,从而避免因人为记忆效应而增加 MIA 的脆弱性。 **为什么仅在训练集上进行插补?** 仅在训练数据上拟合中位数插补器,可以防止验证集和测试集中的信息泄露到预处理环节,否则会导致所有下游评估指标虚高。 ## 作者 **Sirichandana Bikkasani** · **Lavanya Kovi** · **Sai Yaswanth Reddy Suram** 计算机科学硕士 / 分析学硕士 · 佐治亚州立大学 · 2026 年春季
标签:Apex, API安全加固, AV绕过, FastAPI, Linux系统监控, PyTorch, 凭据扫描, 差分隐私, 机器学习, 模型安全, 网络安全, 逆向工具, 金融风控, 隐私保护