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

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
Priv-QDNN — 양자화된 신경망의 프라이버시 평가를 위한 연구 코드베이스: PTQ/QAT 환경에서 대상/섀도 모델을 훈련하고, DP 방어를 적용한 상태에서 멤버십 추론 공격(MIA, RMIA, 화이트박스)을 실행합니다. | Kitploit
도구/GitHubGitHub/jefffffffu/priv-qdnn
PrivacyMachine LearningPapers & ResearchLearning & EducationAI Security
GitHubjefffffffu/priv-qdnn

Priv-QDNN

양자화된 신경망의 프라이버시 평가를 위한 연구 코드베이스: PTQ/QAT 환경에서 대상/섀도 모델을 훈련하고, DP 방어를 적용한 상태에서 멤버십 추론 공격(MIA, RMIA, 화이트박스)을 실행합니다.

저장소 보기
12개월 전아직 검토되지 않음

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

Priv-QDNN

이 저장소는 양자화된 심층 신경망의 프라이버시 평가를 위한 연구 코드베이스를 포함하고 있습니다. 일반적인 학습 후 양자화(PTQ) 및 양자화 인식 학습(QAT) 설정에서 대상/그림자 모델을 학습하고, 중간 공격 특징을 디스크에 저장하며, 멤버십 추론 관련 공격 및 지표 모음(예: MIA, RMIA, WhiteBoxMIA, WhiteBoxMIA_Partial)을 실행하는 기능을 지원합니다. 이 코드베이스는 또한 방어된 모델을 위한 Opacus 기반 차분 프라이버시 학습 경로(예: 제공된 예제 스크립트의 dropout / DP / adversarial 변형)를 통합합니다.

평가 워크플로는 두 단계로 나뉩니다: (1) 학습 (--training target|shadow|both)을 통해 save/<attack_method>/... 아티팩트를 생성하고, (2) 공격 전용 평가 (--training None)를 통해 저장된 사후 확률/모델을 로드하고 result/<attack_method>/... 아래에 지표를 보고합니다.

설치

일반적인 실험에는 NVIDIA GPU 지원이 있는 머신이 필요합니다. PyTorch에는 CUDA 12.1 휠을 권장합니다(아래 명령 참조). requirements.txt에 고정된 버전과 일치하도록 Python 3.10을 사용하세요.

다음 명령으로 대부분의 요구 사항을 설치할 수 있습니다:

conda create --name priv-qdnn python=3.10
conda activate priv-qdnn
pip install -r requirements.txt --extra-index-url https://download.pytorch.org/whl/cu121

참고:

  • CPU 전용 PyTorch의 경우 --extra-index-url 없이 pip install -r requirements.txt를 실행하세요(플랫폼에 CPU 휠이 PyPI에 있는 경우).
  • AdaRound / AIMET 양자화 경로를 사용하는 경우, 정상적으로 동작하는 aimet-torch 설치가 필요합니다(quantization/PTQ/adaround.py 참조). 플랫폼에서 pip가 aimet-torch를 해석할 수 없다면, 먼저 Qualcomm AIMET 설치 지침을 따른 뒤 나머지 종속성을 설치하세요.

데이터셋

데이터셋은 이 저장소에 포함되어 있지 않습니다. 네 가지가 지원되며, 각각 필요한 설정의 정도가 다릅니다.

CIFAR-100 및 CINIC-10 (자동)

둘 다 처음 사용할 때 data/로 가져오므로 수동 단계가 필요하지 않습니다. 실험을 처음 실행할 때 머신에 네트워크 접근 권한이 있는지만 확인하면 됩니다.

  • CIFAR-100은 data/load_data.py의 torchvision.datasets.CIFAR100(..., download=True)에 의해 다운로드됩니다.
  • CINIC-10은 Edinburgh DataShare 미러에서 data/cinic10.py의 fetch_cinic10()에 의해 다운로드되고 압축이 해제됩니다. 대용량 아카이브이므로 첫 실행 시 시간과 디스크 공간을 충분히 확보하세요.

Texas100 및 Location (수동)

이 두 가지는 자동 다운로더가 없습니다. 원본 아카이브를 가져와 data/<dataset>/raw/ 아래에 압축을 푼 다음, 로더가 기대하는 .npy 파일로 변환하세요.

데이터셋원본 아카이브
Texas100https://www.comp.nus.edu.sg/~reza/files/dataset_texas.tgz
Locationhttps://github.com/privacytrustlab/datasets (location 세트)

압축 해제 후 예상되는 레이아웃:

data/texas/raw/texas/100/feats
data/texas/raw/texas/100/labels
data/location/raw/bangkok

그런 다음 train/test 분할을 생성합니다:

python data/prepare_tabular.py --dataset both

--dataset는 texas, location, both를 허용합니다. --raw_root를 사용하여 다른 위치를 지정하고(기본값 data/<dataset>/raw), --test_size / --seed로 분할을 변경할 수 있습니다(기본값 0.2 및 41).

이 명령은 data/tabular_datasets.py가 로드하는 파일들을 작성합니다:

data/<dataset>/{train_feats,train_labels,test_feats,test_labels}.npy

이 .npy 파일들이 없으면 --dataset_name texas 또는 --dataset_name location을 사용하는 모든 실행은 누락된 경로를 명시하는 FileNotFoundError와 함께 실패합니다.

Priv-QDNN의 코드 구조

  • attack: 공격 구현 및 평가 진입점 (MIA, RMIA, WhiteBox_MIA 등).
  • training: 대상/그림자 학습 루프 및 방어된 학습 변형 (DP / 적대적 분기, 유틸리티).
  • model: 학습 및 공격에서 사용되는 모델 정의와 래퍼.
  • quantization: PTQ/QAT 양자화 파이프라인 및 헬퍼 (AIMET AdaRound 통합 포함).
  • data: 데이터셋 다운로드 헬퍼, 준비 스크립트, PyTorch Dataset 래퍼.
  • dp: DP 학습 경로에서 사용되는 차분 프라이버시 유틸리티.
  • example: 엔드투엔드 실험용 셸 스크립트 (MIA 데이터 수집 + 공격 전용 평가 / 방어).
  • experiment: 논문 분석의 기반이 되는 메커니즘 연구 — LOOD 스타일 암기 점수 (memorization.py) 및 그래디언트 노름 양자화 테이블 (grad_norm_quantization_table.py, grad_norm_range_normalized_table.py).
  • plot: 논문용 그림 및 테이블 생성; 출력 PDF와 CSV는 plot/figures/에 저장됩니다.
  • main.py: 통합 CLI 진입점 (--training으로 학습 모드와 공격 전용 모드 전환).
  • parameter_parser.py: 모든 명령줄 인수와 기본값.
  • extract_last_layer_grad_norm.py: 멤버 및 비멤버 부분집합에 대한 마지막 계층 분류기 그래디언트의 샘플별 L2 노름으로, experiment/ 테이블에서 재사용됩니다.

데모 실험

멤버십 추론 데이터 수집 + 공격 전용 MIA (CIFAR-100)

다음 패턴은 저장소의 의도된 워크플로와 일치합니다: MIA로 학습하여 save/MIA/...를 채운 후, --training None으로 MIA를 실행합니다.

# Stage 1: train target + shadow and save MIA artifacts
python main.py \
  --dataset_name cifar100 \
  --net_name resnet18 \
  --quantization hawq --a_bit 8 --w_bit 8 \
  --attack_method MIA \
  --training both \
  --num_epochs 50 --trials 3 \
  --device cuda:0

# Stage 2: attack-only MIA evaluation (confidence threshold attack only)
python main.py \
  --dataset_name cifar100 \
  --net_name resnet18 \
  --quantization hawq --a_bit 8 --w_bit 8 \
  --attack_method MIA \
  --compleaknr_attacks confidence \
  --training None \
  --trials 3 \
  --device cuda:0

각 공격 실행마다 콘솔은 해당 공격 구현의 진행 상황을 출력합니다(예: MIA의 경우 시행별 지표, 공격 전용 실행은 result/MIA/...에 저장됨).

실행할 블랙박스 공격 선택

--compleaknr_attacks는 공격 전용 MIA 항목을 제어합니다:

  • confidence — 신뢰도 임계값 공격만 실행합니다. 저장된 사후확률만 사용하므로 빠르고 모델 파일이 필요 없습니다.
  • all (인자의 기본값) — 여섯 가지 블랙박스 변형을 모두 실행합니다: 신뢰도 임계값, 엔트로피 임계값, 수정된 엔트로피, 두 가지 학습 기반 공격(사후확률에 대한 LR/RF, 그리고 사후확률과 레이블에 대한 LR/RF), 그리고 SAMIA.

두 모드는 요구 사항이 다르다는 점에 유의하세요. 처음 다섯 가지 변형은 저장된 사후확률만 읽지만, SAMIA는 추가로 저장된 대상 및 섀도 모델을 save/MIA/.../target/<trial>/model.pth와 save/MIA/.../shadow/0/model.pth에서 로드하고, 교란된 입력에 대해 질의하여 출력 민감도를 추정합니다. 이는 모델 출력만 사용한다는 점에서 여전히 블랙박스이지만(그래디언트나 내부 활성화는 사용하지 않음), 해당 체크포인트가 존재해야 하며 상당히 느립니다.

--compleaknr_attacks를 생략하면 여섯 가지가 모두 실행됩니다. 빠른 경로만 원하거나 모델 체크포인트를 사용할 수 없을 때는 위와 같이 confidence를 명시적으로 전달하세요.

배치 스크립트 (방어 + MIA)

다음을 통해 더 큰 규모의 스윕도 재현할 수 있습니다:

bash example/MIA_cifar100_train.sh
bash example/MIA_cinic10_train.sh
bash example/defense/run_adv.sh
bash example/defense/run_dp.sh
bash example/defense/run_dropout.sh
bash example/RMIA.sh

클러스터에 맞게 해당 스크립트 내의 디바이스 ID(cuda:*)와 하이퍼파라미터를 수정하세요.

방어 예시 (CIFAR-100)

아래는 공격 전용 모드에서 --compleaknr_attacks confidence를 사용하는 방어된 모델에 대한 최소 예시입니다.

# Dropout defense (resnet18_drop010): train target, then black-box confidence attack
python main.py --training target --attack_method MIA --dataset cifar100 --net_name resnet18_drop010 --quantization Original --a_bit 32 --w_bit 32 --trials 1 --device cuda:0
python main.py --attack_method MIA --compleaknr_attacks confidence --dataset_name cifar100 --net_name resnet18_drop010 --quantization Original --a_bit 32 --w_bit 32 --training None --trials 1 --device cuda:0

# DP defense (resnet18_dp, eps=5.0): train target, then black-box confidence attack
python main.py --training target --attack_method MIA --dataset cifar100 --net_name resnet18_dp --quantization Original --a_bit 32 --w_bit 32 --num_epochs 20 --batch_size 512 --eps 5.0 --trials 1 --device cuda:0
python main.py --attack_method MIA --compleaknr_attacks confidence --dataset cifar100 --net_name resnet18_dp --quantization Original --a_bit 32 --w_bit 32 --training None --eps 5.0 --trials 1 --device cuda:0

# Adversarial defense (resnet18_adversarial): train target, then black-box confidence attack
python main.py --training target --attack_method MIA --dataset cifar100 --net_name resnet18_adversarial --quantization Original --a_bit 32 --w_bit 32 --num_epochs 50 --trials 1 --device cuda:0
python main.py --attack_method MIA --compleaknr_attacks confidence --dataset cifar100 --net_name resnet18_adversarial --quantization Original --a_bit 32 --w_bit 32 --training None --trials 1 --device cuda:0

전체 양자화 방법 및 비트 폭에 대한 스윕을 수행하려면 다음을 사용하십시오: example/defense/run_dropout.sh, example/defense/run_dp.sh, example/defense/run_adv.sh.

화이트박스 공격 (두 가지 모드)

이 저장소는 두 가지 화이트박스 공격 진입점을 제공합니다:

  • WhiteBoxMIA: 섀도 기반 화이트박스 MIA (섀도 특징으로 공격 모델을 학습하고 대상 특징으로 평가).
  • WhiteBoxMIA_Partial: 대상 전용 분할 모드 (섀도 모델 불필요; 대상 특징을 학습/테스트용으로 분할).

두 방식 모두 save/MIA/...에서 저장된 모델을 로드하므로, 1단계가 완료된 후에 실행하십시오:

# WhiteBoxMIA (shadow mode)
python main.py \
  --dataset_name cifar100 \
  --net_name resnet18 \
  --quantization hawq --a_bit 8 --w_bit 8 \
  --attack_method WhiteBoxMIA \
  --training None \
  --trials 3 \
  --device cuda:0

# WhiteBoxMIA_Partial (target-only split mode)
python main.py \
  --dataset_name cifar100 \
  --net_name resnet18 \
  --quantization hawq --a_bit 8 --w_bit 8 \
  --attack_method WhiteBoxMIA_Partial \
  --training None \
  --trials 3 \
  --device cuda:0

결과는 result/WhiteBoxMIA/... 및 result/WhiteBoxMIA_Partial/...에 기록됩니다.

기본값에 관한 참고 사항

도구 다운로드