# WP12 安全、审计与运行证据验证记录 ## 1. 本次工程范围 WP12 在现有凭据、身份、治理和问答记录之上完成安全收口,不新建通用日志平台: 1. 管理员专用“审计与运行证据”工作台; 2. 登录认证、数据采集、实体合并与回滚、语义与质量发布、质量整改、知识问答六类安全投影; 3. 数据源凭据密文状态、采集源明文秘密字段、独立封存密钥、错误边界和安全响应头检查; 4. 规范化事件 SHA-256 根摘要、HMAC-SHA256 签名封存与重新计算复核; 5. 全局异常响应不回显内部错误,日志使用有界脱敏分类和关联 ID; 6. `app/` 与 `deployment/app/` 的 WP12 变更文件保持一致。 离线安装、数据库升级预检、备份、恢复和回滚演练仍属于 WP13。 ## 2. 安全字段边界 审计 API 只返回时间、固定类别、操作代码、状态、操作者身份、对象类型/身份及少量枚举或 计数字段。明确不返回: - 数据源凭据、加密载荷、Nonce、连接串或源配置; - 登录 IP、User-Agent 或认证详细错误; - 实体审核原因、合并/回滚快照; - 本体图文档、代码审批原因或质量规则正文; - 质量整改备注、材料、问题消息或证据正文; - 知识问题原文、回答正文或检索内容。 六类投影查询均使用显式字段白名单;前端表格不提供上述字段列。 ## 3. 封存与复核规则 - 先将安全事件按 UTC 时间和事件身份稳定排序; - 每条事件使用 canonical JSON 计算 SHA-256; - 有序事件摘要集合再次计算根摘要; - 时间窗、类别、事件数、根摘要、密钥版本和封存人使用 HMAC-SHA256 签名; - 单次最多 50,000 条,超过时失败关闭; - 复核状态为 `intact`、`tampered` 或 `invalid_signature`; - 封存结束时间不得晚于服务器当前时间,前端按本地日历并将当天窗口收敛到当前时刻; - 封存表只有新增和读取接口,不提供更新或删除接口。 - 迁移降级不会静默保留表后回写旧版本号,而是失败关闭;如需降级,必须先走批准的归档迁移。 签名封存用于检测篡改,不等于阻止数据库管理员修改。企业正式启用前必须配置独立 `AUDIT_EVIDENCE_SECRET`(至少 32 字节)和 `AUDIT_EVIDENCE_KEY_VERSION`。本地回退密钥 只用于工程验证,安全检查会显示警告;生产环境缺少独立密钥时封存与复核接口失败关闭。 采集源明文秘密字段检查递归扫描嵌套 JSON 配置键。 ## 4. 定向验证 本工作包只执行 WP12 及直接受影响范围的测试,不做全量回测。验证至少覆盖: - 规范化、分页、过滤、秘密字段递归脱敏和 50,000 条上限; - 根摘要稳定性、签名元数据被修改、事件变更/缺失检测; - 六类权威表安全查询和追加式封存表; - 管理员读取/封存权限,viewer/editor 拒绝; - ISO 时间窗、服务端封存人、安全 400/404/503; - 异常中数据库 URL、密码、API Key、Authorization/Bearer 不进入响应或日志; - 前端六类标签、“暂无记录”和三种复核状态; - 真实 PostgreSQL 六类事件、封存完整、事务内篡改失败、回滚后恢复完整; - OpenAPI、数据模型、台账、迁移和发布副本一致性; - 管理页实际请求、封存、复核和浏览器控制台。 ## 5. 企业验收门禁 工程验证通过不能替代企业安全验收。WP12 只有在以下条件满足后才能标记企业验收: 1. 企业安全负责人确认六类审计字段、抽样记录和访问人员; 2. 生产环境配置独立封存密钥,明确密钥保管、轮换、遗失和旧版本复核流程; 3. 明确五年保留目标、归档位置、清理审批和合规例外; 4. 使用真实登录、采集、合并/回滚、发布、整改和问答各抽样至少一条; 5. WP13 完成备份、恢复和升级回滚演练后,证明封存记录可随系统恢复; 6. 如需要监管级证明,另行建设外部可信时间戳、WORM/对象锁、SIEM 和法务保全。 ## 6. 本地工程验证结果(2026-07-30) 本轮按 WP12 变更范围完成定向验证,没有执行全量回归: - WP12 后端、权限、迁移、架构、凭据、脱敏、认证和前端契约受影响测试共 52 项通过; - 前端模型测试 5 项通过; - WP12 新增 Python 文件及本次触达运行代码 Ruff 检查通过;迁移测试文件中一处未改动的 既有 `B905` 告警仍保留;新增前端文件 ESLint 检查通过; - 前端生产构建成功;构建仍报告项目既有的 Browserslist 数据过期、旧页面 `console`、样式顺序和包体积告警,本次新增页面没有检查错误; - Docker Compose 配置校验通过,本地 backend/frontend 重建后均为 healthy; - Alembic 已在本地测试库升级到 `360`,真实 PostgreSQL 集成测试验证六类事件、 封存完整、事务内修改可检测、回滚后恢复完整; - OpenAPI 已重新生成,共 219 个操作,并包含 WP12 六个接口; - `app/` 与 `deployment/app/` 的 WP12 后端文件及迁移文件逐字节一致。 浏览器以管理员身份访问本地“审计与运行证据”页面,确认: 1. 六类覆盖卡片均可见;当前 30 日窗口内登录认证 34 条、数据采集 1 条、 实体合并与回滚 2 条、语义与质量发布 2 条、质量整改 5 条、知识问答 0 条; 2. 0 条类别明确显示“暂无记录”,没有误报为能力缺失; 3. 安全检查显示 1 个数据源凭据已密文保存、0 个采集源明文秘密字段; 4. 修正本地日期与未来时间窗边界后,创建了包含 44 条规范化事件的闭合时间窗本地封存, 密钥版本为 `local-v1`; 5. 点击“重新校验”后返回“校验完整”; 6. 页面只显示安全白名单字段,浏览器控制台没有错误。 上述封存使用本地工程密钥,不代表生产密钥已交付。企业验收仍以第 5 节门禁为准。