Repository navigation
Closed
Description
2026-09-28 串行集成:#100 生命周期及 #112/#116 加固均已在 main,完整验收仍开放
当前 main 45fe2382c63d21eef2f76d4f59141111f7d5713c,tree 1a8a28f467183ccab029625b0524ae5c5b7f115f 已读回。#112/#116 通过保留历史的 #118 集成;组合 CI36404029543(1544 core+8 conformance、四份SHA与真实JUnit node-ID完整互斥、零失败/错误/跳过、wheel/sdist)及 Recovery safety36404029733 通过。独立 main push与现场验收另核,不能沿用旧957e1ff的证据宣称当前全完成。
已在主线,应保留
- Fix custodial history migration, scoped decrypt ACKs and online key retirement #100:迁移起点激活已证明的新 EncryptionSubkey,清单包含保留历史密文/未知和不可读项。
- A 类不可变新接收者密文映射、B 类仅本账号退役 EncryptionSubkey 的兼容恢复入口;CLI实际解密后对具体清单签ACK。
- 显式finalize、逐项loss acceptance/decrypt-only保留;身份切换、历史可恢复、旧token撤销、在线钥删除、备份退役分别报告。原v1保留,扩展为明确v2。
- fix: recovery evidence, persistent restore quarantine and root rotation integrity (#68–70) #112 增量重验持久ACK签名、新钥、挑战、旧/新密文摘要及退出证据,不替代Fix custodial history migration, scoped decrypt ACKs and online key retirement #100,不修改原Revision签署字节。
- Task A: custody challenge binding, Root rotation locking and pinned deny-only recovery replay #116 增量验证空retained inventory下原server challenge和old/new signing/encryption绑定;退役/替换目标和失效旧签名钥fail closed,保留实际v1阶段而非假定v2目标已激活。
-
plugins/custodial_lifecycle.py、client_custodial.py等既有实现和回归继续保留,不退回仅手工prepare/映射。
剩余验收(不因合并勾选全部)
- 完整受损/过期/错钥/串清单ACK、清单漂移、并发新写入/增量重验、处理中旧钥失效矩阵,确保均不得提前finalize;已合入的窄回归不等于所有场景验收。
- 全保留历史清单客户端逐项真实解密/完整性校验,旧Revision正文/签名/key_id原字节不变,完整A/B映射和中断恢复。
- B类envelope严禁IdentityKey、server-vault master key、他人钥;decrypt-only不得残留服务器签名能力,不把兼容旧钥恢复描述为历史已重新加密。
- 未知/无法迁移项默认pending,仅对精确清单显式接受后处理不可恢复项;online_retired与backup_retired分别审计,缺独立备份退役证据不得声称server_key_retired。
- 与#69联合核对旧备份恢复不复活token、证书当前权限或签名能力;外部密文/备份退役不能靠DB布尔值自证。当前恢复仍quarantine,完整当前政策重放/promotion未完成。
- CLI/doctor/selftest/真实age/PostgreSQL的完整并发/崩溃/回滚/全入口矩阵、最终head及现场证据。
任务 A 与边界
A维护托管/密钥生命周期,授权接线与C、worker恢复闸与B交叉核验,共享入口按#83串行集成。#112已合入;#116因已包含于#118而关闭,不是放弃修改。无生产Root/备份删除/密钥销毁授权,没有现场退役材料保持open/blocked,切片用Refs。
依据:权威设计第03/06/11/15章、DCR-03;docs/CUSTODIAL_HISTORY.md、docs/TASK_A_RECOVERY_20260928.md、#118精确组合证据。旧进度文件只表示其对应版本。
Metadata
Metadata
Assignees
Labels
No labels
Activity
Fix scoped custodial history recovery and online key retirement
LIghtJUNction commentedon Sep 27, 2026
已提交增量修复 PR #112(分支
fix/issues-68-70-recovery-safety)。本次落实:读取迁移状态时重新验证每份 Ed25519 解密 ACK,绑定挑战、新签名钥、旧/新密文版本及摘要;清单增量或持久化 ACK 被篡改时不再报告历史迁移完成。分别报告身份切换、历史可恢复、在线 vault 退役和备份退役;未取得独立备份销毁证据时,
server_key_retired始终不能变成 true。已添加真实 age 解密后 ACK 和篡改持久化 ACK 的集成回归。已验证:34 个独立单元测试在本地 Python 3.13.5 和 GitHub Python 3.15.0-rc.2 均通过(run 36352807272)。PR 上的真实 PostgreSQL/age 和完整 CI 尚在执行,不能据此声称全部验收通过。
本 issue 保持开放:非空历史迁移最终完成、旧解密钥兼容封装、不可恢复项选择、写入冻结/增量策略,以及可独立审计的备份退役仍需继续实现与验收。未触及生产数据或生产密钥。
Fix custodial history migration, scoped decrypt ACKs and online key r…
LIghtJUNction commentedon Sep 28, 2026
Refs #68 — A 已提交 #116(接续 #112,C 串行合并),当前
c97a5286c029aae298d66aa4c6390497f053e4c8。真实回归发现:retained age 清单为空时没有任何历史 ACK 触发原始 challenge 验证,修改挑战/四个 key ID 仍可被接受。新
test_task_a_custodial_binding.py先得到9失败/1通过;security/custodial_migration.verify_challenge_binding()现在每次快照验证旧服务端签名、账号和派生 key ID、旧签名凭据/旧 age 绑定,以及进行中或 decrypt_only 阶段的新主 age key 未退役。另修复 v1 空历史切换错误假设已处于pending_rewrap:使用真实阶段,保留#100生命周期。没有改旧正文/签名/Revision/key_id,没有把A类rewrap和B类仅本账号旧EncryptionSubkey兼容恢复混合;既有客户端真实age解密ACK路径保留。最终本地组合58通过(真实PG17.11/age1.2.1/Git),含既有完整托管生命周期、损坏/漂移及新回归;目标Py3.15/PG16完整四分片以#116最新CI结果为准,当前尚未宣称通过。
在线删除、身份切换、历史恢复和备份退役继续分别记录;独立外部/备份退役材料未取得,
backup_retired/server_key_retired绝不变true。本issue继续开放。文件/命令/摘要见docs/TASK_A_RECOVERY_20260928.md和docs/TASK_A_VERIFICATION.md。无生产密钥操作或部署。Merge #118: integrate recovery safety without weakening current autho…
feat(security): accept only console-imported root-signed backup retir…
fix: reject stale Root authority and replay bans without inherited ex…
Merge PR #185: Python 3.15 quality and verified deployment artifacts
LIghtJUNction commentedon Sep 29, 2026
2026-09-29 当前接续(#185 已合并)
main
5cdaeba2b7b191a27684093cce7b5a153c99c88d/ tree3ad68f2012896310abfa9bcaf800c9ab05f6c886已实际读回,等于最终PR通过的树。18个PR工作流全部success;8份ZIP摘要/JUnit node-ID独立核验 2531 core + 8 conformance,零失败/错误/跳过。精确来源和产物摘要见 #185证据,更新索引见#83。合并后main push是独立运行,正在核验,不预记成功。完整托管A/B历史、具体inventory ACK、exit与backup-retirement的现有回归保留;installed official selftest的custodial_history_recovery通过。在线retired与外部backup_retired继续分开,未取得真实retained密文逐项解密/独立退役范围,不声称server_key_retired。旧时“promotion未实现”不再代表当前源码,但现场current pin仍独立缺失。
各条款源码入口与独立现场材料见
docs/RELEASE_ACCEPTANCE.md。本评论更新证据归属,不降低原验收范围或扩大现场权限。LIghtJUNction commentedon Oct 3, 2026
已按托管历史密文恢复/钥生命周期功能完成关闭。当前源码包含 retained inventory、A/B 恢复映射、真实客户端解密后的签名 ACK、显式 finalize、decrypt-only/loss acceptance、在线退役与独立备份退役验证;保留原 Revision 签署字节。
生命周期回归、inventory ACK、历史迁移及 退役证明回归 已在 当前 main CI 核实通过。操作者实际历史密文逐项解密及在线/备份退役现场证明继续在 #84 跟踪;本次没有解密生产数据、销毁钥或删除备份,不宣称现场退役完成。