Skip to content

[shared/verify-cli] 署名 cp の存在・最終署名を要求できる受理ポリシーを追加する #296

Description

@shinyaoguri

確認日: 2026-09-09。対象コミット: 07277b86572f12dd67e6458867541dab7d7aad56

目的・現状

requireAnchorDensity は cp の疎密だけを検査するため、cp がゼロのとき density:null として素通りする。これは signedCheckpoints.ts に明記された現行仕様であり、既存フラグの実装ミスとは区別する。

今回、正しい root token を持つ三イベントの proof から checkpoints を空配列に変更し、次のオプションで full 検証した。

{ mode: 'full', requireRootAnchor: true, requireAnchorDensity: true,
  signedCheckpointKeyRegistry: [testKey.registryEntry] }

実測: 総合 valid:true / rootAnchored:true / signedCheckpoints.anchored:false / density:null。

「授業では継続的な時刻証拠も必須」という受理条件を現在の二つのフラグだけでは表現できない。cp の削除で密度ゲートの対象外になる点も運用上明示したい。

内容・修正方針

暗号的整合性と授業ごとの受理判定を分離し、少なくとも署名 cp の存在・最終状態への署名・密度を独立に要求できる設計を決定する。個別フラグでも名前付き policy profile でもよいが、検証結果に適用したポリシーと不受理理由を構造化して残す。

旧 proof の閲覧/検証と、現在の試験で受理する条件は別にする。通信障害時の export を禁止して証拠自体を失わせない。final anchor による保証範囲の修正 Issue と整合させる。

受け入れ条件

  • 署名 cp 必須条件では cp=0 を不受理にできる。
  • final anchor 必須条件では未署名 tail を不受理にできる。
  • 既存の permissive な検証は後方互換を維持し、不足した証拠を明示する。
  • 整合性失敗とポリシー不適合を別フィールド/エラーとして返す。
  • CLI 終了コードと Web 表示に同じポリシーが適用される。
  • root のみ、cp のみ、cp=0、密度不足、最終署名あり/なしをテストする。
  • 時間窓・LMS受領時刻を扱う場合は ADR-0013 の役割分担を維持する。

関連情報

スコープ外

既存フラグの意味を告知なく厳格化すること、分析器の出力を暗号検証合否に混ぜること。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions