Faying Protocol/1.0 — §7 Authorization Grades

協定正文導航:章節目錄 | 上一章 §6 密碼學 | 下一章 §8 生命週期

§7 Authorization Grades

本章定義等級化授權。協定不接受「一刀切的全權委託」:每份 Mandate 都必須寫明 grade,每個 grade 的自主性、在場要求、封包要求三欄都有精確語意。§7.2 把事件觸發的等級切換用矩陣窮舉出來,§7.3 鎖定「在場失效就必須收緊」的單調性原則,§7.4 給出封包層的強制項差異,§7.5 在 G1–G4 之上疊加 Endorsement Grades 子等級,作為離線自治的許可層。

G0 與 G1–G4 的正交關係:G0 Emergency Override 不在 G1 ↔ G4 的連續等級譜裡,而是一個正交的 override 通道。G1–G4 表達「自主性強弱的連續軸」;G0 是 Human Prime 單邊奪回控制權的緊急通道,僅在事件佇列優先級與終局狀態(Suspended)層面體現,不參與「升級 / 降級」語意。任何把 G0 視為「比 G1 更嚴格的連續檔位」的實作均與協定語意不一致。

數值預算口徑:本章中出現的 max-staleness 數值(G1=5s / G2=60s / G3=5min / G4=30min)均與附錄 B「預設參數預算」中的 Presence max-staleness(G1..G4) 一一對應;附錄 B 的「預設值」為本章使用的口徑,「上限」列為實作可調整的協定層硬上限。

§7.1 等級精確定義

等級自主性在場要求封包要求適用
G0 Emergency Override不適用不適用HP 單邊發起,僅一種作用:立即把目標 Mandate 推入 Suspended緊急奪回
G1 Strict極低即時連續在場(人臉 / WebAuthn UV,max-staleness ≤ 5s)每次外部呼叫必須附帶 ≤ 5s 的 PresenceSignal不可逆操作(轉帳、簽署、刪庫、終端高權限指令)
G2 Moderate中任務級在場(敏感子任務前需新鮮在場,max-staleness ≤ 60s)敏感動作前 PresenceSignal中頻代理操作(訂票、改簽、表單提交)
G3 Loose高關鍵步驟詢問(關鍵決策點前 intent-ticket)關鍵步驟攜帶一次性 intent-ticket長期低風險代理(郵件整理、行程)
G4 Autonomous極高週期心跳(presence-heartbeat,max-staleness ≤ 30min)心跳維持 + 週期稽核回流範圍內自治例行任務

設計抉擇:G0 不在 G1 ↔ G4 的連續譜裡,而是一個正交的 override 通道——它存在的唯一目的是在任何狀態下讓 HP 立即奪回控制權。

自主性數軸約定:G0 < G1 < G2 < G3 < G4(數值越大自主性越高)。本章後續所有「升級 / 降級」判定均以 target.autonomy 與 current.autonomy 的大小比較為準;G0 不參與該數軸比較——它透過 §7.2 矩陣的最後一行單邊遷移到 Suspended。

在場要求與 Presence_Signal 型別對齊(詳見 §3.2 訊號型別表):

  • G1 Strict:典型訊號 face-continuous 或 webauthn-uv-fresh,max_staleness_ms = 5_000;
  • G2 Moderate:典型訊號 fingerprint-tap(敏感子任務前),max_staleness_ms = 60_000;
  • G3 Loose:典型訊號 intent-ticket(關鍵步驟一次性消耗),無週期 max-staleness 上限,但每個關鍵步驟必須有新鮮 intent-ticket;
  • G4 Autonomous:典型訊號 presence-heartbeat-only,max_staleness_ms = 1_800_000(30min)。

封包要求差異(與 §5 封包清單交叉):

  • G1 / G2 升級方向的 GRADE_SWITCH:human_witness 必填(MUST),見證形態預設為 WebAuthn UV 斷言(見 §6.1 演算法套件);
  • G3 / G4:升級到這兩檔(即便 target.autonomy 仍低於源等級時也屬「放寬自主性」路徑)同樣要求 human_witness;只有「主動降級」路徑上 human_witness 才退化為 MAY;
  • G0:只能由 HP 單邊發起(E_PROTOCOL 拒絕由 IF / MS / SA 替代發起的 G0),並要求附帶可驗證的 human_witness;G0 封包必須以最高優先級寫入 Attestation Chain 與 Revocation Registry 推送佇列。

§7.2 觸發條件矩陣

下表是 6 類觸發事件 × 4 個非 G0 當前等級的 6×4 狀態遷移矩陣,是協定層強制的事件 → 終態映射;不存在表外遷移路徑。

事件當前 G1當前 G2當前 G3當前 G4
在場新鮮度過期→ Suspended→ G3 Loose→ Suspended→ Suspended
HP 主動升級—→ G1(需見證)→ G2 / G1(需見證)→ G3 / G2 / G1(需見證)
HP 主動降級→ G2→ G3→ G4—
偵測到 Ego 偏離→ Revoked→ Revoked→ Revoked→ Revoked
撤銷註冊不可達拒絕呼叫拒絕呼叫拒絕呼叫拒絕呼叫
G0 Override→ Suspended→ Suspended→ Suspended→ Suspended

矩陣語意補充說明:

  • 「在場新鮮度過期」行的非對稱性:G2 → G3 是允許的「溫和降級」(仍處於 Active 狀態機分支);G1 / G3 / G4 → Suspended 表達三種各不相同的判定邏輯——G1 因高敏感場景下「無新鮮在場即不能行動」;G3 因 intent-ticket 場景下心跳不是主要在場依據,連續無關鍵步驟新鮮訊號即視為非可信狀態;G4 因心跳是其唯一在場依據,心跳遺失即直接吸收到 Suspended(與 §7.3 例外條款一致)。
  • 「HP 主動升級」行:G1 處的「—」表示 G1 已是最嚴檔位,無更高升級空間;其餘條目允許跨 1–3 檔的一次性升級,所有升級均必帶 human_witness(詳見 §7.4)。
  • 「HP 主動降級」行:G4 處的「—」表示 G4 已是最寬檔位,無更寬降級空間;降級方向不要求 human_witness,但 RR 通知與 AC 鏈記錄仍必填。
  • 「偵測到 Ego 偏離」行:四檔統一進入 Revoked 終態(Revoked 是吸收態,詳見 §8 / Property 10);觸發該行的判定邏輯由 §3.6 Behavior Baseline Service 與 §9.10.6 T5 聯合給出。
  • 「撤銷註冊不可達」行:四檔統一為「拒絕呼叫」,並非狀態遷移——它是單次呼叫的 Default-Deny 收斂路徑(錯誤碼 E_RR_UNAVAILABLE),Mandate 自身仍維持當前等級;該行與 §3.4 RR 不變式 I-RR-2 一致。
  • 「G0 Override」行:由 HP 單邊發起,四檔統一吸收到 Suspended;事件佇列上以最高優先級處理(任意 pending 事件均讓位)。

§7.3 降級單調性原則

未在場則更嚴格——這是 Graceful-Degradation 的反直覺但必須的形態:在場訊號遺失意味著「人類視野變窄」,因此自主性必須收緊而非放開。在編號上表現為:在場失效 → grade 數值變小(更嚴)。

形式化表述(與 P11 對齊):

∀ M ∈ ActiveMandates. PresenceState(M).stale = true ⟹
    next_state(M) ∈ { Degraded(g'), Suspended }
    where g'.autonomy < M.grade.autonomy

即:在場失效後,下一次狀態轉換必須遷移到 autonomy 嚴格更低(數值更小、安全性更高)的 grade,或直接遷移到 Suspended;禁止維持原 grade,禁止切換到自主性更高的方向。

例外(吸收態約束):

  • G4 Autonomous 心跳遺失 → 直接 Suspended:因 G4 已是自主性最高一檔,無更嚴的可降——直接吸收到 Suspended 是協定層硬約束(與 §7.2 矩陣第一行 G4 列一致)。
  • Degraded 狀態超過 MaxDegradedDuration → 直接 Suspended:避免「長期處於次級狀態」成為隱性的「放寬路徑」;具體閾值見附錄 B MaxDegradedDuration。

§7.4 等級切換封包要求差異

下表給出三類切換方向在封包層強制項上的差異;任一行的「MUST」列若缺失,對應切換封包一律以 E_PROTOCOL 或 E_HUMAN_WITNESS_REQUIRED 拒絕(詳見 §5.4 錯誤碼表)。

切換方向human_witnessRR 通知AC 鏈記錄
升級(自主性更高)MUSTMUSTMUST
降級(自主性更低)MAYMUSTMUST
Emergency OverrideMUSTMUST(最高優先級推送)MUST

封包層語意補充:

  • 升級方向:GRADE_SWITCH.target_grade.autonomy > current_grade.autonomy 時 human_witness 必填;缺失或驗章失敗 → E_HUMAN_WITNESS_REQUIRED(錯誤碼 1010)。該行約束與 Requirement 6.1 完全對齊。
  • 降級方向:human_witness 退化為 MAY,但 RR 通知與 AC 鏈記錄仍必填——降級也是一類需要稽核與可觀測的狀態變化,禁止「靜默降級」。
  • Emergency Override(G0):human_witness 必填;RR 通知必須以最高優先級推送(與 §3.4 RR 推送通道的 priority 欄位一致);AC 鏈記錄為最高優先級寫入。
  • AC 鏈記錄「必填」的協定層語意:所有 GRADE_SWITCH(無論升級 / 降級 / G0)均產生一條 event_type = "grade-switch" 的 AttestationEvent(詳見 §3.3),由 MS 在切換完成後立即追加;缺失即視為稽核缺口,觸發 E_ATTESTATION_INVALID。

§7.5 Endorsement Grades 子等級

設計立場:Endorsement 不是新的等級,而是疊加在 G1–G4 上的「離線自治許可層」。每個非 G0 等級(即 G1–G4)都可疊加一份 endorsement,使該 Mandate 在物理失聯期間(按 §3.5 Liveness Channel 與 §4.3 狀態機判定)仍能在限定範圍內自治。G0 Emergency Override 不允許疊加 endorsement——它是 HP 單邊收回控制的通道,與「離線自治」語意互斥。

疊加語意:

主等級是否允許 endorsementendorsement 預設作用
G0 Emergency Override不允許—
G1 Strict允許物理失聯期間 → Disconnected;endorsed_scope 通常為高敏感動作的最小子集;endorsed_grade 預設 = G1(不下降)
G2 Moderate允許endorsed_grade 預設 = G2;典型用法:定時執行任務 / 完成已開始的事務
G3 Loose允許endorsed_grade 預設 = G3;典型用法:資訊整理 / 讀類操作的離線持續
G4 Autonomous允許endorsed_grade 預設 = G4;典型用法:長時離線代理 + 重連後批次對帳

子等級硬約束(與 Requirement 11.2 連動,最終由 P16.3 鎖定):

  • scope 收斂:endorsement.endorsed_scope ⊆ Mandate.scope;
  • grade 收斂:endorsement.endorsed_grade.autonomy ≤ Mandate.grade.autonomy(即 endorsed_grade 在自主性上不弱於主 grade,安全性 ≥ 主 grade);
  • lifetime 有限:endorsement.endorsed_lifetime 必須有限,不允許 ∞ 或缺失,且 ≤ (Mandate.not_after − Mandate.not_before);附錄 B 進一步給出軟上限 Endorsed_Lifetime(預設 4h,上限 12h);
  • 離線撤銷策略可列舉:endorsement.offline_revocation_policy ∈ {"stop-and-audit", "stop-only", "graceful-stop"};預設 stop-and-audit。

任一硬約束不成立時,BOOTSTRAP / DELEGATE 階段一律以 E_ENDORSEMENT_INVALID(錯誤碼 1013)拒絕(詳見 §5.4);DELEGATE 時還需保證 child.endorsement 收斂於 parent.endorsement——即子 Mandate 的 endorsed_scope / endorsed_grade / endorsed_lifetime 不可超越父 Mandate 的對應欄位。

與失聯狀態機的協同(詳見 §4.3、§8.4、§9.8):

  • 當 PresenceState.stale = true 且 Mandate 是 Endorsed_Mandate → Active → Disconnected(非 Endorsed 路徑直接 → Suspended);
  • Disconnected 期間,iFay 僅允許在 endorsement.endorsed_scope 內、按 endorsement.endorsed_grade 約束執行 D 維度行為;
  • endorsement.endorsed_lifetime 一到期立即軟逾時 → Disconnected → Revoked,即使 iFay 仍處於物理斷開狀態(Requirement 11.3 第 3 條「軟逾時強約束」);
  • 責任承接端始終為該 Mandate 的 issuer(Human Prime),不因 endorsement 存在而改變(詳見 P16.5 Endorsement_Accountability_Invariant 與 Requirement 11.4)。

Endorsement 與 G0 的互斥關係:G0 Emergency Override 是 HP 單邊收回控制權的通道;其語意指向的目標狀態是 Suspended(「立即停止一切 D 維度行為」)。Endorsement 的語意指向的是「物理失聯期間允許的 D 維度行為子集」。兩者在狀態機上是互斥事件——G0 一旦觸發,目標 Mandate 立即吸收到 Suspended;該 Mandate 在 Suspended 期間不再適用 endorsement 的 D 維度放行規則(即便 endorsement 仍未到 lifetime 軟逾時點)。