ARC 5让系统可以运行和排查第 19–22 章

第 20 章 —— 消息安全与收敛前提

本章目标: 本章完成后,开发者能够区分集群准入、真实性、机密性、防重放、滥用控制与审计,并说明密钥轮换期间的兼容窗口。

学习目标

  1. 为远端 envelope 建立顺序明确的安全门。
  2. 区分 HMAC 验签、载荷加密和 nonce 防重放。
  3. 解释 key version、minimum acceptable version 与轮换窗口。
  4. 把每类拒绝落到结构化错误、指标和审计。

前置条件

  • 已完成第 11 章 wire envelope 与第 19 章观察面。
  • 理解 TLS/网络隔离不自动替代消息级身份与重放保护。
  • 知道安全配置错误应 fail closed。

案例进度

履约集群开始接收跨节点 delta。团队需要防止错误 token 的节点加入、载荷被篡改、旧签名长期有效、同一合法消息被重复播放,以及连续失败发送方消耗验证资源。

五道门各自回答一个问题

远端消息进入集合前的安全门

门 问题 典型组件
Admission 节点是否持有集群准入凭据 SharedKeyClusterTokenValidator
Authenticity 消息是否由可信 key 签名且未被篡改 HmacMessageAuthenticator
Confidentiality 载荷是否需要并成功解密 AES-GCM / ChaCha20 encryptor
Replay nonce 是否新鲜且未重复 SlidingWindowNonceTracker
Abuse 连续失败发送方是否应暂时封禁 SenderRateLimiter

加密不证明发送者身份,验签也不阻止合法包重放。把五类能力合并成「security enabled」会让故障和配置审查失去精度。

密钥轮换是一个窗口

安全集成测试验证 rolling migration:新旧签名可以在过渡期并存。接收方用 key version 选择验证 key;当所有发送方升级后,提高 min-acceptable-key-version,旧版本 envelope 才被明确拒绝。

阶段 A:active=1,accept >=1
阶段 B:发布 key 2,发送 active=2,接收仍 accept >=1
阶段 C:确认所有节点切换后,accept >=2

若一上来只保留新 key,尚未滚动到的节点会整体失联;若永不提高最低版本,旧 key 泄露风险长期存在。

Nonce 窗口与内存上限

SlidingWindowNonceTracker 接受递增或窗口内未见 nonce,拒绝重复、过旧和 0。它还限制 maxTrackedSenders 并按 LRU 淘汰,以免未知发送方无限占用内存。这个上限是安全与容量共同参数,过小会频繁遗忘发送者,过大则扩大内存面。

审计不是普通 debug log

SecurityAuditLog 记录 token mismatch、签名失败、重放、challenge timeout、sender ban、fencing reject 等安全结果。审计事件应包含稳定 reason、发送者和时间,不泄露 secret、明文 key 或完整敏感载荷。

反例与故障注入

  • 篡改已签名 payload,预期验签失败并产生审计。
  • 第二次提交同一 nonce,预期 replay rejection。
  • 让接收方要求加密,再发送 plaintext,预期明确拒绝。
  • 连续发送篡改消息达到阈值,预期 sender 被封禁;到期后恢复。
  • 将最低 key version 提到 2,再提交 version 1 envelope,预期拒绝。

实验

cd submodule/dsm
mvn -q -pl dsm-security,dsm-integration-test -am \
  -Dtest='HmacMessageAuthenticatorTest,SlidingWindowNonceTrackerTest,'\
'SharedKeyClusterTokenValidatorTest,SenderRateLimiterTest,'\
'BuiltInMessageEncryptorTest,SecurityIntegrationTest' \
  -Dsurefire.failIfNoSpecifiedTests=false test

使用 security-gates.json 核对每一道门的输入、拒绝原因、指标和审计结果;不得出现 secret 值。

实验验收卡

字段 内容
运行命令 上述 security unit + integration tests;书籍资产测试
输入或故障 token mismatch、篡改、明密文不兼容、nonce replay、sender ban、旧 key
可观察结果 消息 fail closed;结构化失败、指标和审计一致;滚动轮换可兼容
证据等级 E2 密码/状态组件行为 + E3 安全集成测试
本实验未证明 密钥托管、证书体系、生产轮换流程、合规留存或网络边界已通过审计

回顾

  • 准入、验签、加密、防重放、限流和审计是不同责任。
  • 密钥轮换需要双版本兼容窗口与最终最低版本提升。
  • nonce tracker 既要防重放,也要有发送者容量上限。
  • 安全失败需要 fail closed,但不能把 secret 写入观测数据。

下一步

第 21 章把启动、注册冻结、准备就绪和关闭写成生命周期合同,防止部署系统把 STARTING 当 RUNNING。

证据链接