Files
ChuSQL/docs/release-signing.md
T
LIm1tZz7 8ce4239452 v26.10.1 正式版
修复部分问题,优化性能,进一步推进类型系统
2026-10-05 22:22:23 +08:00

3.9 KiB
Raw Blame History

发布签名与验证设计

本文定义尚未实现的发行安全方案。当前操作见安装文档,实施状态以 project-plan.txt 为准。先实现离线验证,再接入在线安装;该工作可独立于查询和存储扩展推进。

选择与信任入口

采用标准 TUF root/targets/snapshot/timestamp 元数据和 Ed25519 签名,使用经过维护的实现与标准测试向量,不自行定义签名 JSON 规范。Ed25519 算法依据 RFC 8032,角色、轮换、版本及过期验证依据 TUF 规范。SHA256 保留为产物散列,签名覆盖其可信元数据来源。

可信初始 root 随独立取得的安装器/验证器发布,记录版本与公钥;不能从同一个未认证下载响应接受任意公钥。首次下载安装器仍依赖用户可信取得该安装器这一入口,不能宣称脚本内公钥解决首次下载脚本被替换。升级客户端保存可信元数据的版本与过期状态,拒绝回退、混配和过期;状态缺失不等同于已完成反回退验证。

targets 绑定确切文件名、长度、SHA256、平台/架构、版本、提交号、组件清单与最低数据格式要求。snapshot 固定元数据版本/散列,timestamp 指向 snapshot。禁止通配匹配产物、跨平台替代和同版本静默覆盖;签名通过后才允许解包或执行 bootstrap。

密钥与发布操作

root 使用离线 2-of-3 阈值密钥,分开保管及加密备份;CI 不持有 root 私钥。targets 发布密钥限定于受保护发布环境,仅受信任标签与人工发布流程可调用;PR 构建、普通日志、构建缓存和发行包均不能读取私钥。snapshot/timestamp 使用独立在线密钥,权限和有效期按角色设置;拟定 targets/snapshot 30 天、timestamp 7 天、root 1 年,并通过到期监控续签。

轮换 root 按连续版本发布,同时满足旧 root 与新 root 阈值;离线备份定期做恢复演练。在线密钥泄露时停止发布,用 root 撤销并更换受影响角色密钥,重新生成元数据;所有 root 信任丢失时需要经独立可信渠道重新引导,不能靠损坏的 root 自证恢复。

发布顺序为构建与模块/所有者门禁 → 装配确切产物 → 计算散列 → 签 targets/snapshot → 上传产物和版本化元数据 → 最后发布 timestamp。任何产物字节变化均需重新签署。签名不证明构建内容正确,平台真机验收仍单列。

安装与兼容性

新增小型跨平台验证器,打包随安装器提供;验证器不可作为首个未验证的临时下载再立即执行。在线安装先验证元数据链、版本、有效期与目标平台,再下载并验长度/散列,之后才解包。签名缺失、密钥未知、元数据过期、系统时间无法可信校验等均明确失败,不降级成仅 SHA256。

本地离线安装使用随包 root 链、targets 和 snapshot 验证真实性与完整性;缺少在线 timestamp 时明确说明不能证明最新版本。离线模式必须显式选择且不联网;已有可信版本仍禁止回退,元数据过期仍失败,需要重新取得有效离线元数据。历史无签名包不纳入新安装器的可信安装路径。

系统原生代码签名分别设计接入 Windows Authenticode 和 macOS Developer ID/notarization;TUF 不能替代操作系统签名,第一阶段也不声称消除 SmartScreen/Gatekeeper 提示。Linux $ORIGIN、在线下载与 macOS 发行继续按现有实机待办验收。

验收条件

验收覆盖合法包、字节篡改、错误平台、截断、签名替换、重复键/非法元数据、未知密钥、过期、回退、元数据混配、连续 root 轮换/阈值不足、撤销、断网离线、下载中断与私钥日志检查;三平台从干净安装目录验证拒绝路径不会执行包内程序。