Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
GhostFaceMPC — 基于 MP-SPDZ 中复制秘密共享的隐私保护人脸识别参考实现,包含量化 GhostFaceNet 推理、基准测试和 QAT 工具。 | Kitploit
工具/GitHubGitHub/crypto-unict/ghostfacempc
密码学隐私保护机器学习论文与研究学习与教育
GitHubcrypto-unict/ghostfacempc

GhostFaceMPC

基于 MP-SPDZ 中复制秘密共享的隐私保护人脸识别参考实现,包含量化 GhostFaceNet 推理、基准测试和 QAT 工具。

查看仓库
1467天前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

GhostFaceMPC:基于多方计算(MPC)的隐私保护人脸识别

GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation 的官方实现(作者:Davide Carnemolla、Dario Catalano、Mario Di Raimondo — 卡塔尼亚大学)。论文: Cryptology ePrint Archive, Paper 2026/2499。

GhostFaceMPC 使用 GhostFaceNetV1(宽度 1.3、步长 1、ArcFace 头,在 MS1MV3 上训练)在三个服务器之间进行人脸识别,采用 MP-SPDZ 中的复制秘密共享。

  • 客户端对对齐后的 112×112 人脸进行秘密共享:它自行生成复制共享,因此服务器直接加载各自的份额对,无需重新共享任何内容。任何服务器都不会看到图像、激活值、嵌入向量或已注册数据库。
  • 模型参数是公开的,因此每个线性层都是本地的秘密与公开值算术运算,每个输出执行一次定点归约。
  • 模型通过量化感知训练,在服务器实际执行的精确算术上量化为 32 位环(6 个小数位,卷积核为 9 个)。
  • 支持两种安全配置:半诚实(replicated-ring-party)和带中止的恶意安全(ps-rep-ring-party)。
  • 每个请求分为离线阶段和在线阶段。离线阶段生成与输入无关的预处理数据。在线阶段即推理本身,随后进行 1:1 验证评分或 1:N 闭集识别。两个阶段都不会公开任何内容。

本仓库包含复现论文实验所需的全部代码。

@misc{cryptoeprint:2026/2499,
      author = {Davide Carnemolla and Dario Catalano and Mario Di Raimondo},
      title = {{GhostFaceMPC}: Privacy-Preserving Face Recognition with Multi-Party Computation},
      howpublished = {Cryptology {ePrint} Archive, Paper 2026/2499},
      year = {2026},
      url = {https://eprint.iacr.org/2026/2499}
}

目录

路径说明
src/ghostmpc/Python 包与 ghostmpc 命令行
src/ghostmpc/codegen/从模型清单编译为 MP-SPDZ 程序的编译器
src/ghostmpc/eval/明文环预言机(与 MPC 程序逐位一致)与精度评估
src/ghostmpc/benchmark/三方基准测试框架与模拟网络
src/ghostmpc/training/基于环忠实前向传播的量化感知训练
third_party/patches/本工作为 MP-SPDZ 添加的虚拟机指令
baselines/基线:TensorFlow 明文、朴素 MP-SPDZ、EzPC/Porthos
run_experiments.sh运行论文中所有实验的单一脚本
scripts/环境配置、无根网络模拟、表格收集
tests/单元测试(pytest)

1. 环境要求

  • 机器。 x86-64 上的 Linux。论文使用了一台 32 核虚拟机(Intel Xeon Gold 6238R),每方运行 8 个线程。三台服务器均运行在同一台主机上。

  • Python。 Python ≥ 3.10(已在 3.11 上测试)。

  • MP-SPDZ 构建依赖 (上游列表):

    sudo apt-get install automake build-essential clang cmake git libboost-dev \
        libboost-filesystem-dev libboost-iostreams-dev libboost-thread-dev \
        libgmp-dev libntl-dev libsodium-dev libssl-dev libtool python3 python3-venv
    
  • LAN/WAN 仿真。 需要 iproute2(ip、tc)、iputils-ping、 unshare(util-linux)以及非特权用户命名空间。该脚本无需 root 权限。在 Debian/Ubuntu 上:sudo sysctl kernel.unprivileged_userns_clone=1。

  • 仅 Porthos 基线。

    • libboost-system-dev
    • 支持 AES-NI 的 CPU
    • 通过 opam 安装 OCaml 4.14,并执行 opam install ocamlbuild menhir ocamlfind stdint

2. 安装配置

git clone --recursive https://github.com/crypto-unict/ghostfacempc.git
cd ghostfacempc
scripts/setup.sh

scripts/setup.sh 完成四件事:

  1. 创建 .venv 并安装该包。这会拉取 tensorflow-cpu、 Pillow、onnx、onnxruntime 和 onnxsim。
  2. 在 third_party/MP-SPDZ 中准备 MP-SPDZ:
    • 检出固定的修订版本;
    • 应用 third_party/patches/;
    • 启用 32 位环(在 CONFIG.mine 中设置 MY_CFLAGS += -DRING_SIZE=32);
    • 构建 replicated-ring-party.x 和 ps-rep-ring-party.x;
    • 生成三方的 TLS 证书。
  3. 下载模型文件(见下表)。
  4. 检查基准数据集。

模型文件会放入 artifacts/:

文件内容
GhostFaceNet_W1.3_S1_ArcFace.h5浮点教师模型,来自 GhostFaceNets 发布版
model/量化后的 ring32/f6/f_w9 模型及其准确率报告
model-ring64-f16-b0/导出 Porthos 基线所用的 ring64 清单
legacy-scalar-236/朴素 MP-SPDZ 基线的 ring64/f20 清单

这些包是本仓库的发布资产,每个归档文件都会 对照其 SHA-256 进行校验。ghostmpc fetch-bundles --bundle qat-start 还会 下载 QAT 起始所用的清单(见 §5)。

数据集

准确率实验和明文基线读取五个 InsightFace 评估集:LFW、AgeDB-30、CALFW、CPLFW 和 CFP-FP。使用 InsightFace 数据集库 的 MS1MV3 训练数据中分发的 .bin 文件, 并按如下方式放置:

datasets/benchmarks/{lfw,agedb_30,calfw,cplfw,cfp_fp}.bin

scripts/setup.sh 会根据我们使用的 SHA-256 摘要对它们进行校验。MPC 基准测试不需要这些数据集:它们的通信不依赖于输入值,因此它们会对合成输入进行秘密共享。

3. 复现实验

./run_experiments.sh --quick verification   # smoke test, about one hour
./run_experiments.sh all                    # every table of the paper
./run_experiments.sh tables                 # print the tables measured so far

结果输出到 results/(每次运行生成一个 report.json 和一个 summary.csv),tables 会按论文的布局写出 results/tables.md。各目标可以单独运行,且顺序不限。若某次运行的报告已存在,则该次运行会被跳过。

目标论文在我们机器上的运行时间(约)
accuracy对比表,准确率列每个数据集每核 3 小时;用 WORKERS 拆分
verification人脸验证基准:HbC 和 M,Co-Host / LAN / Fast-WAN / WAN约 6 小时
identification人脸识别基准:1:128 闭集,相同网格约 6 小时
plaintext对比表,TensorFlow 行1 分钟
naive对比表,MP-SPDZ(naive)行约 1 小时(含编译)
porthos对比表,EzPC(Porthos)行约 5 分钟构建 + 约 1.5 小时
baselines三个基线
ablation消融表:逐项启用优化,从 naive 基线到 GhostFaceMPC(HbC,co-host)约 4 小时

环境变量:

变量含义默认值
THREADS每方线程数8
NETWORKS要测量的网络co-host lan fast-wan wan
WORKERS准确率 oracle 的进程数CPU 数量
POOLS、WARMUPS、TRIALS覆盖池设计论文中的设计
RESULTS输出目录results

--quick 运行一个池,包含一次预热和一次测量请求,并在每个数据集的前 600 对数据上计算准确率。

测量内容

  • 池设计,与论文一致:

    • 半诚实行:三个池,每个池包含五次丢弃的预热和三十次测量请求;
    • 恶意行:验证使用一个 1 + 4 的池,识别使用两个 1 + 2 的池;
    • naive 和 Porthos 基线:三个 2 + 5 的池。
  • 带宽 是三个服务器发送的总量。轮数 是 MP-SPDZ 的轮数(对 Porthos 而言,是运行时串行深度)。实际耗时 是测量请求的中位数。

  • 在线和离线 阶段分别报告,从不求和。

  • 网络(lan、fast-wan、wan)用 tc netem 模拟,每一方位于自己的网络命名空间中:

    网络RTT带宽
    LAN0.1 ms1 Gbit/s
    Fast-WAN10 ms1 Gbit/s
    WAN100 ms100 Mbit/s

    scripts/netsim/ghostmpc-netsim <profile> -- <command> 可在这些网络上运行任意命令。

  • 验证 是一个嵌入加上与 1,024 行秘密共享数据库中某一行的 1:1 评分。识别 将探针与全部 128 行进行排序,并返回 rank-1 索引的份额。

预期结果

字节数和轮数是编译后程序的确定性属性。本仓库生成的程序与论文中测量的程序逐字节相同(tests/test_emitted_program.py),因此使用论文的池设计时,带宽和轮数可以精确复现。

客户端复制的输入。 客户端(对于数据库而言,还有经销商)将每个值拆分为 x = x_0 + x_1 + x_2,并将配对 (x_i, x_{i-1}) 交给服务器 i,存放在 Persistence/Transactions-P<i>.data 中,程序通过 sint.read_from_file 加载该文件:服务器之间不交换任何内容即可摄取输入。恶意配置:验证输出。 输入无需检查:在诚实客户端的情况下,两个诚实服务器共同持有全部三个分量,因此篡改其副本的损坏服务器只会在其发送的内容上产生偏差,ps-rep-ring 会捕获这一点(乘积的牺牲后检查、哈希公开值)。声称的身份从 Persistence/Transactions-clear-P<i>.data 读取。在答案离开之前,程序强制执行牺牲后检查,每个服务器将其份额对追加到 Persistence/,ghostmpc open-result --last N 会逐分量检查;这是 ps-rep-ring-party 的默认行为(tests/test_emitted_program.py 固定了默认程序)。客户端侧是 ghostmpc share-gallery <dir>,随后是 ghostmpc share-image face.png <dir> --append [--identity <row>]。池设计进入程序(它固定了每个请求提前生成多少预处理),因此 --quick 运行会略有偏差:在半诚实配置中偏差几百个离线字节,在恶意配置中偏差约 2% 的在线字节。实际耗时取决于主机。

单个请求的在线阶段:

请求安全性在线轮数在线带宽
验证HbC1,433312.35 MB
验证M1,391883.27 MB
识别HbC1,496312.35 MB
识别M1,454888.54 MB

单个请求的离线阶段:

安全性离线轮数离线带宽
HbC14168.76 MB
M3805.50 GB

单个验证请求的实际耗时,以秒为单位(论文):

安全性同主机局域网快速广域网广域网
HbC2.433.8210.7687.93
M5.538.1416.72124.68

准确率,以百分比表示:

模型LFWAgeDB-30CALFWCPLFWCFP-FP
浮点教师模型99.7297.8095.8091.9296.39
GhostFaceMPC (ring32)99.6897.6795.8591.6096.37

量化准确率在环预言机(ghostmpc evaluate-accuracy)上计算。该预言机逐整数复现三个服务器计算的嵌入。它是确定性的,因此与 artifacts/model/gates/ 中附带的报告完全一致。浮点教师模型在 TensorFlow 中运行,其数值在不同构建和 CPU 之间略有差异,因此其行可能变动一两个点(例如在 LFW 上为 99.70 而非 99.72)。

基线(单个验证请求的在线阶段,同主机):

基线轮数实际耗时带宽
TensorFlow(明文)--0.16 s--
MP-SPDZ 朴素实现 (ring64)42,78444.45 s1.05 GB
EzPC/Porthos (ring64)2,152259 s17.97 GB

4. 直接使用命令行

下载工具