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(悲觀推定 / 感知失聯期間拒絕)。