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: マルチパーティ計算によるプライバシー保護顔認識

GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation(Davide Carnemolla, Dario Catalano, Mario Di Raimondo — カターニア大学)の公式実装。論文: Cryptology ePrint Archive, Paper 2026/2499。

GhostFaceMPC は GhostFaceNetV1(width 1.3、stride 1、ArcFace ヘッド、MS1MV3 で学習済み)を用いた顔認識を、MP-SPDZ における複製秘密分散を用いて 3 台のサーバ間で実行します。

  • クライアントは整列済みの 112×112 の顔画像を秘密分散します。クライアント自身が複製分散を生成するため、サーバは再分散を行うことなく自身のペアをロードします。サーバが画像、活性化、埋め込み、登録データベースを目にすることは一切ありません。
  • モデルパラメータは公開されているため、各線形層はローカルな秘密×公開の演算となり、出力ごとに 1 回の固定小数点リダクションを行います。
  • モデルは、サーバが実行する正確な演算に基づく量子化を考慮した学習により、32 ビットリング(小数部 6 ビット、カーネルは 9 ビット)に量子化されます。
  • 2 つのセキュリティプロファイルをサポートします。準正直(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 コアの VM(Intel Xeon Gold 6238R)を使用し、パーティごとに 8 スレッドで実行した。3 台のサーバはすべて 1 台のホスト上で動作する。

  • 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 は次の4つの処理を行います:

  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 をビルドします;
    • 3者間のTLS証明書を生成します。
  3. モデルファイルをダウンロードします(下の表を参照)。
  4. ベンチマークデータセットを確認します。

モデルファイルは artifacts/ に配置されます:

ファイル内容
GhostFaceNet_W1.3_S1_ArcFace.h5float の teacher。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 の5つの評価セット(LFW、AgeDB-30、CALFW、CPLFW、CFP-FP)を読み込みます。 InsightFace dataset zoo の 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 が1つと summary.csv が1つ)。また、tables は論文のレイアウトで results/tables.md を書き出します。各ターゲットは個別に、任意の順序で実行できます。レポートがすでに存在する実行はスキップされます。

ターゲット論文当方のマシンでの実行時間(概算)
accuracy比較表、accuracy 列データセットあたりコアあたり3時間。WORKERS で分割
verificationFace Verification Benchmarks: HbC と M、Co-Host / LAN / Fast-WAN / WAN約6時間
identificationFace Identification Benchmarks: 1:128 closed set、同じグリッド約6時間
plaintext比較表、TensorFlow 行1分
naive比較表、MP-SPDZ(naive)行コンパイルを含めて約1時間
porthos比較表、EzPC(Porthos)行ビルド約5分 + 約1.5時間
baselines3つのベースライン
ablationアブレーション表: 最適化を1つずつ、naive ベースラインから GhostFaceMPC(HbC、co-host)まで約4時間

環境変数:

変数意味デフォルト
THREADSパーティごとのスレッド数8
NETWORKS計測するネットワークco-host lan fast-wan wan
WORKERSaccuracy オラクル用のプロセス数CPU 数
POOLS、WARMUPS、TRIALSプール設計を上書き論文のもの
RESULTS出力ディレクトリresults

--quick は、1回のウォームアップと1回の計測リクエストからなる1つのプールを実行し、各データセットの最初の600ペアで accuracy を計測します。

計測内容

  • プール設計、論文どおり:

    • semi-honest 行: 5回の破棄ウォームアップと30回の計測リクエストからなる3つのプール;
    • malicious 行: verification では 1 + 4 の1つのプール、identification では 1 + 2 の2つのプール;
    • naive および Porthos ベースライン: 2 + 5 の3つのプール。
  • 帯域幅は3台のサーバが送信した合計です。ラウンド数は 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> は、それらの上で任意のコマンドを実行します。

  • Verification は、1つの埋め込みと、1,024行の秘密分散データベースの1行に対する 1:1 スコアです。Identification は、プローブを全128行に対してランク付けし、rank-1 インデックスのシェアを返します。

期待される結果

バイト数とラウンド数は、コンパイルされたプログラムの決定論的な特性です。このリポジトリが出力するプログラムは、論文で計測されたものとバイト単位で同一であるため(tests/test_emitted_program.py)、論文のプール設計を用いれば帯域幅とラウンド数は正確に再現されます。

クライアント側で複製された入力。 クライアント(およびデータベースについてはディーラー)は各値を x = x_0 + x_1 + x_2 に分割し、サーバ i にペア (x_i, x_{i-1}) を Persistence/Transactions-P<i>.data として渡します。プログラムはこれを sint.read_from_file で読み込みます。つまり、サーバ間で入力を取り込むための通信は一切発生しません。悪意あるプロファイル:検証済み出力。 入力にチェックは不要です。正直なクライアントであれば、2台の正直なサーバが3つのコンポーネントすべてを分担して保持するため、自身のコピーを改ざんする不正なサーバは送信内容においてのみ逸脱し、それを 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%です。実時間はホストに依存します。

1リクエストのオンラインフェーズ:

リクエストセキュリティオンラインラウンド数オンライン帯域幅
検証HbC1,433312.35 MB
検証M1,391883.27 MB
識別HbC1,496312.35 MB
識別M1,454888.54 MB

1リクエストのオフラインフェーズ:

ツールをダウンロード