AI 에이전트용 이그레스 방화벽 Airlock을 한국어와 영어 합성 케이스 243건으로 3회 독립 측정했습니다. 연결 가능한 노출은 84.7%에서 13.9%로 줄었고 측정 과정에서 저지른 실수도 함께 정리했습니다.
이 글의 수치는 이후 보강을 거쳐 3편에서 갱신했습니다: https://blog.cortexys.team/airlock-how-the-numbers-improved
이 글은 Airlock 시리즈의 2편입니다. 만든 이유와 동작 방식은 1편 AI 에이전트용 이그레스 방화벽 Airlock 소개에 정리했습니다.
AI 에이전트가 개인 문서를 다룰 때 기기를 떠나는 것은 프롬프트만이 전부는 아닙니다. 계획 단계마다 읽은 문서가 다시 전송되고 도구 호출 인자와 검색 질의도 밖으로 나갑니다. Airlock은 이 출구를 모두 지키는 AI 에이전트용 이그레스 방화벽이며 Nebius × NVIDIA Global AI Hackathon 출품작으로 만들었습니다.
요청이 기기를 떠나기 전에 정규식 탐지기와 로컬 NVIDIA Nemotron 3 Nano 4B 그리고 한국어 규칙과 NVIDIA GLiNER PII 앙상블이 식별자와 준식별자를 찾습니다. 찾은 값은 로컬 볼트에서 <PERSON_1> 같은 플레이스홀더로 바뀌고 코드로 작성한 결정적 게이트가 실제 전송 바이트를 다시 검사해 알려진 민감 문자열이 남으면 차단합니다. 통과한 요청만 Nebius Token Factory의 Nemotron 3 Ultra로 가고 답변은 기기 안에서 복원됩니다.
이런 마스킹 프록시는 PasteGuard와 Kiji처럼 이미 여럿 있습니다. 다만 사전 조사에서 실제로 기기를 떠난 바이트 기준의 누출률을 반복 실행 분산과 함께 공개한 제품은 찾지 못했습니다. 이 글은 그 수치와 측정 중 발견한 오류를 정리한 기록입니다.
측정 방식
- 데이터: 한국어 122건과 영어 121건의 합성 케이스 243건이며 모든 값은 지어낸 것입니다.
- 반복: 모든 시스템을 3회 실행했고 Airlock은 회차마다 서버를 초기화했습니다.
- 공격자: Nemotron 3 Ultra가 기기를 떠난 페이로드만 읽고 신원과 사적 상황을 추론합니다.
- 핵심 지표: 연결 가능한 노출은 상황 민감 케이스 98건 가운데 공격자가 신원 항목을 하나 이상 복원하고 사적 상황까지 추론한 비율입니다. 누가 어떤 문제를 가졌는지 말할 수 있는 경우를 셉니다.
- 유용성과 왜곡: 같은 모델의 심판이 원문 프롬프트로 얻은 기준 답변과 비교해 판정합니다.
- 베이스라인: 그대로 통과(raw)와 정규식과 Presidio 그리고 NeMo Guardrails의 PII 백엔드인 GLiNER PII 단독 실행입니다.
결과와 트레이드오프
Airlock 행은 독립적인 3회 측정의 평균과 표준편차입니다.
| 시스템 | 연결 가능한 노출 | 신원 누출 | 유용성 (1~5) | 유틸리티 비율 | 왜곡 | 무해한 프롬프트 마스킹 |
|---|---|---|---|---|---|---|
| 그대로 통과 | 84.7% | 98.5% | 4.52 | 1.05 | 7.7% | 0.0% |
| 정규식만 | 79.6% | 92.7% | 3.91 | 0.87 | 13.9% | 7.4% |
| Presidio + KR 인식기 | 53.1% | 76.7% | 3.01 | 0.66 | 33.7% | 66.7% |
| GLiNER PII 단독 | 9.2% | 18.9% | 2.69 | 0.59 | 24.5% | 59.3% |
| Airlock (기본값) | 13.9% ± 0.6 | 8.6% ± 0.7 | 4.16 ± 0.03 | 0.95 ± 0.01 | 15.2% ± 1.4 | 11.1% |
그대로 보내면 연결 가능한 노출은 84.7%이고 Airlock을 거치면 13.9% ± 0.6입니다. 유용성은 4.52에서 4.16으로 낮아졌고 왜곡은 15.2%로 같은 실행의 기준 답변 7.7%보다 높습니다.
GLiNER PII 단독은 9.2%로 더 적게 연결됩니다. 대신 무해한 프롬프트의 59.3%를 가리고 유용성은 2.69에 그치며 왜곡은 24.5%입니다. 영어로만 학습한 모델이라 한 한국어 케이스에서는 나이를 PASSWORD로 회사명을 RELIGIOUS_BELIEF로 분류했습니다. Presidio는 53.1%가 연결되면서도 무해한 프롬프트의 66.7%를 가렸습니다. 마스킹이 적으면 누출이 늘고 마스킹이 많으면 답변 유용성이 떨어집니다. Airlock도 무해한 케이스 27건 중 3건을 가렸고 요청당 로컬 오버헤드는 p50 4.0초입니다.
남은 연결 케이스와 한국어 성능
남은 연결은 전부 준식별자 케이스에서 나왔습니다. 금융과 건강과 의도 검색에서는 0건이었고 준식별자 케이스는 27건 중 회차당 13.7건이 연결됐습니다. 3회 모두 연결된 케이스는 9건이고 한 번이라도 연결된 케이스는 18건입니다. 하나씩 보면 무해한 속성의 조합이 원인입니다.
- 직함과 역할: 5급 사무관, Pediatric Cardiologist
- 민감정보: 2022년 행정고시 수석, 75kg
- 작은 지명과 드문 개인 사실: 달무리도, 사과 농사를 짓는 귀농 부부
이를 막으려면 속성 하나를 더 일반화해야 하고 그만큼 답변에 필요한 맥락이 줄어듭니다.
한국어 성능이 영어보다 낮습니다. 신원 누출은 한국어 10.6%와 영어 6.5%이고 유틸리티 비율은 0.86과 1.04이며 과잉 가림은 10.0%와 4.3%입니다. 무해한 마스크는 모두 한국어에서 나왔고 한국어 무해 검색 2건은 모든 회차에서 차단됐습니다. 연결 가능한 노출만은 14.0%와 13.9%로 비슷하지만 언어별 케이스가 약 50건이라 표준편차가 넓습니다. 준식별자 밖의 신원 누출도 한국어 숫자로 적은 전화번호 같은 한국어 적대적 인코딩에서 주로 나왔습니다.
독립적이지 않았던 반복 실행
첫 최종 실행은 서버를 1회차 전에만 초기화했습니다. 그래서 2회차와 3회차는 메모리에 캐시된 1회차 탐지를 재사용했습니다. 탐지기는 온도 0.6으로 샘플링하는데 캐시가 그 샘플링을 없앤 것입니다. 신원 누출 9.7% ± 0.0은 같은 탐지를 세 번 채점한 값이라 분산 정보가 없었습니다.
이 문제는 회차별 탐지 시간으로 확인됐습니다. 회차별 탐지 시간 중앙값이 3,412 / 462 / 475 ms로 급락했습니다. 매 회차 초기화한 실행에서는 3,463 / 3,409 / 3,375 ms였습니다.
| 지표 | 캐시된 실행 | 독립 실행 |
|---|---|---|
| 연결 가능한 노출 | 15.3% ± 1.0 | 13.9% ± 0.6 |
| 신원 누출 | 9.7% ± 0.0 | 8.6% ± 0.7 |
| 3회 모두 연결된 케이스 | 14건 | 9건 |
| 3회 평균 오버헤드 p50 / p95 | 1,629 / 5,734 ms | 4,004 / 8,771 ms |
평균은 1포인트 안팎으로 움직였습니다. 차이가 큰 항목은 분산과 지속성과 지연입니다. 실제 표준편차는 신원 누출에서 0.7포인트이고 3회 평균 지연은 p50 기준으로 2.4초 과소평가됐습니다. 모든 회차에서 연결된 케이스가 14건에서 9건으로 줄었으니 겉보기 지속성의 일부는 캐시가 만든 것입니다. 바이트가 같은 페이로드 비율만으로는 부족합니다. Nemotron 3 Nano 4B는 실제로 다시 실행해도 독립 실행에서 231건 중 130건(56.3%)을 3회 모두 똑같이 내놓았습니다. 그래서 지금 하네스는 회차별 탐지 시간 급락을 경고하고 동일 페이로드는 85%를 넘을 때만 경고합니다.
반복 실행은 서로 독립적이어야 하고 표준편차를 보고하기 전에 그 독립성을 수치로 확인해야 합니다.
재현 방법과 한계
코드와 평가 하네스는 github.com/tristan-kkim/airlock에 있습니다. 로컬 탐지 모델과 API 키 그리고 GLiNER PII 가중치를 준비한 뒤 실행합니다.
git clone https://github.com/tristan-kkim/airlock && cd airlock
uv sync --extra gliner
eval/final_protocol.sh --commit 201341b --gliner on --substitution placeholder --passes 3 \
--reuse-committed --publish --systems "raw regex presidio_ko gliner_pii airlock" --yes
독립 실행은 1시간 52분이 걸렸습니다. 채점 비용은 $3.66이었고 업스트림 답변을 포함한 추정 총비용은 약 $5.05입니다. 전체 표는 eval/results/FINAL.md와 eval/results/COMPARISON.md에 있습니다.
- 추론과 검색이 없는 공격자 하나로 측정한 하한값이며 더 강한 공격자는 더 많이 연결할 것입니다. 시스템끼리 비교하는 용도로 읽어야 합니다.
- 준식별자와 의도 케이스는 탐지기를 만든 같은 프로젝트가 직접 작성한 합성 데이터이고 규칙을 조정한 72건 개발 분할이 243건에 포함되어 보류 세트 추정치로 볼 수 없습니다.
- 심판 잡음은 유틸리티 비율 약 ±0.05와 왜곡 약 ±3포인트입니다.
- 베이스라인은 출력이 회차마다 같아 한 번만 채점했으므로 공격자와 심판의 샘플링이 한 번씩만 반영됐습니다.
- Airlock을 거쳐도 사적 상황은 72.8%의 케이스에서 추론됐고 탐지기가 놓친 값은 전송됩니다.
이 글은 Nebius × NVIDIA Global AI Hackathon 출품작의 일부로 작성했습니다.
코텍시스 창업자로 AX 컨설팅과 기업 AI 교육, AI 에이전트 개발을 직접 수행합니다.
코텍시스 AI 인사이트 최신 논문 리뷰
AWQ 양자화: 활성값을 보고 가중치를 지키는 4비트 양자화
MIT 연구진의 AWQ는 활성값 분포를 기준으로 중요한 가중치 1%만 보호해도 저비트 양자화 오류가 크게 줄어든다는 관찰에서 출발해 재학습 없는 4비트 양자화를 구현했고 전용 커널 TinyChat으로 FP16 대비 3배 이상의 추론 속도를 달성했습니다. 온프레미스 sLLM을 소수의 GPU로 서빙해야 하는 기업에게 정확도 손실 없이 메모리와 비용을 동시에 줄이는 사실상의 표준 기법입니다.
Mixtral 8x7B로 읽는 MoE 아키텍처: 13B의 연산으로 70B급 성능 내기
총 47B 파라미터 중 토큰당 13B만 활성화하는 희소 MoE 모델 Mixtral 8x7B는 Llama 2 70B와 GPT-3.5를 대부분의 벤치마크에서 따라잡거나 능가했습니다. 추론 연산량은 소형 모델 수준으로 유지하면서 품질을 끌어올리는 MoE의 실용성을 입증한 사례로, 기업의 자체 호스팅 모델 선정 기준에 직접 영향을 줍니다.
DPO가 바꾼 선호 정렬 학습: 보상 모델 없이 RLHF를 대체하는 방법
DPO는 보상 모델의 재매개변수화를 통해 최적 정책을 닫힌 형태로 유도하고, 선호 데이터에 대한 단순 분류 손실만으로 RLHF와 같은 목적을 달성하는 기법입니다. 강화학습 파이프라인을 운영할 여력이 없는 기업 프로젝트에서 선호 정렬을 현실적인 작업 범위로 만들어 준 논문입니다.
AI 솔루션이 필요하신가요?
cortexys.team에서 맞춤 AI 개발 서비스를 확인하세요.

