Privent v2.2: Agentic AI의 데이터 유출을 방지하는 오픈 소스 방화벽
요약
Privent v2.2는 AI 에이전트 워크플로우에서 개인정보 유출을 방지하기 위한 오픈 소스 방화벽입니다. 기존의 파괴적인 데이터 삭제 방식 대신 가역적 토큰화를 사용하여, 모델에는 토큰을 전달하고 신뢰할 수 있는 지점에서만 원본 데이터를 복원합니다.
핵심 포인트
- 가역적 토큰화 기술로 데이터 파괴 없이 개인정보 보호
- 573개의 로컬 탐지기를 통한 민감 정보 식별
- n8n 환경에서 사용 가능한 커스텀 노드 제공
- 모델에는 토큰을, 송출 지점에는 원본 데이터를 전달하는 구조
Repo: github.com/privent-ai/n8n-nodes-privent, MIT 라이선스, 573개의 로컬 탐지기(detectors), 로컬 모드 사용 시 API 키 불필요. 만약 여기서 허점을 발견한다면, 이 포스트의 마지막 섹션이 바로 여러분에게 요청하는 내용입니다.
AI 에이전트 워크플로우(workflow)가 모델에 프롬프트(prompt)를 보낼 때마다, 그 프롬프트에 포함된 모든 내용은 제3자에게 전달됩니다. 상황은 이렇습니다. 고객의 이메일, 전화번호, 카드 번호, 지원 티켓에 포함된 집 주소 등: 입력값에 포함되어 있다면, 실행 시마다 아무도 검토하지 않는 API 호출의 요청 본문(request body)에 포함됩니다. 이는 가설이 아니라 실제 시스템이 작동하는 방식이며, 실제로 무엇이 흐르고 있는지 확인하는 사람은 거의 없습니다.
우리는 실제 사용자 데이터에 접근하는 AI 에이전트 워크플로우를 구축하면서 이 문제에 직접 부딪혔습니다. n8n의 내장 가드레일(Guardrails)은 값을 [REDACTED]로 대체하여 개인정보(PII)를 마스킹(masking)하지만, 이는 파괴적인 방식입니다. 이메일이 [REDACTED]가 되는 순간, 확인 메일을 보내거나, CRM에 기록하거나, 감사 로그(audit log)를 생성해야 하는 모든 후속 노드(downstream node)는 더 이상 작업할 데이터가 남지 않게 됩니다. 데이터 유출을 막으려다 워크플로우를 망가뜨린 셈이며, 실제로 문제를 해결한 것이 아닙니다.
그래서 우리는 데이터를 파괴하지 않고, 원본 데이터를 봐서는 안 되는 단 하나의 구성 요소, 즉 모델(model)로부터 데이터를 숨기는 도구를 만들었습니다.
계정 생성 없이 약 1분 만에 체험해 보세요:
npm install n8n-nodes-privent
전체 소스 코드, 이슈(issues), 그리고 위협 모델(threat model) 문서는 모두 리포지토리(repo)에 있습니다: github.com/privent-ai/n8n-nodes-privent.
삭제(Redaction)가 아닌 가역적 토큰화(Reversible tokenization)
LLM이 프롬프트를 보기 전에 user@acme.com은 [EMAIL_001]로 변환됩니다. 에이전트는 전체 과정 동안 토큰(token)을 사용하여 추론하고, 계획을 세우며, 도구(tools)를 호출합니다. 에이전트는 원본 값을 절대 갖지 않습니다. 오직 여러분이 신뢰할 수 있다고 명시적으로 표시한 송출 지점(egress points)에서만 원본 값이 복원됩니다. 삭제(Redaction)는 정보를 버리는 것이지만, 토큰화(Tokenization)는 원본 값이 존재할 수 있는 위치를 이동시키는 것입니다.
기본 요소 (The primitives)
우리는 이를 하나의 거대하고 불투명한 노드가 아닌, 여섯 가지의 조합 가능한 구성 요소로 설계했습니다:
- 세션 (Session): 범위가 지정된 토큰 금고 (token vault)입니다. 워크플로우 실행 내의 모든 노드는 세션을 공유하므로,
[EMAIL_001]은 노드마다 새로운 무작위 토큰이 생성되는 것이 아니라 해당 실행 내의 모든 곳에서 동일한 주소를 의미합니다. - 토큰화 (Tokenize): 페이로드(payload)를 스캔하여 573개의 로컬 정규 표현식 (regex) 패턴을 바탕으로 민감한 엔티티 (entity)를 탐지하고, 일치하는 항목을 결정론적 토큰 (deterministic tokens)으로 교체합니다. 이 과정은 완전히 n8n 내부에서 실행됩니다. 이 단계에서는 인스턴스 외부로 아무것도 나가지 않습니다.
- 리스크 체크 (Risk Check): 선택 사항입니다. 페이로드를 우리의 ML 스코어링 백엔드 (ML scoring backend)로 전송하여 엔티티 세부 분석과 함께 리스크 수준 (LOW/MEDIUM/HIGH/CRITICAL)을 받아옵니다. 이 단계를 완전히 건너뛰면 로컬 탐지만을 사용하는 상태가 됩니다.
- 역토큰화 (Detokenize): 토큰을 실제 값으로 다시 변환하지만, 워크플로우 설계자가 의도적으로 배치한 시점에서만 수행됩니다. 에이전트가 도구로 호출할 수 없으며 (
usableAsTool: false), 엄격 모드 (Strict Mode)에서는 목적지 URL이 명시적인 신뢰할 수 있는 싱크 (Trusted Sinks) 목록에 있지 않으면 역토큰화를 차단합니다. - 감사 (Audit): 모든 토큰화/역토큰화 작업, 리스크 점수, 세션 ID에 대한 구조화된 이벤트로, 우리의 백엔드 또는 사용자가 직접 설정한 웹훅 (webhook)으로 전송됩니다.
- 핸드오프 (Handoff): 워크플로우가 하위 에이전트나 외부 시스템으로 위임할 때 신뢰 경계 (trust boundary)를 표시합니다. 이를 통해 감사 추적 (audit trail)이 핸드오프 시점에서 끊기지 않고 에이전트 간 이동(agent hops) 전반에 걸쳐 일관되게 유지됩니다.
여섯 가지 요소 모두가 공개적으로 구현되어 있으며, 이곳에 설명된 내용은 실제 코드와 다르게 기술된 것이 없습니다. 리포지토리의 Privent.node.ts가 정확한 소스 코드입니다: github.com/privent-ai/n8n-nodes-privent.
573개의 탐지기, 그리고 이 숫자가 들리는 것보다 중요한 이유
우리는 이메일, 전화번호, 카드, SSN(사회보장번호), IBAN(국제 은행 계좌 번호) 수준에서 멈추지 않았습니다. 그런 것들은 정규 표현식 작업 하루 치 정도의 분량이며, 지구상의 모든 DLP(데이터 유출 방지) 도구가 이미 갖추고 있는 기능입니다. 실제로 의미 있는 탐지기들은 실제 산업을 위한 실제 워크플로우를 구축하는 과정에서 탄생했습니다:
- 지역 정부 ID: Dutch BSN, Indian Aadhaar, Polish PESEL, Brazilian CPF, Singapore NRIC, South Korean RRN (주민등록번호), Turkish ID, Emirati ID
- 클라우드 및 플랫폼 자격 증명 (Credentials): AWS Access Key, AWS ARN, GitHub tokens, OpenAI keys, Stripe, Heroku, Firebase, Azure Resource ID, GCP service accounts
- 암호화폐 주소 (Crypto addresses): Bitcoin, Ethereum, Solana, Cardano, Monero, Tezos, Algorand
- 15개 이상의 운송업체를 아우르는 배송 추적 번호
- 긱 이코노미 (Gig-economy) 식별자: Uber trip IDs, DoorDash refs, Upwork job IDs (핀테크 및 HR 자동화 워크플로우에서 이러한 데이터가 끊임없이 발생하며, 다른 어떤 도구도 이를 탐지하지 못하기 때문입니다)
90개 이상의 국가와 산업을 아우르는 573개의 엔티티 유형 (entity types)이 모두 n8n 내부에서 로컬로 평가됩니다.
마케팅 수식어를 걷어낸 아키텍처 (Architecture)
나중에 알게 되는 것보다, 경계가 어디인지 정확히 아는 것이 낫다고 판단했습니다:
- 탐지 (Detection) (정규 표현식 (regex), 573개 패턴 전체): n8n 내부에서 수행됩니다. 이를 위해 데이터가 인스턴스를 벗어나지 않습니다.
- 토큰 금고 (Token vault) (값과 토큰의 매핑): 서버 측 (server-side)에서 수행됩니다. Privent Cloud (
api.privent.ai)를 사용하거나 자체 호스팅 (self-hosted)할 수 있습니다. Base URL 자격 증명을 자체 배포 환경으로 지정하면 엔드 투 엔드 (end-to-end)로 직접 제어할 수 있습니다. - ML 리스크 스코어링 (ML risk scoring): 서버 측에서 수행되는 선택 사항이며, 동일한 백엔드를 사용합니다.
- 감사 데이터 수집 (Audit ingestion): 서버 측에서 수행되거나, 원하는 곳을 가리키는 웹훅 (webhook)을 통해 수행됩니다.
n8n 노드 자체는 MIT 라이선스입니다. 백엔드는 저희가 호스팅 서비스로 운영하는 것이며, 사용자가 직접 교체할 수 있습니다. n8n.io/integrations/privent의 검증된 통합 파트너이며, 3,000개 이상의 npm 설치를 기록 중이고, 현재 버전은 v2.2.1입니다.
우리가 단독으로 해결할 수 없는 것들
저희는 리포지토리 (repo)가 완성된 척하기보다, 실제 해결해야 할 문제들을 나열하고자 합니다:
탐지기 범위 (Detector coverage)가 서구권 및 주요 아시아 지역에 편중되어 있습니다. 발칸 반도 국가 ID 형식, 중앙아시아 여권 형식, MENA (중동 및 북아프리카) 세금 ID 형식 등이 누락되어 있으며, 아직 해당 지역을 위해 구축하지 않았기 때문에 우리가 무엇을 놓치고 있는지조차 모르는 수십 개의 형식이 더 있을 것입니다. 탐지기를 추가하는 것은 진정으로 하나의 PR (Pull Request) 작업입니다: kind, regex, confidence, category만 작성하면 모든 사용자에게 즉시 배포됩니다.
Detokenize에 대한 프롬프트 인젝션 (Prompt injection)은 실질적이며 아직 충분히 테스트되지 않은 위협입니다. 해당 노드는 도구 호출이 불가능 (non-tool-callable)하며 Strict Mode와 Trusted Sinks에 의해 보호되고 있지만, 에이전트가 우리의 detokenize API를 직접 호출하도록 유도하는 정교하게 설계된 페이로드는 우리가 충분히 스트레스 테스트를 거치지 않은 문서화된 위협 모델 (threat model)입니다. 만약 공격 보안 (offensive security) 작업을 하신다면, 이곳은 단연 가장 가치 있는 탐색 지점이며, 우리는 다른 사람이 아닌 여러분이 이 허점을 먼저 찾아내기를 진심으로 바랍니다.
문맥 없는 탐지 (Context-free detection)에는 실제적인 비용이 따릅니다. 16자리 숫자가 실제로는 하드웨어 주문 ID임에도 불구하고 가능한 신용카드 번호로 플래그가 지정됩니다. 우리는 문맥 레이어 (context layer)를 작업 중이지만, 정밀도 (precision)를 확보하기 위해 커버리지 (coverage)를 포기하지 않으면서 이 문제를 깔끔하게 해결할 방법은 아직 없습니다. 만약 다른 곳에서 이 문제를 해결하셨다면, 그 방법을 공유해 주시기 바랍니다.
⭐ 살펴볼 곳
- GitHub (소스, 이슈, 위협 모델 문서): github.com/privent-ai/n8n-nodes-privent
- npm: https://www.npmjs.com/package/n8n-nodes-privent
실제 사용자 데이터에 접근하는 AI 에이전트를 구축하고 있다면, 저장소를 클론하여 Detokenize 경로를 깨뜨려 보십시오. 그 부분이 바로 저희가 아닌 외부 사람들에 의해 가장 많이 테스트되기를 원하는 부분입니다. 무언가를 발견하면 이슈 (issue)를 생성해 주세요. 실제 문제를 발견하면 수정할 것이며, 아무리 당혹스러운 내용이라도 이슈 스레드에 공개적으로 알리겠습니다.
저희가 놓치고 있는 지역 ID 형식을 발견하신다면, PR (Pull Request)은 생각보다 간단합니다: kind, regex, confidence, category만 작성하면 끝입니다.
지금 당장 해당 사항이 없더라도 이 정보가 유용하다면: 저장소에 스타 (star)를 눌러주시는 것이, 다음 에이전트 워크플로우 구축자가 첫 데이터 유출을 겪은 후가 아니라 겪기 전에 이 프로젝트를 접할 수 있게 만드는 진정한 방법입니다. 이는 형식적인 절차가 아니라, 이와 같은 프로젝트를 위한 실제적인 배포 메커니즘입니다.
n8n nodes: MIT 라이선스. Backend: 호스팅 서비스 또는 셀프 호스팅 (self-hosted), 선택 사항.
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기