Faying Protocol/1.0 — §10 Error Handling

プロトコル本文ナビ:章目次 | 前章 §9 セキュリティ考慮事項 | 次章 §11 未解決の課題

§10 Error Handling

本章は §5.4 のエラーコードと、具体的な失敗シナリオ、プロトコル応答、状態遷移、回復経路、可観測性の制約をまとめて述べる。すべてのエラーは §5.2 エンベロープ下の ERROR メッセージで応答し、claims 本体は { code, message, mandate_id?, recovery_hint? } のような形である。§5.4 のエラーコード表に加え、エラー処理は本章の 4 節を正とする。

EH.1 エラーシナリオとプロトコル応答

下表は §5.4 に列挙したすべてのエラーコード(1001–1014 と 1099)の全景ビューを示す。各行には、トリガーシナリオ、プロトコル応答、Revoke をトリガーするか、降格をトリガーするか、監査チェーンへの記入が必須か、HP ビューチャネルへの記入が必須かを含む。本表は §5.4 エラーコード表と一対一に対応する。

Code名称トリガーシナリオプロトコル応答Revoke トリガー降格トリガー監査記入HP ビュー記入
1001E_NO_MANDATE業務リクエストが Faying Protocol ヘッダ / Mandate を携えていないRP が即時拒否。audit を確立しない✗✗✗✗
1002E_MANDATE_EXPIREDnow > Mandate.not_afterRP 拒否 + MS が当該 Mandate の Revoke をトリガー✓✗✓✗
1003E_SCOPE_VIOLATION呼び出しアクション ∉ Mandate.scope.actionsRP 拒否 + 疑わしいイベントを記録。累積回数が降格をトリガー✗✓(累積)✓✗
1004E_GRADE_INSUFFICIENTRP が現在の Mandate.grade より強い grade を要求RP 拒否 + 昇格を提案(昇格経路は HP human_witness が必要)✗✗✓✗
1005E_PRESENCE_STALEpresence.last_freshness が max_staleness_ms または LivenessDetectionBudget を超過RP 拒否。IF は能動的に D 次元を停止し、PRESENCE キャリブレーションを待つ。状態機械 Active → Degraded✗✓✓✗
1006E_REVOKEDRR が revoked と標記RP 拒否。同一チェーンの呼び出しを連鎖拒否。IF は直ちに Rogue Fay へ戻る✓(撤回済み)✗✓✓
1007E_ATTESTATION_INVALIDAttestation Chain ノードの署名検証失敗 / タイムスタンプが親ノードの validity window 内にない / endorsement サブフィールドの改竄RP 拒否 + MS が当該 Mandate の Revoke をトリガー✓✗✓✓
1008E_RR_UNAVAILABLERR 照会タイムアウト ≥ StaleBudgetRP が Default-Deny で拒否。IF はすべての D 次元を一時停止。状態機械 Active → Degraded✗✓✓✗
1009E_REPLAYnonce が 2 × max_message_lifetime 内で同一 subject にすでに観測されたRP 拒否 + セキュリティ警告。IF は直ちにセッション鍵を rotate✗✗✓✓
1010E_HUMAN_WITNESS_REQUIREDgrade-up / FAYING_REQUEST など HP 見証が必要な場面で欠落または human_witness 検証失敗RP / MS 拒否。HP 見証後に再発起を待つ✗✗✓✗
1011E_ROGUE_DETECTEDD 次元の違反を検知(ego-deviation / 行為ベースライン超過など)RP 拒否 + 強制 Revoke。IF は直ちに Rogue Fay へ戻る✓✗✓✓
1012E_BUDGET_EXCEEDED呼び出し累積が Scope.budget / ResourceBudget を超過RP 拒否 + 降格または(極端な場合)Revoke をトリガー✓(極端)✓✓✗
1013E_ENDORSEMENT_INVALIDendorsed_scope ⊄ scope / endorsed_grade.autonomy > grade.autonomy / endorsed_lifetime の欠落または超過 / endorsement サブフィールドの改竄 / DELEGATE の子 endorsement が親に収束しないMS が発行拒否 + 当該 Mandate の Revoke をトリガー。IF は直ちにすべての endorsed 行為を停止✓✗✓✓
1014E_FAYING_REQUEST_NOT_CONFIRMEDiFay が能動的に発起した FAYING_REQUEST が BootstrapTimeout 以内に HP の明確な認可を得られないMS が FAYING_REQUEST_RESP { status="timeout" } で返却。いかなる Faying 状態の変化も生じない。イベントを Attestation Chain へ書き込み✗✗✓✗
1099E_PROTOCOLバージョン / フォーマット / フィールド欠落 / 解析不能 / DISCLOSURE mandatory_fields の欠落または解析不能 / 署名入力が不正 / §5.3 メッセージ一覧に明示的に列挙されていない msg_typeRP / MS 拒否。DISCLOSURE 経路からトリガーされた場合は追加で HP ビューへ push✗✗✓✗*(DISCLOSURE 経路は ✓)

* 注:E_PROTOCOL は既定では監査チェーンにのみ書き込む。§5.3.7 DISCLOSURE の mandatory_fields 欠落または解析不能の経路からトリガーされた場合、MS は追加で HP ビューチャネルへプッシュしなければならない(§5.4 注記と整合)。

Trace:R2.1.1–R2.1.4(デフォルト拒否)、R3.2.1–R3.2.3(エラーイベントの監査と HP ビューへの記入)、R4.2.1–R4.2.3(撤回可視性の予算と到達性)、R11.1.4(endorsement 改竄が E_ATTESTATION_INVALID + Revoke をトリガー)、R11.2.1–R11.2.3(endorsement 収束違反が E_ENDORSEMENT_INVALID をトリガー)、R1.3.3(FAYING_REQUEST のタイムアウト未認可が E_FAYING_REQUEST_NOT_CONFIRMED をトリガー)、R13.3.1(DISCLOSURE mandatory_fields の欠落または解析不能が E_PROTOCOL をトリガー)。

EH.2 回復経路

「Faying 状態の再確立を要するか否か」によって、エラーコードを 3 種の回復経路に分ける。すべての回復経路は EH.4 Default-Deny 収束の内で実行しなければならず、楽観的に通過させる中間ウィンドウは存在しない。

EH.2.1 回復可能なエラー(BOOTSTRAP の再実行不要)

Code名称回復アクション
1004E_GRADE_INSUFFICIENTGRADE_SWITCH-up をトリガー(HP human_witness 必須、詳細は §7.4)。見証を飛ばした回復は許さない
1005E_PRESENCE_STALEPRESENCE メッセージを再送し、last_freshness を回復。なお失敗すれば LivenessDetectionBudget に従って Degraded → Suspended へ収束
1008E_RR_UNAVAILABLEDefault-Deny ウィンドウ内で retry-with-backoff(StaleBudget を超えない)。超過すれば Degraded へ移り、RR 回復後に再接続
1012E_BUDGET_EXCEEDEDGRADE_SWITCH-down をトリガーするか、予算ウィンドウの更新を待つ。「予算を無視する」ことによる回復は許さない

EH.2.2 HP の再見証を要する回復(必ず BOOTSTRAP を再実行)

Code名称回復アクション
1002E_MANDATE_EXPIREDBOOTSTRAP を再実行。新 mandate_id は必ず旧 mandate_id と等しくない(P10 撤回不可逆と整合)
1006E_REVOKED回復不能。HP が能動的に新たな BOOTSTRAP を発起するしかなく、新 mandate_id は必ず旧 mandate_id と等しくない
1007E_ATTESTATION_INVALID同上。当該 Mandate の強制 Revoke をトリガーした後にのみ新 BOOTSTRAP を許す
1011E_ROGUE_DETECTED同上。通常は HP の直接介入と ego-deviation 監査を伴う
1013E_ENDORSEMENT_INVALID同上。当該 Mandate の Revoke をトリガーした後、必ず HP が新たな BOOTSTRAP を発起(合法な endorsement フィールドを含む)

EH.2.3 Faying 状態の変化を構成しない(回復の必要なし)

Code名称処理
1001E_NO_MANDATE呼び出し側はまず Mandate を取得してから呼び出しを発起する必要がある。本プロトコル層に「Mandate なしの一時的な通過」経路は存在しない
1003E_SCOPE_VIOLATION呼び出し側は action を調整して Mandate.scope.actions 内に収める必要がある。累積した疑わしさが降格をトリガー
1009E_REPLAY呼び出し側は新しい nonce で再発起すべき。攻撃行為であればすでにセキュリティ警告と HP ビューへ書き込まれている
1010E_HUMAN_WITNESS_REQUIREDHP 見証後に再発起を待つ。IF / MS / SA が見証を代替することは許さない
1014E_FAYING_REQUEST_NOT_CONFIRMEDiFay は合法なレート内で FAYING_REQUEST を再発起できるが、これを借りて確認洪水を実施してはならない(詳細は §9.10.7、付録 B ConfirmationRateLimit)
1099E_PROTOCOL呼び出し側はメッセージ構造を修正してから再発起する必要がある

共通のハード制約:回復経路は §EH.4 Default-Deny 収束を迂回してはならない。「不確かだがとりあえず通しておく」という楽観的な回復経路は、プロトコル層にいっさい存在しない。

EH.3 エラー応答の可観測性制約

すべての ERROR メッセージは下記 4 条の強制制約を満たさなければならない。

  1. 監査 5 つ組:E_NO_MANDATE(Mandate コンテキストなし)を除き、すべてのエラーコードは (error_code, mandate_id, ts, RP_id, reason) の 5 つ組で Attestation Chain / audit-log へ書き込まなければならない。この 5 つ組は §3.2、§EH.1「監査記入」列と一致する。
  2. HP ビューチャネルへの必達プッシュ:エラーコード集合 {E_REVOKED (1006), E_ATTESTATION_INVALID (1007), E_REPLAY (1009), E_ROGUE_DETECTED (1011), E_ENDORSEMENT_INVALID (1013)} は HP ビューチャネルへ push しなければならない。DISCLOSURE 経路からトリガーされた E_PROTOCOL (1099) も同じく必達である。RP がサイレントに飲み込んではならない。
  3. 機微情報を漏らさない:エラー応答中に MS の内部状態、Mandate 秘密鍵のフィンガープリント、他の HP の識別子、IF の内部状態機械変数などの機微情報を携えることを禁止する。message と recovery_hint フィールドはプロトコル層の公開意味論でなければならず、実装の詳細を透けさせてはならない。
  4. 監査チェーンは独立検証可能:Attestation Chain へ書き込むエラーイベントは §3.3 I-AC-1 / I-AC-2 が要求する署名ノードを携え、第三者が MS 秘密鍵を保持せずとも葉から根までのチェーン検証を完了できるようにしなければならない(詳細は §6.3)。

Trace:R3.2.1(エラーコード 5 つ組を audit-log へ書き込み)、R3.2.2(エラー応答に機微情報を携えない)、R3.2.3(指定エラーコードは HP ビューへ必達)、R3.1.4(監査チェーンの追跡可能フィールド)。

EH.4 Default-Deny の統一収束

明確に分類できないいかなるエラー、解析不能ないずれかのフィールド、RR 到達不能の期間中の任意の呼び出しについて、プロトコル層は一律 E_PROTOCOL または E_RR_UNAVAILABLE で拒否する。「不確かだがとりあえず通しておく」正当な経路は存在せず、「より緩い状態に従って処理する」楽観的な回復経路も存在しない(真にはオンラインだが連絡途絶と知覚されたウィンドウ B を含む、詳細は §9.9)。

収束規則の 4 つの等価な表現:

  1. 状態機械層:§4.3 Mandate 状態機械 / §8.1 Lifecycle 状態機械に明示的に列挙されていない遷移は一律拒否する。
  2. メッセージ層:§5.3 メッセージ一覧に明示的に列挙されていない msg_type、またはエンベロープフィールドの欠落 / 型エラーは、一律 E_PROTOCOL で拒否する。
  3. エラーコード層:§5.4 / §EH.1 に明示的に列挙されていない失敗原因は一律 E_PROTOCOL へ分類して拒否する。
  4. 決定層:プロトコル層は Perceived-Disconnected のみを決定の根拠とする。ウィンドウ A(真には連絡途絶だがオンラインと知覚)/ ウィンドウ B(真にはオンラインだが連絡途絶と知覚)の楽観的通過経路は、プロトコル層に存在しない(詳細は §9.9 悲観的推定の原則、P17.1 / P17.2)。

Trace:R2.1.1–R2.1.4(デフォルト拒否)、R12.1.1–R12.1.3(二重意味論 Perceived-only 決定)、R12.2.1–R12.2.3(悲観的推定 / 知覚連絡途絶期間中の拒否)。