安全与隐私白皮书(总览)第 6 章
第 6 章 数据生命周期与删除
本章说明 FileBolt 如何管理传输数据从创建到删除的全生命周期:哪些数据会被创建、以何种形式保存、 何时到期、如何撤销、如何清理残留与缓存,以及哪些内容在设计上不可恢复。 本章遵循“最小化、可撤销、可解释”的原则,并与零知识边界一致:平台不持有明文与解密密钥(CEK)。
6.0 本章摘要
FileBolt 的数据生命周期以 transfer 为边界单位。服务端保存的是密文分片与最小必要元数据; 发送方可随时撤销/删除 transfer,使下载提前失效;系统也会在到期后自动清理。 清理过程可能存在短暂异步窗口,但在逻辑层面必须先“失效访问能力”,再进行物理删除与回收。
- MUST:平台不保存明文内容与 CEK,无法对历史文件进行“找回密钥/解密恢复”。
- MUST:到期与删除必须使下载访问能力失效(拒绝签发/续期短期 token,拒绝读取 manifest/分片)。
- SHOULD:采用最小化保留与可解释的清理窗口,避免残留扩大风险面。
6.1 数据分类(密文、必要元数据、审计数据)
6.1.1 密文内容(最高优先保护对象)
- 对象存储中保存的密文分片(
ciphertext || tag)。 - 平台不保存明文;明文仅在客户端出现并被短暂处理。
6.1.2 必要元数据(为运行所需最小集合)
系统为了完成传输与访问控制,可能保留必要元数据,例如:
transferId、文件列表与fileId。- 公开加密参数:
cryptoVersion、chunkSize、noncePrefix(不包含 CEK)。 - 有效期、大小、分片索引映射等(manifest/元数据)。
- 短期访问 token 的会话记录(查表)及其过期时间、作用域。
6.1.3 审计数据(仅发送方可见)
- 下载次数、下载进度、时间窗内活动等,用于交付证明与运营可视化。
- 审计数据必须与下载方视图隔离,仅对发送方授权可见(参见第 4 章)。
6.2 生命周期状态机(创建、可用、到期、删除)
transfer 的生命周期可以抽象为以下状态与转换:
- Created:服务端生成
transferId与初始策略(配额、到期时间等)。 - Uploading:客户端上传密文分片与必要元数据;服务端进行鉴权与记录。
- Active:上传完成且可下载;短期 token 可按策略签发或续期。
- Expired:到期后逻辑失效;禁止下载相关 token 与读取;进入清理队列。
- Revoked/Deleted:发送方主动删除/撤销后逻辑失效;进入清理队列。
- Purged:密文与元数据被物理删除与回收(可能存在短暂异步窗口)。
MUST:任何进入 Expired 或 Revoked/Deleted 的 transfer, 在逻辑层面必须首先不可下载(拒绝 token 与读取),再进行物理删除。
6.3 到期策略与自动清理
6.3.1 到期触发
- 系统 MUST 在 transfer 到达设定到期时间后将其标记为失效。
- 失效后 MUST 拒绝下载相关短期 token 的签发/续期,并拒绝读取 manifest/分片。
6.3.2 自动清理
- 系统 SHOULD 以异步任务清理到期 transfer 的密文与元数据。
- 清理任务 SHOULD 具备幂等性:重复执行不会导致状态不一致。
- 清理任务 SHOULD 采用可观测指标(队列积压、失败率)与告警(参见第 10 章)。
6.3.3 到期后的用户体验约束
- 下载方在到期后访问链接,客户端应提示“已到期/不可用”,不得继续尝试拉取密文。
- 发送方管理视图应显示到期状态,并允许查看(或导出)必要的审计摘要(如适用)。
6.4 用户主动删除与撤销
6.4.1 删除/撤销语义
- 撤销:使下载提前失效(逻辑不可用)。
- 删除:撤销 + 触发后端清理(物理删除/回收)。
实现上二者可以共享相同流程:先使访问能力失效,再清理密文与元数据。
6.4.2 授权与审计
- 删除/撤销为有副作用操作,MUST 需要发送方身份授权(长期登录 token 或等价机制)。
- 系统 SHOULD 记录删除/撤销事件(不包含敏感材料),用于审计与问题排查。
6.4.3 立即失效要求
- MUST:撤销/删除后,服务端必须拒绝签发/续期下载短期 token。
- MUST:撤销/删除后,读取 manifest/密文分片的请求必须被拒绝(即使对象存储暂未完成物理删除)。
6.5 清理窗口、缓存与残留控制
6.5.1 清理窗口
由于异步任务、分布式存储与缓存层存在,物理删除可能不是瞬时完成。系统应明确并控制清理窗口:
- MUST:逻辑失效必须立即生效(拒绝 token 与读取)。
- SHOULD:物理清理应在合理窗口内完成,并具备失败重试与告警。
6.5.2 缓存与边缘节点
- 对密文分片与 manifest 的缓存策略 SHOULD 谨慎:避免长时间缓存导致撤销后仍可被命中。
- 若使用 CDN/边缘缓存,MUST 确保鉴权在缓存前生效(例如采用私有缓存键、禁止共享缓存或显式 bypass)。
- 撤销/删除后 SHOULD 触发必要的缓存失效(若存在缓存层)。
6.5.3 临时文件与服务端残留
- 服务端 MUST NOT 写入明文到磁盘或持久化缓存。
- 服务端对密文分片的临时缓存(若存在)SHOULD 采用短 TTL,并在清理流程中显式回收。
6.6 不可恢复性与零知识边界下的限制
- MUST:平台不保存 CEK,无法对历史文件进行解密恢复;丢失 fragment 等价于丢失解密能力。
- MUST:平台不得提供“服务器端重置密钥以解密旧文件”的功能(违反零知识边界)。
- SHOULD:用户文档与 UI 应清晰提示“链接是能力型凭据,包含解密材料;丢失不可找回”。
6.7 证据入口与可验证性
生命周期与删除策略的“可验证性”通常来自公开文档与一致的系统行为。第三方工具更擅长验证 TLS 与安全响应头等站点基线, 相关证据入口位于状态页。本章与状态页的关联如下:
- TLS 与 HTTPS 基线: /status#tls-configuration
- 安全响应头与缓存相关策略基线: /status#security-headers
- 综合最佳实践扫描: /status#http-observatory
对于“到期后不可下载”“撤销立即失效”等行为性承诺,建议在产品文档与 UI 中保持一致表述,并在可控范围内提供可复现测试步骤 (例如:到期后返回固定错误码与页面文案;撤销后立即拒绝读取接口)。
6.8 相关 Claim IDs(预留)
本章的 Claim IDs 将在你确定最终实现细节(到期清理窗口、缓存策略、删除语义)后补充到 附录:Claim IDs 总表 中,并以总表为唯一权威入口。