安全

“相信我们”不是答案。

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 提供了更完整的版本,包括我们选择如实说明而非略去的已知不足。