Files
soft_quay/docs/tasks/T-101.md
T

3.7 KiB

id, title, phase, deps, status, created, issue, context_ref, claim_branch, work_branch, write_paths
id title phase deps status created issue context_ref claim_branch work_branch write_paths
T-101 签名 Catalog 验签与缓存回退原型 1
T-002
DONE 2026-07-16 null 45c242ecec null agent/codex/T-101
docs/tasks/T-101.md
core/catalog/
testdata/catalog/
testdata/README.md
docs/api.md
docs/04-architecture.md
docs/current-state.md

问题 / 背景

Catalog 是后续下载与执行链路的信任根。当前协议只约定 Ed25519 和顶层 signature,尚未验证签名域、JSON 歧义处理、缓存替换与断网回退行为。若这里错误,篡改清单可能进入安装链路。

方案

  1. 在 core/catalog 建立 Ed25519 verifier,签名域为“移除顶层 signature 后的受限规范 JSON”。
  2. 解析时拒绝重复字段、尾随 JSON、非对象根、非整数数字、缺失/非法长度签名,避免不同解析器对同一文档产生歧义。
  3. 建立 Fetcher/Cache 接口与 Loader:远端验签成功后才写缓存;远端获取或验签失败时只使用再次验签通过的缓存。
  4. 提供文件缓存原型,使用同目录临时文件 + current/backup 改名,并能读取中断后遗留的 backup。
  5. 在 testdata/catalog 放置假数据与恶意样例;测试使用明确标注的专用测试密钥,不提交生产私钥。
  6. 将签名域与原型结论同步到 docs/api.md、docs/04-architecture.md。

验收要点

  • 合法测试清单验签通过。
  • 篡改内容复用合法签名、伪造签名、重复字段、浮点/指数数字均被拒绝。
  • 远端验签失败不会覆盖最后有效缓存;断网可返回再次验签通过的缓存。
  • 缓存自身被篡改时拒绝,不得当作离线可信数据。
  • 文件缓存更新与 backup 恢复测试通过。
  • cd core && go vet ./... && go test -count=1 ./... 通过,Phase 0 双目标闸门继续通过。

边界(不改什么)

  • 不实现 HTTPS 客户端、Catalog 字段 Schema、OS/架构过滤或 UI 接入(T-201)。
  • 不定稿密钥轮换、撤销名单和 package 独立签名域。
  • 不引入第三方 JSON canonicalization 或加密依赖。
  • 不提交生产私钥、真实 URL 或真实签名。

协作约束

未启用 Gitea;本任务在 agent/codex/T-101 分支串行执行。签名格式结论标记为 Phase 1 原型,T-201 正式接入时再与发布端共同冻结。

执行记录

  • 2026-07-16:在 core/catalog 建立受限 JSON 解析/规范化与 Ed25519 verifier;拒绝重复字段、尾随值、无效 UTF-8、非对象根、非整数数字和非法签名编码/长度。
  • 2026-07-16:签名域确定为移除顶层 signature 后的受限规范 JSON;对象键排序、数组保序、字符串标准 JSON 转义、数字仅允许整数。该结论已同步 docs/api.md 与 docs/04-architecture.md,并明确为 T-201 前的 Phase 1 原型。
  • 2026-07-16:建立 Fetcher/Cache/Loader;远端只有验签成功才写缓存,获取失败或验签失败时只返回再次验签成功的缓存;缓存写失败作为非致命 warning 暴露。
  • 2026-07-16:建立 FileCache 临时文件 + current/backup 切换原型,并支持 current 缺失时读取中断遗留 backup。
  • 2026-07-16:新增公开虚构的 Catalog testdata;测试密钥由测试代码中的明确测试 seed 运行时派生,仓库不含生产私钥。
  • 定向测试通过:合法、篡改、伪造、重复字段、浮点、指数、缺签名、尾随 JSON、无效 UTF-8、断网回退、坏缓存、缓存写失败与中断 backup 恢复。
  • 验证通过:Go 1.20.14 go vet ./...、go test -count=1 ./...。
  • 验证通过:./scripts/verify_phase0.ps1,包含 core 边界/版本检查和 modern/win7 双目标构建。
  • 验证通过:python scripts/validate_harness_governance.py。