Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
GhostFaceMPC — MP-SPDZ에서 복제 비밀 공유를 사용한 프라이버시 보존 얼굴 인식의 참조 구현으로, 양자화된 GhostFaceNet 추론, 벤치마크 및 QAT 도구를 포함합니다. | Kitploit
도구/GitHubGitHub/crypto-unict/ghostfacempc
CryptographyPrivacyMachine LearningPapers & ResearchLearning & Education
GitHubcrypto-unict/ghostfacempc

GhostFaceMPC

MP-SPDZ에서 복제 비밀 공유를 사용한 프라이버시 보존 얼굴 인식의 참조 구현으로, 양자화된 GhostFaceNet 추론, 벤치마크 및 QAT 도구를 포함합니다.

저장소 보기
1568일 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

GhostFaceMPC: 다자간 계산을 이용한 프라이버시 보존 얼굴 인식

GhostFaceMPC: Privacy-Preserving Face Recognition with Multi-Party Computation(Davide Carnemolla, Dario Catalano, Mario Di Raimondo — University of Catania)의 공식 구현입니다. 논문: Cryptology ePrint Archive, Paper 2026/2499.

GhostFaceMPC는 GhostFaceNetV1(width 1.3, stride 1, ArcFace head, MS1MV3로 학습됨)을 사용하여 세 개의 서버 간에 MP-SPDZ의 복제 비밀 공유(replicated secret sharing) 방식으로 얼굴 인식을 수행합니다.

  • 클라이언트는 정렬된 112×112 얼굴을 비밀 공유합니다. 클라이언트가 복제 공유를 직접 생성하므로 서버는 아무것도 다시 공유하지 않고 자신의 쌍을 로드합니다. 어떤 서버도 이미지, 활성화 값, 임베딩 또는 등록된 데이터베이스를 보지 못합니다.
  • 모델 파라미터는 공개되어 있으므로 모든 선형 계층은 출력마다 한 번의 고정 소수점 축소를 수행하는 로컬 비밀-대-공개 연산입니다.
  • 모델은 서버가 실행하는 정확한 연산에 대한 양자화 인식 학습을 통해 32비트 링(소수부 6비트, 커널의 경우 9비트)으로 양자화됩니다.
  • 두 가지 보안 프로파일을 지원합니다: 준정직(semi-honest, replicated-ring-party) 및 중단 가능한 악의적(malicious with abort, 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/3자 벤치마크 하네스 및 에뮬레이션 네트워크
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개 스레드로 실행합니다. 세 서버 모두 하나의 호스트에서 실행됩니다.

  • 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.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 평가 세트인 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 하나와 summary.csv 하나), tables는 논문의 레이아웃대로 results/tables.md를 작성합니다. 대상은 개별적으로, 그리고 임의의 순서로 실행할 수 있습니다. 보고서가 이미 존재하는 실행은 건너뜁니다.

대상논문당사 머신에서의 런타임 (대략)
accuracy비교 표, 정확도 열데이터셋당 코어당 3시간; WORKERS로 분할
verificationFace Verification Benchmarks: HbC 및 M, Co-Host / LAN / Fast-WAN / WAN~6시간
identificationFace Identification Benchmarks: 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정확도 오라클용 프로세스 수CPU 수
POOLS, WARMUPS, TRIALS풀 설계 재정의논문의 값
RESULTS출력 디렉터리results

**--quick**은 워밍업 1회와 측정 요청 1회로 구성된 풀 하나를 실행하며, 정확도는 각 데이터셋의 처음 600쌍에 대해 측정합니다.

측정 항목

  • 풀 설계, 논문과 동일:

    • 준정직(semi-honest) 행: 버려지는 워밍업 5회와 측정 요청 30회로 구성된 풀 3개;
    • 악의적(malicious) 행: 검증의 경우 1 + 4로 구성된 풀 1개, 식별의 경우 1 + 2로 구성된 풀 2개;
    • naive 및 Porthos 베이스라인: 2 + 5로 구성된 풀 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>는 이들 네트워크에서 임의의 명령을 실행합니다.

  • 검증은 임베딩 하나에 더해 1,024행 비밀 공유 데이터베이스의 한 행에 대한 1:1 점수입니다. 식별은 프로브를 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로 로드한다. 즉, 서버들은 입력을 수집하기 위해 아무것도 교환하지 않는다. 악성 프로필: 검증된 출력. 입력에는 검사가 필요 없다. 정직한 클라이언트의 경우 두 정직한 서버가 세 구성 요소를 모두 나누어 보유하므로, 자신의 사본을 변경하는 손상된 서버는 전송하는 내용에서만 벗어나게 되며, 이를 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

한 요청의 오프라인 단계:

도구 다운로드