分类系统
数据分类系统是 Triggerfish 安全模型的基础。每一条进入、流经或离开系统的数据都携带一个分类标签。这些标签决定数据可以流向哪里——更重要的是,不能流向哪里。
分类级别
Triggerfish 为所有部署使用统一的四级有序层次结构。
| 级别 | 等级 | 描述 | 示例 |
|---|---|---|---|
RESTRICTED | 4(最高) | 需要最高保护的最敏感数据 | 并购文件、董事会材料、个人身份信息、银行账户、医疗记录 |
CONFIDENTIAL | 3 | 业务敏感或个人敏感信息 | CRM 数据、财务数据、人事记录、合同、税务记录 |
INTERNAL | 2 | 不宜外部共享 | 内部知识库、团队文档、个人笔记、联系人 |
PUBLIC | 1(最低) | 任何人都可以查看 | 营销材料、公开文档、一般网络内容 |
禁止降级写入规则
Triggerfish 中最重要的安全不变量:
数据只能流向相同或更高分类级别的渠道或接收者。这是一条固定规则——不能被配置、覆盖或禁用。LLM 不能影响此决策。 :::
这意味着:
- 包含
CONFIDENTIAL数据的响应不能发送到PUBLIC渠道 - 被标记为
RESTRICTED的会话不能输出到低于RESTRICTED的任何渠道 - 没有管理员覆盖、没有企业逃逸通道、没有 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 - 分类来自平台 API,而非 LLM 解释
WhatsApp / Telegram / iMessage
- 企业版:通过与 HR 目录同步匹配的电话号码确定内部与外部
- 个人版:所有接收者默认为
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 自动对所有发出的数据进行分类 |
