CipherFS
开发中 · 未发布 · 格式可能变化

ADR 006 加密的设备访问审计

状态

2026-10-18 采纳设计,2026-10-24 完成实现及现有入口功能验收。字节格式以 FORMAT 第 11 节为准,操作方式见访问审计。

背景

签名索引证明已发表的变更,但不记录读取、缓存命中、访问拒绝和传输交接。服务器还需要记录实际认证适配层验证过的应用身份。文件访问日志应保留这些事实,同时避免把路径、正文和认证秘密放进可读的本机存储或服务商日志。

决策

Core 提供统一审计写入器,可信适配层选择入口上下文。FileId 与不可变 VersionId 来自操作实际使用的快照。前门交付与 Core 业务事实分别记录,通过父操作 ID 关联;同一业务事务内的事实共享事务 ID。字节数和项数表示该层实际接受的数量,不证明人已阅读。

每个入口独立选择 off、best_effort 或 required。HTTP 与 S3 默认 required;守护进程挂载和后台任务默认 best effort;其余入口默认 off。required 的意图记录在业务访问前落盘,提交事实与业务变更处于同一个事务,完成记录在成功返回前落盘。已知提交后的审计失败保留精确回执。best effort 显示有界丢失计数与缺口,不静默变成 required。密封期间以有界摘要累计拒绝,待可信写入器恢复后持久化。

存放点 a/ 保存独立的 CFSAUD01 加密签名设备链。审计钥用 cipherfs audit v1 从纪元钥加作者 DeviceId 派生,不能用于签名。持有对应纪元钥的成员可以读取历史,包括后来被撤销的作者;后续纪元排除被撤销设备,恢复信封保留对应纪元历史的恢复能力。

意图、完成预留、提交事实与崩溃状态放入密封的本机表。发布 spool 前先持久化最终密文,崩溃重试沿用相同字节。私有 spool 的文件 fsync、重命名与目录 fsync 完成后才能丢弃 outbox;所有已配置存放点都明确确认后才能删除本机 spool。队列、事件、持久预算、查询输入与关闭等待都有上限。密封撤销审计钥副本,写入租约防止超时旧代与新归属进程同时写日志。

查询先验签再解密,全部有界输入验证后才筛选。文件/设备分页指向密封且会过期的本机快照,明确报告缺失前缀与未确认的远端尾部。审计保留采用独立的本机首次观察时间下限与删除权限,普通正文/索引 GC 不处理审计对象。

后果

运行 tracing、版本历史与访问审计保持独立。审计覆盖经过 Core 和可信适配层的操作及缓存命中,不观察在边界外复制的明文。UID/GID/PID 是 OS 观察,不是可执行程序身份认证。FUSE reply 没有接收回执,交付保持未知。存放点可以隐藏完整尾部,已验证的观察链不能证明全局完整。

required 增加持久屏障,在有界存储用尽或写入器失败时会拒绝访问,运行状态与就绪检查会显示原因。清空查询缓存不会删除已发表审计。本机新增表属于当前未发布 schema 的完整配置,本次不提供生产旧版本迁移。

仓库中的源文件