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