TL;DR
코사인 유사도는 질의와 문서 임베딩의 기하학적 거리를 계산할 뿐, 문서의 진실성·권위·출처를 판단하지 않으므로 RAG 보안 속성이 될 수 없습니다. 공격자는 질의 어휘와 권위 신호를 조작한 문서를 삽입해 진짜 문서를 검색 상위권 밖으로 밀어낼 수 있으며, 글의 실험에서는 방어되지 않은 파이프라인에서 20회 중 95% 성공률이 관찰됐습니다. 기존 문서와의 유사도와 신규 문서 간 군집 유사도를 함께 검사하면 공격 성공률이 95%에서 20%로 낮아졌지만, 임계값은 데이터 분포와 임베딩 모델에 맞춰 재설정해야 합니다. 또한 임베딩 벡터는 원문과 무관한 불투명한 숫자가 아니며, Vec2Text·ALGEN·LAGO 연구처럼 벡터 저장소가 유출되면 문서 내용이 부분적으로 복원될 수 있으므로 접근 통제와 암호화, 사고 대응 분류를 함께 강화해야 합니다.
섹션별 상세
# The entire retrieval mechanism, conceptually
query_vector = embed("What was Q4 2025 revenue?") # 384 floats
results = collection.query(query_embeddings=[query_vector], n_results=3) # The 3 stored vectors with smallest cosine distance.질의를 임베딩한 뒤 ChromaDB에서 가장 가까운 벡터 세 개를 검색하는 기본 흐름입니다.
for i, e_i in enumerate(new_embeddings):
for j in range(i + 1, len(new_embeddings)):
if cosine_similarity(e_i, new_embeddings[j]) > CLUSTER_THRESHOLD: # 0.90
flag("TIGHT_CLUSTER — possible coordinated injection")새로 들어온 임베딩끼리의 높은 쌍별 유사도를 검사해 협력형 문서 주입을 탐지합니다.
# Vulnerable: no notion of who is asking
results = collection.query(query_embeddings=[query_embedding], n_results=3)
# Hardened: retrieval scoped to the requester's clearances
results = collection.query(
query_embeddings=[query_embedding],
n_results=3,
where={"classification": {"$in": user_permitted_classifications}},
);사용자에게 허용된 문서 분류를 where 조건으로 제한해 검색 단계에서 권한 밖의 문서가 컨텍스트에 들어오지 않게 합니다.
용어 해설
- 코사인 유사도(Cosine Similarity)
- — 두 벡터가 이루는 각도의 유사성을 측정하는 값으로, 값이 높을수록 임베딩 공간에서 방향이 가깝다는 뜻입니다. 그러나 문서의 진실성, 출처, 권위, 정확성을 판별하지는 못하므로 검색 순위와 사실 여부를 동일하게 취급하면 안 됩니다.
- 밀집 검색(Dense Retrieval)
- — 문서와 질의를 고정 길이 벡터로 변환한 뒤 임베딩 공간에서 가까운 벡터를 찾는 검색 방식입니다. 의미적으로 비슷한 문서를 빠르게 모을 수 있지만, 검색 결과의 사실성이나 접근 권한까지 자동으로 보장하지는 않습니다.
- 임베딩 역변환(Embedding Inversion)
- — 저장된 임베딩 벡터에서 원문이나 원문에 가까운 텍스트를 복원하는 공격 기법입니다. Vec2Text와 ALGEN 같은 연구는 벡터가 완전히 비가역적인 값이라는 통념에 의문을 제기하며, 공격자가 확보해야 할 학습 쌍의 수를 줄여 왔습니다.
- 벡터 데이터베이스 오염(Vector Poisoning)
- — 공격자가 특정 질의와 가까운 임베딩을 갖도록 조작한 문서를 벡터 저장소에 삽입하는 공격입니다. 조작 문서가 검색 상위권을 차지하면 진짜 문서가 컨텍스트 창에 들어오지 못해 RAG 모델의 답변이 허위 정보 쪽으로 기울 수 있습니다.
- 속성 보존 암호화(Property-Preserving Encryption)
- — 암호화된 데이터의 특정 비교 속성을 유지해 원문을 복호화하지 않고도 최근접 이웃 검색을 수행하게 하는 암호화 방식입니다. 이 글에서는 테넌트별 키로 암호화된 벡터를 검색하는 접근으로 소개되지만, 검색 지연과 키 관리 비용이 함께 발생합니다.
기술
- sentence-transformers/all-MiniLM-L6-v2
- EmbeddingGemma-300M
- Qwen3-Embedding
- BGE-M3
- ChromaDB
- Qwen2.5-7B-Instruct
- Vec2Text
- ALGEN
- LAGO
- Cloaked AI
활용 사례
- RAG 지식베이스의 문서 오염 탐지
- 다중 테넌트 SaaS의 검색 권한 분리
- 벡터 저장소 유출 사고 대응과 민감도 평가
- 임베딩 역변환 위험을 포함한 벡터 데이터베이스 보안 점검
AI 요약 · 북마크 · 개인 피드 설정 — 무료
출처 · 인용 안내
인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.