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 첨부 필수비가역 작업(송금, 서명, DB 삭제, 단말 고권한 명령)
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만 일방적으로 발기할 수 있고(IF / MS / SA가 대신 발기한 G0은 E_PROTOCOL로 거부), 검증 가능한 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가 일방적으로 제어를 회수하는 통로이며 "오프라인 자치" 의미론과 상호 배타적이다.

겹침 의미론:

주 등급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 소프트 타임아웃 지점에 이르지 않았더라도 마찬가지다).