Skip to content

VMax MVP 隐私边界与数据保留

1. 状态与保证边界

本文定义数据最小化、可见方和保留上限的设计基线,不替代隐私政策、App Privacy、法律审查或服务端/Push 的具体实现。

VMax 的目标是保护内容,不承诺隐藏全部元数据。网络、消息实例、Push Gateway、APNs 或合法接收端仍可能观察 IP、时间、频率、大小、实例域名、通知活动或最终明文。

2. 来源分类

v1.1 MUST

  • 注册不要求手机号、邮箱、Apple 登录或通讯录权限。
  • 服务端、对象存储、Push Gateway 不得获得消息明文、私钥或会话密钥。
  • APNs payload 不得包含发送人、正文、会话 ID、完整实例域名或附件信息。
  • 日志、崩溃、分析、诊断导出禁止消息内容、私钥、备份密码、完整地址、APNs token 和主/假密码材料。
  • 各服务器 Profile、Real/Decoy 的数据、Keychain 与通知路由隔离。
  • 举报只有在用户明确选择并确认后,才可把所选内容解密提交;默认不上传聊天内容。

说明书默认/建议

  • 未送达密文默认 7 天、可配置 1 至 30 天;ACK 后立即删除、最长 1 小时清理。
  • 脱敏服务日志默认 7 天;速率限制状态不超过 24 小时;客户端诊断日志本地保存 24 小时。
  • 首发不集成第三方广告、行为分析或会话录屏 SDK。

这些保留值仍需 ADR-009、容量、滥用防护和法律要求共同确认,不能视为已部署事实。

3. 数据流与可见方

数据iOS 客户端消息实例Push Gateway/APNs备份/外部位置
消息正文端点明文;本地加密存储不可见不可见用户选择包含时,仅在加密包内
密文信封生成/接收短期路由与离线存储Push Gateway 不接收默认不需要
身份/设备私钥仅本地封装保存不可见不可见仅加密备份包
公开身份/预密钥本地生成为发现/握手保存不可见可包含于加密备份
VMax 完整地址用户界面/本地联系人路由所需最小部分禁止加密包内可包含
IP、时间、大小网络栈可见可观察网关/APNs 可观察其链路导出位置提供方可观察元数据
APNs token本地系统接口仅按 Push 架构受控处理网关/APNs 可见禁止进入备份/日志
wake_route_id本地映射仅提交随机引用可见随机引用不应备份为长期身份材料
主/假密码和 KDF 材料仅本地受控存储禁止禁止禁止进入聊天备份;独立恢复策略待决
Decoy 状态本地中性表示禁止不应可区分不应暴露真实空间存在

PostgreSQL 是密文与投递状态的持久权威。Redis/队列只保存短期、可重建的协调状态,不能复制消息明文、私钥或形成长期关系图谱。S3 兼容对象存储在文本 MVP 不启用;未来附件必须由客户端独立加密后再上传,且文件名、MIME、尺寸和缩略图仍需单独做元数据最小化。

4. 服务端与 Push 接口约束

具体 schema 交给服务端和 Push 任务;必须满足:

  • 服务端只接收认证设备、收件设备引用、密文信封、大小、TTL、幂等和路由所需字段。
  • 不以 URL query 传 token、完整地址或敏感标识;访问日志默认不记录 query 和 body。
  • Push Gateway API 不得出现 envelope、消息摘要、联系人、会话或实例完整域名字段。
  • wake_route_id 必须高熵、可轮换、用途受限;不能把设备 ID、VMax ID 或 APNs token 直接编码其中。
  • Push Gateway 与消息实例的日志不能通过稳定全局标识轻易合并;必要关联使用短期、用途限定引用。
  • 关闭官方 Push 后,前台仍可通过消息实例工作;后台延迟需明确告知,不能暗中恢复官方网关。

5. 保留与删除语义候选

数据说明书基线删除触发可验证语义
未送达密文信封默认 7 天,可配 1 至 30 天TTL 到期或收件设备 ACK业务表不可查询;清理延迟指标;底层物理擦除不保证
已 ACK 信封立即,最长 1 小时清理幂等 ACK 事务完成重试不重复交付;超时告警
一次性预密钥公开部分使用后立即删除/标记消费原子领取成功并发下至多一次有效消费
认证 challenge60 秒、单次使用或到期重放拒绝
幂等记录待 ADR-009重试窗口结束不保留请求正文或密文副本
速率限制状态不超过 24 小时窗口结束不演变为长期用户画像
服务日志默认 7 天、脱敏滚动过期存储、备份和聚合端一致执行
客户端诊断日志本地 24 小时过期、格式化、用户清除导出前二次脱敏预览
外部加密备份用户控制用户在外部位置删除App 不声称本地格式化可删除

“删除”必须区分:业务不可访问、逻辑删除、后台清理完成、备份过期和物理介质覆写。VMax 只能声明实际验证到的层级。

6. Real/Decoy 与跨 Profile 隐私

  • Decoy 不加载真实数据库、身份、联系人、服务器配置、Push 路由、搜索索引、分享历史或诊断记录。
  • 真实通知摘要不能进入 Decoy;进入 Decoy 时清除当前可见通知和 badge,后续只处理无内容唤醒。
  • Spotlight、Siri 建议、Widget、分享扩展、键盘学习、剪贴板和系统备份均视为独立泄露面;若无法证明隔离,首版默认关闭相关集成。
  • Profile 切换关闭旧连接、清理会话对象并重建依赖容器;缓存 key 必须包含不可碰撞的 Profile 内部标识。
  • 不能承诺 Decoy 对有设备取证能力的攻击者完全不可区分;存储大小、Keychain 项数、通知时序和外部备份可能暴露痕迹。

7. 日志 分析 崩溃与诊断

允许的服务端字段应限于 timestamplevelservicerequest_id、路由模板、状态码、延迟和稳定错误码;actor 使用短期、轮换、作用域限定哈希。

禁止:

  • 消息正文、密文全值、协议秘密、私钥、口令、派生值;
  • access token、APNs token、完整 VMax 地址、完整 IP 长期历史;
  • 伪装槽位命中、格式化触发或能直接证明 Real/Decoy 关系的事件名;
  • 本地备份路径、联系人名、通知正文和剪贴板内容。

错误对象和默认 description 也属于日志面。结构化日志 API 应使用字段白名单,而不是事后正则脱敏作为唯一防线。

8. 用户权利与透明度

  • 设置页展示当前实例、保留策略、Push 模式和外部备份边界。
  • 删除身份前分别说明:本机密钥/数据、实例队列、联系人端历史和外部备份的不同结果。
  • 举报流程预览将要解密提交的内容、接收者和不可撤回后果。
  • 诊断导出先生成本地预览,允许用户取消;默认不包含内容或稳定身份标识。
  • 隐私政策不得把“服务器不读正文”扩写为“不收集任何元数据”。

9. 待总控决策

  1. ADR-009 冻结 TTL、ACK 清理、幂等记录和备份过期窗口。
  2. ADR-006 冻结官方 Push、私有消息实例和完全主权部署的隐私模型。
  3. 是否允许任何遥测;推荐 MVP 默认无第三方分析,若引入必须显式 opt-in、字段白名单和单独 DPIA/隐私评审。
  4. 系统备份是否排除真实数据库和 Keychain 项,以及用户如何恢复;由 iOS/备份任务实测。
  5. 外部 .vmaxbak 的文件名、元数据和内容选择是否会暴露身份;由 ADR-007 处理。

10. 验证

  • 抓包确认客户端密码、明文和禁止字段不出站;检查代理、重定向和错误重试。
  • 扫描服务端、网关、反向代理、数据库、备份、崩溃包和诊断导出。
  • 用两个 Profile 和 Real/Decoy 做搜索、通知、分享、缓存、剪贴板、后台快照的交叉矩阵。
  • 让 TTL、ACK、日志轮转和失败重试经过真实时间/加速时钟测试,并断言数据变化。
  • App Privacy、隐私政策、运行时权限和实际 SDK/SBOM 对照;不只检查文案。

系统初步设计 · 待决事项不代表批准 · 安全方案尚未完成独立审计