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 软超时点)。