분류 시스템
데이터 분류 시스템은 Triggerfish 보안 모델의 기반입니다. 시스템에 들어오고, 이동하고, 떠나는 모든 데이터는 분류 레이블을 전달합니다. 이 레이블은 데이터가 어디로 흐를 수 있는지 -- 그리고 더 중요하게는 어디로 흐를 수 없는지를 결정합니다.
분류 수준
Triggerfish는 모든 배포에 단일 4단계 정렬 계층 구조를 사용합니다.
| 수준 | 순위 | 설명 | 예시 |
|---|---|---|---|
RESTRICTED | 4 (최고) | 최대 보호가 필요한 가장 민감한 데이터 | M&A 문서, 이사회 자료, PII, 은행 계좌, 의료 기록 |
CONFIDENTIAL | 3 | 비즈니스 민감 또는 개인 민감 정보 | CRM 데이터, 재무, HR 기록, 계약, 세금 기록 |
INTERNAL | 2 | 외부 공유를 위한 것이 아닌 정보 | 내부 위키, 팀 문서, 개인 메모, 연락처 |
PUBLIC | 1 (최저) | 누구나 볼 수 있는 안전한 정보 | 마케팅 자료, 공개 문서, 일반 웹 콘텐츠 |
No Write-Down 규칙
Triggerfish에서 가장 중요한 보안 불변 규칙:
데이터는 동일하거나 더 높은 분류의 채널 또는 수신자에게만 흐를 수 있습니다. 이것은 고정 규칙입니다 -- 구성, 재정의 또는 비활성화할 수 없습니다. LLM은 이 결정에 영향을 미칠 수 없습니다. :::
이것은 다음을 의미합니다:
CONFIDENTIAL데이터를 포함하는 응답은PUBLIC채널로 전송할 수 없습니다RESTRICTED로 taint된 세션은RESTRICTED미만의 어떤 채널로도 출력할 수 없습니다- 관리자 재정의, 엔터프라이즈 escape hatch, LLM 해결 방법이 없습니다
유효 분류
채널과 수신자 모두 분류 수준을 전달합니다. 데이터가 시스템을 떠나려 할 때, 대상의 유효 분류가 무엇을 보낼 수 있는지 결정합니다:
EFFECTIVE_CLASSIFICATION = min(channel_classification, recipient_classification)유효 분류는 두 값 중 낮은 값입니다. 이는 높은 분류의 채널과 낮은 분류의 수신자의 조합이 여전히 낮은 분류로 취급된다는 것을 의미합니다.
| 채널 | 수신자 | 유효 분류 | CONFIDENTIAL 데이터를 받을 수 있습니까? |
|---|---|---|---|
INTERNAL | INTERNAL | INTERNAL | 아니오 (CONFIDENTIAL > INTERNAL) |
INTERNAL | EXTERNAL | PUBLIC | 아니오 |
CONFIDENTIAL | INTERNAL | INTERNAL | 아니오 (CONFIDENTIAL > INTERNAL) |
CONFIDENTIAL | EXTERNAL | PUBLIC | 아니오 |
RESTRICTED | INTERNAL | INTERNAL | 아니오 (CONFIDENTIAL > INTERNAL) |
채널 분류 규칙
각 채널 유형에는 분류 수준을 결정하는 특정 규칙이 있습니다.
이메일
- 도메인 매칭:
@company.com메시지는INTERNAL로 분류됩니다 - 관리자가 어떤 도메인이 내부인지 구성합니다
- 알 수 없거나 외부 도메인은
EXTERNAL로 기본 설정됩니다 - 외부 수신자는 유효 분류를
PUBLIC으로 낮춥니다
Slack / Teams
- 워크스페이스 멤버십: 같은 워크스페이스/테넌트의 멤버는
INTERNAL입니다 - Slack Connect 외부 사용자는
EXTERNAL로 분류됩니다 - 게스트 사용자는
EXTERNAL로 분류됩니다 - 분류는 LLM 해석이 아닌 플랫폼 API에서 도출됩니다
WhatsApp / Telegram / iMessage
- 엔터프라이즈: HR 디렉터리 동기화와 매칭된 전화번호가 내부 vs. 외부를 결정합니다
- 개인: 모든 수신자는 기본적으로
EXTERNAL입니다 - 사용자가 신뢰할 수 있는 연락처를 표시할 수 있지만, 이는 분류 계산을 변경하지 않습니다 -- 수신자 분류를 변경합니다
WebChat
- WebChat 방문자는 항상
PUBLIC으로 분류됩니다 (방문자는 소유자로 확인되지 않습니다) - WebChat은 공개 대면 상호 작용을 위한 것입니다
CLI
- CLI 채널은 로컬에서 실행되며 인증된 사용자에 따라 분류됩니다
- 직접 터미널 접근은 일반적으로
INTERNAL이상입니다
수신자 분류 소스
엔터프라이즈
- 디렉터리 동기화 (Okta, Azure AD, Google Workspace)가 수신자 분류를 자동으로 채웁니다
- 모든 디렉터리 멤버는
INTERNAL로 분류됩니다 - 외부 게스트 및 벤더는
EXTERNAL로 분류됩니다 - 관리자가 연락처별 또는 도메인별로 재정의할 수 있습니다
개인
- 기본값: 모든 수신자는
EXTERNAL입니다 - 사용자가 인플로우 프롬프트 또는 컴패니언 앱을 통해 신뢰할 수 있는 연락처를 재분류합니다
- 재분류는 명시적이며 로깅됩니다
채널 상태
모든 채널은 데이터를 전달하기 전에 상태 머신을 통과합니다:
| 상태 | 데이터 수신 가능? | 에이전트 컨텍스트에 데이터 전송 가능? | 설명 |
|---|---|---|---|
UNTRUSTED | 아니오 | 아니오 | 신규/알 수 없는 채널의 기본값. 완전히 격리됩니다. |
CLASSIFIED | 예 (정책 범위 내) | 예 (분류 포함) | 검토되어 분류 수준이 할당되었습니다. |
BLOCKED | 아니오 | 아니오 | 관리자 또는 사용자에 의해 명시적으로 차단되었습니다. |
보안 새 채널은 항상 UNTRUSTED 상태로 시작합니다. 에이전트로부터 어떤 데이터도 받을 수 없고 에이전트 컨텍스트에 데이터를 보낼 수 없습니다. 관리자(엔터프라이즈) 또는 사용자(개인)가 명시적으로 분류할 때까지 채널은 완전히 격리된 상태로 유지됩니다. :::
분류와 다른 시스템의 상호 작용
분류는 독립적인 기능이 아닙니다 -- 전체 플랫폼에서 결정을 주도합니다:
| 시스템 | 분류 사용 방식 |
|---|---|
| 세션 taint | 분류된 데이터에 접근하면 세션이 해당 수준으로 상승합니다 |
| 정책 hook | PRE_OUTPUT가 세션 taint를 대상 분류와 비교합니다 |
| MCP Gateway | MCP 서버 응답이 세션을 taint하는 분류를 전달합니다 |
| 데이터 계보 | 모든 계보 기록에 분류 수준과 이유가 포함됩니다 |
| 알림 | 알림 콘텐츠도 동일한 분류 규칙의 대상입니다 |
| 에이전트 위임 | 수임 에이전트의 분류 상한이 호출자의 taint를 충족해야 합니다 |
| Plugin 샌드박스 | Plugin SDK가 모든 방출 데이터를 자동 분류합니다 |
