隐私政策
0. 一句话
你发出的消息正文在你的设备上被加密,只有收信人能读。我们读不了,租给我们服务器的 Google 也读不了。
我们能看到的是:一场对话发生过——里面有哪些账号,什么时候活跃。把这部分也去掉比加密内容难得多,我们还没做完。这份政策会说清楚,界线目前划在哪里。
1. 哪些内容是端到端加密的
在你的设备上加密,我们和 Google 都读不了:
- 你的消息正文。
- 你发送的文件、照片、音频、视频的内容。
- 链接预览。
- 语音和视频通话,两台设备之间使用 WebRTC 强制的 DTLS-SRTP。
大多数一对一和群聊消息还额外使用了棘轮(ratchet):每条消息有自己的密钥,所以即使你的设备被攻破,也读不出更早的消息。如果对方的客户端还没有发布较新的密钥材料,这个会话会回落到一把长期密钥,那种情况下没有上面这个性质。消息下方的标记会告诉你这一条实际走的是哪一种。
只有一件事会越过这条线,而且只在你主动要求时:在维基百科查一个名字,发出去的是那一个名字,而不是它所在的消息。发给谁写在第 6 节;查询只在你点的那一下发生,除此之外不发生,所以没有什么需要关掉。摘要、翻译和转写同样会越过这条线——它们在本次发行中是关闭的,应用里没有任何开关可以打开它们。
2. 哪些没有加密,以及我们能看到什么
加密保护的是内容,不是「有过一场对话」这件事本身。下面这些在我们的服务器上是明文:
- 每场对话里有谁,以及它何时创建、何时最后活跃。
- 每条消息的时间戳,以及你有多少条没读。
- 附件的文件名、类型和大小。字节是加密的,对它的描述不是;密文的长度也框定了原文的长度。
- 你的好友和好友请求。
- 通话信令——有过一次通话、打给谁、什么时候。不包括音频和视频内容。
「正在输入」和已读回执默认关闭,除非你自己打开;关闭期间不会写入任何东西。
已经不在这里的:你的邮箱地址和你的名字。自 2026 年 9 月起,账号记录里只剩一个账号标识符——而且从那时起,任何地方都不再有邮箱可留。注册不会问你任何关于你的事:你的账号就是 24 个助记词,Firebase Authentication 校验的凭证由它推导而来;它保存的只是一个随机标签,域名根本收不到邮件。
另外要单独说一句:因为这个应用跑在 Google Firebase 上,Google 能看到你的设备每一次连接的 IP 地址和时间。这是托管方式带来的,不是应用本身的问题,我们没法用加密把它消掉。
3. 别人怎么找到你
他们搜不到你。这里没有目录——不能按邮箱、手机号或名字查找——服务器会拒绝任何这样的查询。
你要联系一个人,是通过其他渠道把一条邀请链接发给他,用你本来就在用的任何方式都行。一条链接只能用一次,24 小时后过期,你随时可以撤销。你怎么称呼一个人,是你自己给他的标签,只留给你;如果对方做过自我介绍,那个名字是加密送到你这里的。
4. 我们收集什么
- 账号数据:一个账号标识符,以及从你的助记词推导出的凭证,保存在 Firebase Authentication 里。没有邮箱地址,没有电话号码,没有名字——注册时一样都不问。
- 消息和附件的密文,以及第 2 节里的元数据。
这就是全部。没有分析统计,也没有崩溃上报。这个应用过去会把屏幕浏览发给 Firebase Analytics、把崩溃报告发给 Firebase Crashlytics,两者都带着你的账号标识,所以都不是匿名的;现在它们都被删掉了,连同发送它们的那两个库。错误只在开发阶段打印在开发者自己的机器上,不去任何别的地方。
5. 数据存在哪里
存在 Google Firebase 上——Firestore、Storage 和 Authentication——由安全规则决定谁可以读写每一份文档。
在你的设备上,缓存的消息、设置和应用锁 PIN 用一把「每台设备一把」的密钥加密,这把密钥保存在系统密钥库里(iOS 的 Keychain、Android 的 Keystore),不是放在普通的应用存储里。
解密你消息的私钥永远不会离开你的设备,除非以助记词的形式、由你自己选择抄下来。我们不持有它,也无法替你恢复。一旦丢失,发给那台设备的消息就再也读不出来了——任何人都读不出来,包括我们。
1.2.0 及更早的版本还会在每次登录时,把助记词的一份副本存入 Android 系统自带的备份 Google Block Store。如果你的手机设置了锁屏,这份副本会以端到端加密的形式同步到你的 Google 账号。从 1.2.1 版起,应用不再这样做,并会在每次启动时删除这份副本。
6. 还有谁会拿到数据
我们不出售、不交易、不出租你的个人信息。数据会到达:
- Google Firebase——我们的托管服务商,如上所述。
- Cloudflare Realtime——当你的设备和对方的设备无法直接互联时,用于中继通话的音视频。
- 维基媒体基金会——当你点击某个名字去维基百科查它时,那一个名字。
- Google Cloud Speech-to-Text——当你请求转写时,一条语音消息的音频。
- Google Cloud Translation——当你请求翻译时,一条消息的文字。
- Cloudflare Workers AI——当你请求摘要或就一段对话提问时,该对话最近至多 50 条消息。
后三者在本次发行中是关闭的。应用里没有任何开关可以打开转写、翻译或摘要,所以没有任何内容会到达这三个服务。之所以列出而不是删掉,是因为代码还在、这些功能还打算回来——它们回来的时候,会连同这段披露和首次使用前的询问一起回来。到那时发出去的东西,是为了产出你要的结果,不用于训练任何模型;转写和翻译都不会保存在我们的服务器上。
维基百科查询没有开关,因为没有什么常驻的东西可关:它只在你点的那一下运行,此外不运行。维基百科收到的是那一个名字和你的 IP 地址,跟你自己在它的搜索框里输入一样——没有账号,没有消息,没有对话。返回的内容只是显示出来,不保存,也不会写进对话里。
Cloudflare Realtime 同样没有开关。大多数通话不需要它:两台能够直接互联的设备——同一网络下的大多数通话——不经过它就能连上,不会被中继。当无法直连时——常见于双方处于不同的移动网络——已经加密的通话会被中继,而不是直接连不上。Cloudflare 能看到的是双方的 IP 地址、通话的时间,以及大致的数据量;音视频内容仍然受第2节所述的同一套 DTLS-SRTP 加密保护,中继并不会解密它们。
如果法律要求,我们可能披露我们持有的内容。我们持有的就是第 2 节那份清单。我们拿不出消息内容,因为我们读不了。
7. 推送通知
通知由 Firebase Cloud Messaging 送达。你的设备令牌存放在账号中一块只有你能读的私有区域里。
通知里不带消息正文。是你的设备在本地解密消息、组装出你看到的那句话;Google 送的是信封,不是里面的内容。
8. 你可以做什么
- 在「我的」页面删除账号。属于一场对话共同部分的内容——比如一条通话记录——会留给另一位参与者,因为那也是他的记录。
- 在「我的」页面导出你的数据。
- 按会话设置消息过期:1 小时、24 小时、7 天或 30 天。
- 打开或关闭「正在输入」和已读回执。两者默认都是关闭的。
- 用 PIN 或生物识别锁定应用。
- 撤销一条你已经发出去的邀请链接。
如果你希望我们手动删除某些东西,写信给我们。
9. 保留期限
你的账号存在期间,我们保留你的数据。删除账号就会删除这些数据,上面提到的共同持有的内容除外。按会话设置的过期时间会按你定的节奏删除消息。
10. 你应该知道的局限
这些我们宁可主动告诉你,也不愿你自己发现。
- 公钥在第一次见到时就被信任。如果有人在你们交换第一条消息之前就替换了公钥,这场对话会被加密给错误的人,而且看起来完全正常。之后公钥再变化时应用会警告你,也会显示一个可以线下核对的安全码——但没有任何机制强制你去核对。
- 同一时间只能用一台设备。你的助记词能恢复打开历史消息的密钥,所以在新设备上登录不会丢掉你已经收到的内容。但前向保密的会话用的是第二把密钥,它从不离开生成它的那台设备:最后登录的那台才是这类消息送达的地方,期间封给另一台的内容无法搬过来。
- 加密功能出现之前发的消息保持原样,没有做过追溯转换。
- 这个应用没有经过独立的第三方安全审计。
11. 儿童
Chatterbox 不面向 13 岁以下儿童,我们也不会在知情的情况下收集他们的信息。如果你认为有儿童向我们提供了个人信息,请联系我们,我们会删除。
12. 变更
我们可能会更新这份政策。重大变更会在应用内公告,顶部的日期就是它最后一次修改的时间。
13. 联系我们
关于这份政策的问题,请联系:[email protected]
14. 检查新版本
Google Play 并不是这个应用到达你安卓手机的途径,它是从 chatterbox.fans 下载的——而一个不在循环里的应用商店没法替你检查更新,所以这个应用可以自己检查,只要你让它这么做。
点击"立即检查"会向 chatterbox.fans 发送一次请求,询问当前的版本号。这次请求只携带你的 IP 地址,没有别的——没有账号、没有设备标识符、没有消息内容。返回的是一个版本号,在你的手机上与当前运行的版本比对;不会自动下载任何东西,这次检查也不会写入到对话记录里。
这个功能没有开关,因为没有什么可以关闭的:它只在你点击时运行,除此之外不会运行。
如果你安装了更新,它会用同一个签名密钥原地替换应用,和 Google Play 推送更新的方式一样。