本项目为《密码学》课程期末大作业。项目设计并实现了一个基于联邦学习(Federated Learning)和本地差分隐私(Local Differential Privacy, LDP)的隐私计算原型系统。
在传统的集中式机器学习中,用户需要将原始数据上传至中心服务器,这极易引发数据泄露和隐私安全问题。本项目通过构建去中心化的联邦学习架构,使得多个客户端能够在不共享本地原始数据集(以 MNIST 手写数字图像为例)的前提下,协同训练一个全局的CNN深度学习模型,真正实现了“数据可用不可见”。
为了防御极端情况下的模型反演攻击(Model Inversion Attack)和梯度泄露,本项目在客户端引入了严格的数学隐私保护机制:
- 联邦平均算法(FedAvg): 客户端仅与服务器交换模型权重(Parameters),原始明文数据(Images/Labels)绝对不离开本地设备。
- 本地差分隐私加噪(
apply_dp_noise): 客户端在将本地计算好的模型参数上传至服务器之前,会向参数矩阵中注入特定分布的高斯噪声(Gaussian Noise)。这一机制在数学层面上混淆了真实的梯度数据,即使通信信道被窃听或服务器作恶,也无法逆向推导出用户的任何原始明文信息。
本系统采用标准的 Client-Server 联邦计算架构:
- Server(中央服务器):负责初始化全局模型,并在每一轮(Round)收集各客户端经差分隐私加噪后的模型参数,进行安全聚合,最后将更新后的全局模型下发。
- Client(客户端节点):模拟真实的“数据孤岛”环境。各个节点各自持有互不重叠的数据片段,仅在本地进行模型训练(Local Training)并执行差分隐私加噪,全程无原始明文数据流出。
本项目基于 Python 和主流的深度学习/联邦学习框架构建。请确保您的环境中安装了 Python 3.8 或更高版本。
推荐使用虚拟环境,运行以下命令安装所需依赖:
pip install torch torchvision flwr numpy
🚀 5. 快速运行指南
本系统可以在单台计算机上通过开启多个终端窗口来模拟多节点的联邦计算。
pip install -r requirements.txt
第一步:启动中央服务器
打开一个终端窗口,运行服务器脚本。服务器将启动并等待客户端连接:
Bash
python server.py
第二步:启动客户端节点(模拟多方参与)
打开新的终端窗口(建议开启 2-3 个终端模拟多个并发参与节点),在每个窗口中分别运行:
Bash
python client.py
第三步:观察聚合结果
当所需数量的客户端连接成功后,系统将自动开始联邦训练。可以在服务器的终端日志中观察到:
每一轮(Round)的参数聚合过程。
全局模型在严格隐私保护下,测试集准确率(Accuracy)的稳步提升。本实验中,经过 3 轮训练(耗时约 15 分钟),准确率可达到 98% 以上。
📹 6. 演示视频与作者信息
大作业演示视频: [在此处填入你的 B 站视频链接]
课程名称: 《密码学》
学号: 4125157017
姓名: 李澳