Faying Protocol/1.0 — §7 Authorization Grades
§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:避免「長期處於次級狀態」成為隱性的「放寬路徑」;具體閾值見附錄 BMaxDegradedDuration。
§7.4 等級切換封包要求差異
下表給出三類切換方向在封包層強制項上的差異;任一行的「MUST」列若缺失,對應切換封包一律以 E_PROTOCOL 或 E_HUMAN_WITNESS_REQUIRED 拒絕(詳見 §5.4 錯誤碼表)。
| 切換方向 | human_witness | RR 通知 | AC 鏈記錄 |
|---|---|---|---|
| 升級(自主性更高) | MUST | MUST | MUST |
| 降級(自主性更低) | MAY | MUST | MUST |
| Emergency Override | MUST | MUST(最高優先級推送) | 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 單邊收回控制的通道,與「離線自治」語意互斥。
疊加語意:
| 主等級 | 是否允許 endorsement | endorsement 預設作用 |
|---|---|---|
| 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 軟逾時點)。
