“相信我们”不是答案。
Klorn 替你读别人写来的邮件,这样你就不必亲自去读。这句话本身就是威胁模型:主要输入是陌生人写的文字,其中有些人怀有恶意。下面列出这套架构实际能保证的内容,以及实现每一项的文件。
本译文仅为方便阅读而提供,以英文版本为准。 阅读英文版
Google 验证与独立评估
Google 已于 2026-10-03 完成对 Klorn 的 OAuth 验证审核。在此之前,Klorn 由 TAC Security 依据 CASA Tier 2 进行了独立评估,结果为 In Compliance(符合要求)。该评估出具的验证函(Letter of Validation)随后提交给了 Google。
- 评估
- CASA Tier 2,动态应用安全测试(DAST),由 TAC Security 执行
- 结果
- In Compliance(符合要求),保证级别 AL1(OWASP ASVS Level 1)
- 日期
- 2026-08-12 评估 · 2026-08-30 出具报告 · 2026-10-03 Google 审核完成
- 重新评估
- 每年一次。下一次评估应于 2027 年 8 月进行
五个 Google 权限范围,以及各自的用途
这五个是该次审核中获批的 Google 权限范围,也是 Klorn 申请的全部邮件和日历权限范围。它不申请 Gmail 的完全访问权限范围;在日历方面,只申请 calendar.events 和 calendar.readonly——从不申请完整的日历权限范围。
gmail.readonly- 读取你的邮件,以便 Klorn 对其分拣、展示每个判断的理由,并在你需要时总结整个会话。
gmail.modify- 在你于 Klorn 中操作时更改邮件状态:归档或取消归档、移到垃圾箱或移回、加星标、标为已读或未读,以及把回复草稿保存到 Gmail。
gmail.send- 仅在你批准时发送邮件——你确认的回复、你要求的 mailto 退订——或者按你自己设定的规则发送的自动回复。
calendar.readonly- 读取你所有日历的忙闲状态,以便用你的真实日程核对会议邮件,并发现冲突。
calendar.events- 在你要求 Klorn 这样做时,在你的主日历上创建、修改或删除日程——不涉及日历设置或共享。
使用 Google 登录只会请求你的姓名和邮箱地址。邮件和日历权限范围要等到你连接邮箱时,才会在第二个授权页面中请求——而只连接日历时,只请求 calendar.readonly,完全不含邮件权限范围。(openid 和 userinfo.email/userinfo.profile 也出现在那个文件中——它们用于识别登录的是哪个账户,不属于敏感权限,也不在 Google 审核的范围内。)
数据去向
OAuth 令牌在存储前用 AES-256-GCM 加密,所有托管服务都只走 TLS,分析数据从不包含邮件内容——每一项对应的文件见下表。日志按数据保留多久中的固定时间表过期。如果你希望邮件完全不经过我们的服务器,可以自托管同一套代码,搭配你自己的模型密钥或本地模型。隐私政策见 /privacy。
这意味着什么,又不意味着什么。该审核和评估检查的是 Klorn 如何处理它所申请的 Google 数据。它们并不代表 Google 为 Klorn 背书,也不涵盖这些权限范围以外的任何内容。目前你可以连接 Gmail、Google 日历、Naver 邮箱(测试版)和 iCloud 邮箱(测试版);其他服务商暂不可用。
架构能保证什么
| 属性 | 实际情况 | 在哪里核查 |
|---|---|---|
| 邮件是敌意输入 | 每封邮件的正文、主题以及第三方字符串在送达模型之前,都会被包进 <untrusted_content> 标记中;已有的包装标签会先被剥离,使精心构造的邮件无法闭合这层包装。提示注入属于防御范围,而不是被默认接受的局限 | SECURITY.md |
| 令牌静态加密 | 令牌写入数据库之前即以 AES-256-GCM 加密,并支持密钥环轮换(v1/v2 信封),怀疑泄露时无需全体同时切换即可轮换。在 dev/test 之外缺少密钥会直接中止启动,而不是降级运行 | crypto-tokens.ts |
| 外发操作 | 发送、永久删除和向外部转发不能凭分类器的置信度执行。每一项都需要一份在批准时生成的回执,其中锁定规范化载荷的 sha256,并在执行时再次校验。如果期间有任何变化,操作会被拒绝 | attention-floor.ts |
| 开发便利设置 | 开发用 JWT 密钥、开发用加密密钥、localhost CORS 和演示用户都位于 dev/test 白名单之后,对其他任何 NODE_ENV 都默认拒绝(fail closed) | env.ts |
| 分析 | 仅限第一方。Klorn 自己的 Postgres 中一份简短的粗粒度事件名白名单。没有外部追踪器,也从不包含邮件内容 | analytics.ts |
| 传输加密 | 所有托管服务一律仅用 TLS——API、网页、Google API、模型服务商 | self-hosting.md |
数据保留多久
日志保留期由定时清理任务强制执行,而不只是一句承诺:代理操作、邮件处理、推送投递和 webhook 记录在 90 天后删除,速率限制记录在 30 天后删除,令牌用量记录为分析成本偏差保留 180 天后删除。这些期限是源代码中的一张表,而不是我们可以悄悄放宽、却不在 diff 中显现的设置。
报告漏洞
请发邮件至 k0820086@gmail.com,附上问题描述和复现步骤。对于可被利用的问题,请不要公开提交 issue。你会在几天内收到确认;针对批准底线和令牌加密路径的修复优先于其他一切工作。机器可读的联系方式见 /.well-known/security.txt。
我们没有声称的事。除上述 CASA Tier 2 评估外,Klorn 没有做过第三方渗透测试或 SOC 2 审计,本页也不暗示做过。这是一个由一人维护、处于测试阶段的产品。补偿性控制在于:代码以 AGPL-3.0 开源,上文已按文件列出与安全相关的路径——你可以直接阅读,而不必只听我们的一面之词。
SECURITY.md 提供了更完整的版本,包括我们选择如实说明而非略去的已知不足。