내 암호화 검색을 깨기 위해 신경망을 훈련했지만, 배운 게 없었다.

발행: (2026년 6월 12일 AM 08:27 GMT+9)
5 분 소요
원문: Dev.to

출처: Dev.to

몇 달 전, 나는 임베딩을 숨긴 채(검색을 수행하는 서버조차도 볼 수 없게) 의미 기반 문서 검색 방법을 만들었다. 이름은 ZATRON이다.
모두가(나도 포함해서) 가장 먼저 던진 질문은 “정말로 무언가를 숨기는 걸까, 아니면 그냥 뒤섞여 보이는 것뿐일까?”였다.
뒤섞여 보인다고 해서 안전한 것은 아니다. 그래서 상관계수 하나에 의존하는 대신, 나를 가장 두렵게 하는 일을 해봤다: 신경망을 훈련시켜 이를 깨뜨려 보았다.
이 글은 공격이 성공하도록 최선을 다한 과정을 포함한 솔직한 보고서다.

표준 의미 검색은 임베딩을 평범한 벡터로 저장한다. 데이터베이스 접근 권한만 있으면 토픽별로 클러스터링하고, 단어를 읽지 않아도 내용을 추론할 수 있다. ZATRON은 각 임베딩을 모듈러 바코드로 변환한다: PCA 채널에 투영하고, 양자화하고, 문서별 키 마스크를 더한 뒤, 여러 소수에 대한 나머지만 남긴다. 바코드는 모듈러 공간에서 비교하며, 원본 임베딩은 절대 복원되지 않는다.
검색 성능은 여전히 유지된다—626 K MSMARCO 패시지에서 코사인 유사도 98% 수준. 문제는 바코드가 정보를 새는가이다.

첫 번째 보안 검증으로 바코드 거리와 실제 유사도 사이의 스피어만 상관계수를 구했다. 결과는 거의 0에 가까웠다(ρ ≈ 0.05). 선형 상관관계가 낮다고 해서 모든 공격자를 배제할 수는 없다. 신경망은 선형성을 필요로 하지 않으며, 존재하는 어떤 구조든 학습할 수 있다.

진짜 시험: 신경망에 모든 이점을 줘서 바코드만으로 유사도를 복원할 수 있는지 확인한다.
나는 가장 현실적인 known‑plaintext 공격자 설정을 사용했다:

  • 저장된 모든 바코드를 볼 수 있다.
  • 80 000개의 문서 쌍과 그들의 실제 코사인 유사도가 제공된다(마치 일부 평문이 유출된 상황).
  • 모델을 학습한다—선형 프로브와 3‑layer MLP—각 소수에 대한 원형 차이 특징을 이용해 보지 않은 쌍의 유사도를 예측한다.
  • 학습·테스트 쌍은 앵커 문서를 공유하지 않으므로 단순 암기가 불가능하다.

그리고 결과의 신뢰성을 확보하기 위해, 동일한 공격을 보호되지 않은 양자화 신호에 대해서도 수행했다. 만약 그곳에서도 공격이 통하지 않으면, 공격 자체가 너무 약해 의미가 없다는 뜻이다.

50 000개의 MSMARCO 패시지, 100 000개의 라벨링된 쌍에 대한 결과

입력 (공격자가 보는 것)선형 프로브3‑layer MLP
보호되지 않은 신호 (대조군)ρ = 0.79, AUC = 0.985ρ = 0.90, AUC = 0.999
ZATRON 바코드ρ = 0.00, AUC = 0.498ρ = 0.00, AUC = 0.505

보호되지 않은 신호에서 거의 완벽하게( AUC 0.999) 유사도를 복원하던 동일한 네트워크가

0 조회
Back to Blog

관련 글

더 보기 »

Eidentic 소개

Today we're releasing Eidentic, an open-source TypeScript SDK for building AI agents with self-improving memory and the production fundamentals built in — not b...

Typescript의 타입

Introdução Tipos são uma forma de definir a “forma” ou o contrato dos dados que estamos usando no código. Pensando em Javascript puro, ele é dinâmico: você pode...