3. 签名证据交接基础:数字签名原理、证据链完整性、交接协议

在多团队协作的 API 延迟诊断场景中,不同团队(SRE、开发、安全、网络)产生的诊断日志、调用链快照、策略评估结果需要作为可验证的签名证据进行跨组织交接。本章从密码学基础出发,建立证据链完整性的理论模型,并对比主流交接协议(JWT、mTLS)的适用场景。

3.1 数字签名原理:证据的不可否认性

数字签名是签名证据交接的基石。它保证:

  • 真实性:证据确实由声称的团队/节点签发。
  • 完整性:证据在传输或存储中未被篡改。
  • 不可否认性:签发者无法否认曾签发该证据。

标准流程包含签名生成与验证两个阶段:

签名生成(发送方):
1. 对证据原文 M 进行哈希运算,得到摘要 H(M)。
2. 使用发送方私钥 SKA 对摘要加密,生成签名 Sig = Enc(SKA, H(M))。
3. 将 (M, Sig, 发送方证书 CertA) 打包为证据包。
签名验证(接收方):
1. 使用发送方公钥 PKA(从 CertA 提取)解密签名,得到摘要 H'(M)。
2. 对收到的原文 M 重新计算哈希 H(M)。
3. 比较 H'(M) 与 H(M):一致则验证通过,否则证据无效。
数字签名生成与验证流程 数字签名生成与验证流程 发送方(签名生成) 证据原文 M 哈希 H(M) 私钥加密 签名 Sig 证据包 (M, Sig, Cert) 传输 接收方(签名验证) 接收原文 M' 哈希 H(M') 公钥解密 摘要 H'(M) 比较 H(M') ?= H'(M)

3.2 证据链完整性模型

在跨团队协作中,单个签名证据不足以建立完整信任。需要构建证据链,将多个签名证据按时间/因果顺序链接,形成不可篡改的序列。

证据链属性 描述 实现方式
时序完整性 每个证据包含前一个证据的哈希或签名引用 链式哈希(Hash Chain)
因果完整性 证据间的依赖关系可追溯 签名中嵌入前序证据 ID + 时间戳
身份完整性 每个签名可追溯到具体团队/节点 X.509 证书链 + 签名验证
策略完整性 证据生成时使用的策略版本可查 策略哈希嵌入签名负载
实践要点: 在 API 延迟诊断中,建议每个诊断步骤(如:SRE 采集延迟数据 → 开发分析代码路径 → 安全审计策略执行)都生成一个签名证据,并将前一步的证据哈希包含在当前签名中,形成不可逆的证据链。
证据链完整性结构 证据链完整性结构(链式哈希 + 签名) 证据块 #1 团队: SRE 数据: 延迟指标 PrevHash: null Sig: SK_SRE Hash#1 = H(证据#1) 引用 Hash#1 证据块 #2 团队: 开发 数据: 代码路径 PrevHash: Hash#1 Sig: SK_DEV Hash#2 = H(证据#2) 引用 Hash#2 证据块 #3 团队: 安全 数据: 策略审计 PrevHash: Hash#2 Sig: SK_SEC Hash#3 = H(证据#3) 篡改任意证据块 → 后续所有 PrevHash 不匹配 → 证据链断裂 → 立即告警

3.3 交接协议对比:JWT vs Mutual TLS

签名证据的跨团队交接需要标准协议封装。两种主流方案各有优劣:

维度 JWT(JSON Web ) mTLS(Mutual TLS)
签名机制 负载内嵌签名(JWS),支持 RS256/ES256 传输层证书双向验证,TLS 握手完成签名
证据封装 证据直接放入 JWT payload,自包含 证据通过 TLS 通道传输,不强制封装
离线验证 支持:接收方可离线验证 JWT 签名 不支持:需要在线 TLS 握手
链式引用 JWT header 或 payload 可嵌入前序证据哈希 需应用层自行实现链式引用
性能开销 低:仅一次签名/验签操作 中:每次连接 TLS 握手 + 证书验证
适用场景 异步消息、事件驱动、离线审计 实时流、高安全传输、服务间直接通信

3.4 JWT 签名证据示例

以下是一个包含延迟诊断证据的 JWT 结构,展示了如何将签名、证据链引用和策略版本封装在一起:

{
  "header": {
    "alg": "ES256",
    "typ": "JWT",
    "kid": "sre-team-key-2025-01"
  },
  "payload": {
    "evidence_id": "evt-2025-03-21-001",
    "team": "sre",
    "timestamp": "2025-03-21T14:30:00Z",
    "diagnosis_data": {
      "api": "/v2/order/create",
      "latency_ms": 2450,
      "p99_latency_ms": 3200,
      "strategy_version": "v2.3.1",
      "strategy_hash": "sha256:a1b2c3d4e5f6..."
    },
    "chain": {
      "prev_evidence_id": "evt-2025-03-21-000",
      "prev_evidence_hash": "sha256:9f8e7d6c5b4a..."
    },
    "policy_context": {
      "policy_id": "latency-slo-v3",
      "evaluation_result": "violation"
    }
  },
  "signature": "MEUCIQ... (ES256 签名值)"
}
安全警告: JWT 的签名仅保证 payload 完整性,不加密 payload 内容。如果证据包含敏感数据(如用户 IP、内部拓扑),必须使用 JWE(JSON Web Encryption)对 payload 加密,或通过 mTLS 通道传输。

3.5 mTLS 证据交接流程

mTLS 在传输层提供双向身份认证和加密通道,适合高安全要求的实时证据交接:

  1. 证书准备:每个团队/节点持有由信任 CA 签发的客户端证书和私钥。
  2. TLS 握手:客户端和服务端互相验证对方证书,建立加密通道。
  3. 证据传输:签名证据通过已建立的 TLS 通道传输,传输层保证完整性和机密性。
  4. 应用层签名:建议在证据负载内仍保留数字签名,实现端到端不可否认性(即使 TLS 终止)。
推荐组合策略:
- 使用 mTLS 作为传输层安全基座,保证通道加密和双向身份认证。
- 在应用层使用 JWT 封装签名证据,支持离线验证和链式引用。
- 证据链的完整性通过 JWT payload 中的 chain.prev_evidence_hash 字段维护。

3.6 交接协议选择矩阵

诊断场景 推荐协议 理由
异步延迟告警(消息队列) JWT 支持离线验证,消息可持久化审计
实时调用链追踪(gRPC) mTLS + JWT 传输层加密 + 应用层签名证据
跨组织证据归档 JWT 自包含,无需实时连接验证
高敏感策略审计 mTLS 强制双向认证,防止中间人攻击
混合云/多集群诊断 mTLS + JWT 跨集群传输加密 + 证据链可追溯