
PGM-인덱스에 대한 포이즈닝 공격 연구 코드로, 학습된 인덱스 성능을 저하시키기 위해 적대적 데이터를 구성하는 방법을 시연합니다.
본 논문 Poisoning Attacks on the PGM-index의 공식 코드입니다.
git clone [REPOSITORY LINK]
cd pgm-index-poisoning
git submodule update --init --recursive
./scripts/build.sh
CMake 필요(종속성 참조). 출력물은 build/ 아래에 생성됩니다(기본적으로 바이너리는 build/bin).
./scripts/download_alex_dataset.sh # ALEX
./scripts/download_mgbench.sh # mgbench
./scripts/download_sosd_datasets.sh # SOSD
./scripts/preprocess_alex_dataset.sh # ALEX
./scripts/preprocess_mgbench.sh # mgbench
./scripts/generate_synthetic_dataset.sh # synthetic
각 실행은 ./scripts/run_experiment.sh <config.json>을 통해 JSON 설정 파일 하나를 사용합니다. 예시:
4.1 최대 오류 최대화 (예: n=16, 연속 방식)
./scripts/run_experiment.sh "configs/experiments/poison_attack/maximize_maxerror_consec/baseline_n16.json"
4.2 합법적 키 커버리지 최소화 (예: epsilon=2, 연속 방식)
./scripts/run_experiment.sh "configs/experiments/poison_attack/minimize_segment_length/baseline_epsilon2.json"
4.3 m_opt 최대화 (PGM-index 예시)
./scripts/run_experiment.sh "configs/experiments/poison_attack/inject_poisons_to_minimize_segment_length_swing_lambda_with_theta/baseline.json"
4.4 m_opt의 상한 (인스턴스 의존 예시)
./scripts/run_experiment.sh "configs/experiments/upper_bound/fix_w_per_block/baseline.json"
4.5 모든 실험 실행 (배치)
scripts/run_all_experiment.sh에 정의된 전체 실험 설정 목록을 실행합니다(해당 파일을 편집하여 목록을 변경할 수 있음).
./scripts/run_all_experiment.sh
저장소 루트에서:
./scripts/plot.sh
./scripts/print_table.sh
그림과 로그는 fig/ 아래에 기록됩니다. 먼저 Python 종속성을 설치하세요: pip install -r requirements.txt.
g++, make, CMake (빌드 스크립트는 CMake로 구성하고 cmake --build로 빌드하며, 일반적으로 Make를 호출합니다).requirements.txt의 패키지 (플로팅/테이블 스크립트)../scripts/run_experiment.sh에서 실험 JSON을 파싱하는 데 필요합니다.이미지를 한 번 빌드합니다:
./docker_build.sh
docker_run.sh — 대화형 컨테이너: 저장소를 /workspace에 마운트하고, 8개 CPU(0–7)를 할당하며, bash 셸로 진입하여 수동으로 빌드 및 명령을 실행할 수 있습니다.docker_run_all.sh — 분리 실행: 컨테이너 내부에서 ./scripts/run_all_experiment.sh를 실행하고(8개 CPU) stdout을 results/run_all.log에 기록합니다.docker_run_all_single_cpu.sh — docker_run_all.sh와 동일하지만 단일 CPU와 OMP_NUM_THREADS=1을 사용하여 단일 스레드로 실행합니다.세 스크립트 모두 pgm_poisoning:latest 이미지와 스크립트에 정의된 동일한 권한/볼륨 설정을 사용합니다.
| 경로 | 역할 |
|---|
src/ | C++ 소스 (공격, PGM 벤치마크, 도구, 상한). |
configs/experiments/ | 실험 JSON 설정 (poison_attack/, upper_bound/ 등의 경로). |
scripts/ | 빌드, 데이터, run_experiment.sh, run_all_experiment.sh, plot.sh, print_table.sh. |
third_party/ | Git 서브모듈 (PGM-index, FITing-Tree, RadixSpline). |
data/, results/, fig/ | 데이터, 실행 출력물, 생성된 그림/테이블 로그. |
plot/ | Python 플로팅 및 테이블 출력 스크립트. |