
그래프 신경망에서 단일 블랙박스 프로토콜 아래 모델 추출 공격과 소유권 방어(워터마킹, 출력 교란, 쿼리 탐지)를 평가하기 위한 벤치마크 및 라이브러리입니다.
단일하고 재현 가능한 블랙박스 프로토콜 아래에서 그래프 신경망에 대한 모델 추출 공격과 소유권 방어를 평가하기 위한 통합 벤치마크 및 라이브러리.
GraphIP-Bench를 사용하는 이유 · 주요 특징 · 빠른 시작 · 연구 질문 · 구성 · 인용
클라우드 서비스로 배포된 그래프 신경망은 모델 추출 공격을 통해 탈취될 수 있습니다. 공격자는 신중하게 선택한 쿼리를 제출하고, 엔드포인트가 반환하는 레이블이나 신뢰도 점수를 기록한 뒤, 대상의 동작을 재현하는 로컬 대리 모델을 학습시킵니다. 성공적인 탈취는 소유자의 지식 재산을 유출하고, 쿼리당 과금 수익을 훼손하며, 경쟁자가 낮은 비용으로 독점 기능을 재현할 수 있게 합니다.
워터마킹, 핑거프린팅, 출력 교란, 쿼리 패턴 탐지 등 점점 늘어나는 소유권 방어 기법들은 이러한 탈취를 방지하거나 추적하려고 시도합니다. 그러나 이 분야의 실험 관행은 파편화되어 있습니다. 연구들은 비공개 분할, 호환되지 않는 예산, 일관성 없는 지표를 사용하며, 소수의 기존 테스트베드는 견고성이나 프라이버시에 초점을 맞추고 모델 추출과 소유권 검증을 배제합니다.
GraphIP-Bench는 이 격차를 해결합니다. 공유된 분할, 쿼리, 예산을 갖춘 단일 블랙박스 프로토콜 아래에서 두 가지 상호 보완적인 트랙, 즉 추출 트랙(공격자가 배포된 GNN을 모방하는 대리 모델을 학습)과 소유권 트랙(모델 소유자가 추출 후 워터마크나 핑거프린트를 검증)의 평가를 표준화합니다. 이어서 모든 방어된 대상에 대해 모든 추출 공격을 실행하고 추출된 대리 모델에서 워터마크 생존율을 측정하는 공격-방어 결합 트랙을 추가합니다. 이는 방어가 실제로 유용한지를 결정하는 설정입니다.
| 구성 요소 | 제공 내용 |
|---|---|
| 12개 공격 | 6개의 MEA 스타일 베이스라인(MEA0–MEA5), 적대적(AdvMEA), 중심성 기반(CEGA), 구조 인식(Realistic), 그리고 3개의 데이터 프리 변형(DFEA_I/II/III) |
| 12개 방어 | 5개의 소유권 추적(BackdoorWM, RandomWM, SurviveWM, ImperceptibleWM, Integrity) + 7개의 정보 제한(OP_low, OP_high, PR_2bit, PR_top1, PRADA, AdaptMisinfo, GradRedir) |
| 10개 데이터셋 | 동종 선호 인용(Cora, CiteSeer, PubMed), 공저자/제품(CoauthorCS, CoauthorPhysics, Computers, Photo), 대규모(OGBN-Arxiv), 이종 선호(RomanEmpire, AmazonRatings) |
| 3개 백본 × 3개 태스크 | 노드 분류, 링크 예측, 그래프 분류에서의 GCN, GAT, GraphSAGE |
| 조인트 트랙 | 추출된 서로게이트에 대한 대리 모델 충실도 및 워터마크 생존성, 모두 하나의 프로토콜 아래에서 |
| 재현성 | 공개 분할, 공유 쿼리 세트, 고정 시드, JSON-Lines 출력, 즉시 사용 가능한 집계 스크립트 |
하나의 프로토콜, 두 가지 측면모든 공격은 동일한 분할, 예산, 엔드포인트 가정 아래에서 모든 방어에 대해 평가됩니다. 충실도, 소유권 검증, 유용성, 연산 비용은 공유된 지표 모음에서 보고됩니다. |
단순한 삽입이 아닌 워터마크 생존성조인트 트랙은 모델이 실제로 추출된 후에도 워터마크가 여전히 검증되는지를 측정하여, 단일 모델 평가가 놓치는 격차를 드러냅니다. |
이종 선호 및 대규모 그래프핵심 프로토콜의 7개 동종 선호 그래프를 넘어, OGBN-Arxiv(169K 노드, 40개 클래스)와 이종 선호 RomanEmpire / AmazonRatings를 추가하여 공격 및 방어 동작을 스트레스 테스트합니다. |
구조적으로 재현 가능고정 시드, 공유 쿼리 세트, 그리고 (데이터셋, 공격, 방어, 체제, 예산, 시드) 셀별 JSON-Lines 출력 레코드. 단일 시드 실행은 논문의 해당 셀과 직접 비교할 수 있습니다. |
| 신호 | 벤치마크 내 규모 |
|---|---|
| 추출 공격 | 12 |
| 소유권 / 정보 제한 방어 | 12 |
| 그래프 데이터셋 | 10 |
| GNN 백본 | 3 (GCN, GAT, GraphSAGE) |
| 그래프 학습 태스크 | 3 (노드 / 링크 / 그래프) |
| 데이터 가용성 체제 | 4 (둘 다, 특징만, 구조만, 데이터 프리) |
| 표준화된 쿼리 예산 | 5 (0.05× — 1.00× 테스트 크기) |
| 셀당 시드 | 3 |
| 평가 트랙 | 3 (추출, 소유권, 조인트) |
git clone https://github.com/LabRAI/GraphIP-Bench.git
cd GraphIP-Bench
conda create -n graphip python=3.11 -y
conda activate graphip
pip install -r requirements.txt
추출 트랙의 셀 하나를 실행합니다:
python scripts/run_rq1_single.py \
--dataset Cora \
--attack MEA0 \
--regime both \
--budget 0.25 \
--seed 0 \
--gpu \
--output-dir outputs/RQ1
단일 데이터셋에서 공격 및 방어 통합 트랙을 실행합니다:
python examples/run_joint_evaluation.py \
--dataset Cora \
--seed 0 \
--gpu
각 실행은 (attack, defense, regime, budget, seed) 튜플마다 하나의 JSON-Lines 레코드를 outputs/에 기록합니다. 레코드는 scripts/의 헬퍼(예: merge_rq1_rq5_faithful_results.py)를 사용하여 병합하고 분석할 수 있습니다.
GraphIP-Bench는 **Python 3.10+**와 함께 Linux(권장)를 지원합니다. DGL 2.1.0 graphbolt 커널은 CUDA 12.1에서 PyTorch 2.0–2.2용으로 미리 빌드된 공유 라이브러리만 제공되므로 PyTorch / DGL / PyG 버전을 고정합니다.
conda create -n graphip python=3.11 -y
conda activate graphip
pip install -r requirements.txt
python -m venv .venv && source .venv/bin/activate
pip install --upgrade pip
pip install -r requirements.txt
| 라이브러리 | 버전 | 고정 이유 |
|---|---|---|
| PyTorch | 2.2.1 + cu121 | DGL 2.1.0 graphbolt 휠은 PT 2.0–2.2 / CUDA 12.1만 지원 |
| DGL | 2.1.0 + cu121 | 로더에서 사용하는 Graphbolt 커널 |
| PyTorch Geometric | 2.7.0 | 링크 예측 및 그래프 분류 어댑터 |
| OGB | 1.3.6 | OGBN-Arxiv 로더 |
| NumPy | < 2.0 | DGL 커널 ABI |
GraphIP-Bench는 다섯 가지 연구 질문을 중심으로 구성되며, 각 질문은 최상위 재현 스크립트에 대응합니다.
| RQ | 질문 | 진입점 |
|---|---|---|
| RQ1 | 쿼리 예산에 따라 추출 효과는 어떻게 변하며, 이러한 추세는 이종성(heterophilic) 및 대규모 그래프에서도 유지되는가? | scripts/run_rq1_single.py |
| RQ2 | 보호된 모델에서 기존 방어 기법은 얼마나 효과적인가? | scripts/run_defense_single.py |
| RQ3 | 방어 기법은 보호와 유용성 사이의 균형을 얼마나 잘 맞추는가? | scripts/run_defense_single.py + scripts/run_defense_hp_ablation.py |
| RQ4 | 공격과 방어의 계산 복잡도와 실제 효율성은 어떠한가? | 모든 JSONL 레코드에 기록된 wall-clock 및 peak-mem 필드 |
| RQ5 | 공동 적대적 설정에서 방어 기법은 얼마나 효과적이며, 워터마크 신호는 추출된 대리 모델에서 살아남는가? | examples/run_joint_evaluation.py |
보조 트랙: