Faying Protocol/1.0 — §10 Error Handling

协议正文导航:章节目录 | 上一章 §9 安全考量 | 下一章 §11 开放议题

§10 Error Handling

本章把 §5.4 的错误码和具体的失败场景、协议响应、状态迁移、恢复路径、可观测性约束放在一起讲。所有错误都用 §5.2 信封下的 ERROR 报文回复,claims 体形如 { code, message, mandate_id?, recovery_hint? }。除 §5.4 的错误码表外,错误处理以本章四节为准。

EH.1 错误场景与协议响应

下表给出 §5.4 所列全部错误码(1001–1014 与 1099)的全景视图,每行包含:触发场景、协议响应、是否触发 Revoke、是否触发降级、是否必入审计链、是否必入 HP 视野通道。本表与 §5.4 错误码表一一对应。

Code名称触发场景协议响应触发 Revoke触发降级入审计入 HP 视野
1001E_NO_MANDATE业务请求未携带 Faying Protocol 头 / MandateRP 立即拒绝;不建立 audit✗✗✗✗
1002E_MANDATE_EXPIREDnow > Mandate.not_afterRP 拒绝 + MS 触发该 Mandate Revoke✓✗✓✗
1003E_SCOPE_VIOLATION调用动作 ∉ Mandate.scope.actionsRP 拒绝 + 记录可疑事件;累计可疑次数触发降级✗✓(累计)✓✗
1004E_GRADE_INSUFFICIENTRP 要求 grade 强于当前 Mandate.gradeRP 拒绝 + 提示升级(升级路径需 HP human_witness)✗✗✓✗
1005E_PRESENCE_STALEpresence.last_freshness 超过 max_staleness_ms 或 LivenessDetectionBudgetRP 拒绝;IF 主动停止 D 维度,等待 PRESENCE 校准;状态机 Active → Degraded✗✓✓✗
1006E_REVOKEDRR 标记 revokedRP 拒绝;级联拒绝同链调用;IF 立即回退 Rogue Fay✓(已撤销)✗✓✓
1007E_ATTESTATION_INVALIDAttestation Chain 节点签名校验失败 / 时间戳不在父节点 validity window 内 / endorsement 子字段被篡改RP 拒绝 + MS 触发该 Mandate 的 Revoke✓✗✓✓
1008E_RR_UNAVAILABLERR 查询超时 ≥ StaleBudgetRP 按 Default-Deny 拒绝;IF 暂停所有 D 维度;状态机 Active → Degraded✗✓✓✗
1009E_REPLAYnonce 在 2 × max_message_lifetime 内对相同 subject 已被见RP 拒绝 + 安全告警;IF 立即 rotate 会话密钥✗✗✓✓
1010E_HUMAN_WITNESS_REQUIREDgrade-up / FAYING_REQUEST 等需 HP 见证场景缺失或 human_witness 校验失败RP / MS 拒绝;等待 HP 见证后重新发起✗✗✓✗
1011E_ROGUE_DETECTED检测到 D 维度违规(ego-deviation / 行为基线超阈等)RP 拒绝 + 强制 Revoke;IF 立即回退 Rogue Fay✓✗✓✓
1012E_BUDGET_EXCEEDED调用累计超过 Scope.budget / ResourceBudgetRP 拒绝 + 触发降级或(极端情形)Revoke✓(极端)✓✓✗
1013E_ENDORSEMENT_INVALIDendorsed_scope ⊄ scope / endorsed_grade.autonomy > grade.autonomy / endorsed_lifetime 缺失或超长 / endorsement 子字段被篡改 / DELEGATE 子 endorsement 不收敛于父MS 拒绝签发 + 触发该 Mandate 的 Revoke;IF 立即停止全部 endorsed 行为✓✗✓✓
1014E_FAYING_REQUEST_NOT_CONFIRMEDiFay 主动发起的 FAYING_REQUEST 在 BootstrapTimeout 内未获 HP 明确认可MS 以 FAYING_REQUEST_RESP { status="timeout" } 返回;不产生任何 Faying 状态变化;事件写入 Attestation Chain✗✗✓✗
1099E_PROTOCOL版本 / 格式 / 字段缺失 / 不可解析 / DISCLOSURE mandatory_fields 缺失或不可解析 / 签名输入不合法 / 未在 §5.3 报文清单中显式列出的 msg_typeRP / MS 拒绝;触发自 DISCLOSURE 路径时额外 push HP 视野✗✗✓✗*(DISCLOSURE 路径 ✓)

* 注:E_PROTOCOL 默认仅写入审计链;当其触发自 §5.3.7 DISCLOSURE 的 mandatory_fields 缺失或不可解析路径时,MS 必须额外推送至 HP 视野通道(与 §5.4 注释一致)。

Trace:R2.1.1–R2.1.4(默认拒绝)、R3.2.1–R3.2.3(错误事件入审计与 HP 视野)、R4.2.1–R4.2.3(撤销可见性预算与可达性)、R11.1.4(endorsement 篡改触发 E_ATTESTATION_INVALID + Revoke)、R11.2.1–R11.2.3(endorsement 收敛违反触发 E_ENDORSEMENT_INVALID)、R1.3.3(FAYING_REQUEST 超时未认可触发 E_FAYING_REQUEST_NOT_CONFIRMED)、R13.3.1(DISCLOSURE mandatory_fields 缺失或不可解析触发 E_PROTOCOL)。

EH.2 恢复路径

按"是否需要重新建立 Faying 状态"将错误码划分为三类恢复路径。所有恢复路径必须在 EH.4 Default-Deny 收敛之内执行,不存在乐观放行的中间窗口。

EH.2.1 可恢复错误(无需重新 BOOTSTRAP)

Code名称恢复动作
1004E_GRADE_INSUFFICIENT触发 GRADE_SWITCH-up(必带 HP human_witness,详见 §7.4);不允许跳过见证恢复
1005E_PRESENCE_STALE重新发送 PRESENCE 报文,恢复 last_freshness;若仍失败按 LivenessDetectionBudget 收敛至 Degraded → Suspended
1008E_RR_UNAVAILABLE在 Default-Deny 窗口内 retry-with-backoff(不超过 StaleBudget);超过即转入 Degraded,等待 RR 恢复后重连
1012E_BUDGET_EXCEEDED触发 GRADE_SWITCH-down 或等待预算窗口刷新;不允许通过"忽略预算"恢复

EH.2.2 需 HP 重新见证的恢复(必须重新走 BOOTSTRAP)

Code名称恢复动作
1002E_MANDATE_EXPIRED重新 BOOTSTRAP;新 mandate_id 必不等于旧 mandate_id(与 P10 撤销不可逆一致)
1006E_REVOKED不可恢复;只能由 HP 主动发起新一轮 BOOTSTRAP,新 mandate_id 必不等于旧 mandate_id
1007E_ATTESTATION_INVALID同上;触发该 Mandate 的强制 Revoke 后才允许新 BOOTSTRAP
1011E_ROGUE_DETECTED同上;通常伴随 HP 直接介入与 ego-deviation 审计
1013E_ENDORSEMENT_INVALID同上;触发该 Mandate Revoke 后必须由 HP 发起新一轮 BOOTSTRAP(含合法 endorsement 字段)

EH.2.3 不构成 Faying 状态变化(无恢复需求)

Code名称处理
1001E_NO_MANDATE调用方需先获得 Mandate 后再发起调用;本协议层不存在"无 Mandate 临时放行"路径
1003E_SCOPE_VIOLATION调用方需调整 action 以落入 Mandate.scope.actions;累计可疑触发降级
1009E_REPLAY调用方应使用新的 nonce 重新发起;若为攻击行为已写入安全告警与 HP 视野
1010E_HUMAN_WITNESS_REQUIRED等待 HP 见证后重新发起;不允许由 IF / MS / SA 替代见证
1014E_FAYING_REQUEST_NOT_CONFIRMEDiFay 可在合法速率内重新发起 FAYING_REQUEST,但不得借此实施确认洪流(详见 §9.10.7、附录 B ConfirmationRateLimit)
1099E_PROTOCOL调用方需修正报文结构后重新发起

共同硬约束:恢复路径不得绕过 §EH.4 Default-Deny 收敛;任何"我不确定但先放过去"的乐观恢复路径在协议层均不存在。

EH.3 错误响应的可观测性约束

所有 ERROR 报文必须满足下述四条强约束:

  1. 审计 5 元组:除 E_NO_MANDATE(无 Mandate 上下文)外,全部错误码必须以 (error_code, mandate_id, ts, RP_id, reason) 五元组写入 Attestation Chain / audit-log;该 5 元组与 §3.2、§EH.1"入审计"列保持一致。
  2. HP 视野通道必推:错误码集合 {E_REVOKED (1006), E_ATTESTATION_INVALID (1007), E_REPLAY (1009), E_ROGUE_DETECTED (1011), E_ENDORSEMENT_INVALID (1013)} 必须 push 至 HP 视野通道;DISCLOSURE 路径触发的 E_PROTOCOL (1099) 同样必推。RP 不得静默吞掉。
  3. 不泄露敏感信息:错误响应中禁止携带 MS 内部状态、Mandate 私钥指纹、其他 HP 标识、IF 内部状态机变量等敏感信息;message 与 recovery_hint 字段必须为协议层公开语义,不得透出实现细节。
  4. 审计链可独立校验:写入 Attestation Chain 的错误事件必须携带 §3.3 I-AC-1 / I-AC-2 所要求的签名节点,使第三方可在不持有 MS 私钥的前提下完成自叶到根的链式校验(详见 §6.3)。

Trace:R3.2.1(错误码五元组写入 audit-log)、R3.2.2(错误响应不得携带敏感信息)、R3.2.3(指定错误码必入 HP 视野)、R3.1.4(审计链可追溯字段)。

EH.4 Default-Deny 的统一收敛

任何无法明确归类的错误、任一不可解析字段、RR 不可达期间的任意调用,协议层一律按 E_PROTOCOL 或 E_RR_UNAVAILABLE 拒绝;不存在"我不确定但先放过去"的合法路径,亦不存在"按更宽松状态处理"的乐观恢复路径(含真实在线但被感知为失联的窗口 B,详见 §9.9)。

收敛规则的四个等价表述:

  1. 状态机层:未在 §4.3 Mandate 状态机 / §8.1 Lifecycle 状态机中显式列出的迁移一律拒绝。
  2. 报文层:未在 §5.3 报文清单中显式列出的 msg_type、或信封字段缺失 / 类型错误,一律以 E_PROTOCOL 拒绝。
  3. 错误码层:未在 §5.4 / §EH.1 中显式列出的失败原因一律归类至 E_PROTOCOL 拒绝。
  4. 决策层:协议层仅以 Perceived-Disconnected 作为决策依据;窗口 A(真实失联但被感知为在线)/ 窗口 B(真实在线但被感知为失联)的乐观放行路径在协议层不存在(详见 §9.9 悲观推定原则、P17.1 / P17.2)。

Trace:R2.1.1–R2.1.4(默认拒绝)、R12.1.1–R12.1.3(双语义 Perceived-only 决策)、R12.2.1–R12.2.3(悲观推定 / 感知失联期间拒绝)。