Skip to content

[shared][P1] 未署名の末尾が残る proof を temporal: anchored に昇格させている #295

Description

@shinyaoguri

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

何が起きたか

deriveTemporal は有効な root anchor と密な署名 cp があれば anchored を返すが、最後の署名が最終イベントに届いているかを確認しない。短い未署名 tail は density.sparse にもならず、「申告セッション全体が時刻固定」という型の説明より強い表示になる。

再現手順・確認結果

shared の既存 fixtures を使用し、次の構成を生成した。Worker のメッセージ輸送のみを Node で代替し、PoSW の 10,000 回 SHA-256 と ECDSA は実際に計算した。鍵はその場で生成したテスト鍵で本番鍵は使用していない。

  1. createTestKey() で鍵を作り、createSessionStartToken() の署名済み token を生成。
  2. TypingProof.initializeAnchored() 後、contentChange を a/b/c の三イベント記録し、内容 abc を export。
  3. buildSignedCheckpoints() に eventIndexes: [0] を指定し、最初のイベントだけを署名。
  4. verifyProofFile に mode: full、requireRootAnchor: true、requireAnchorDensity: true、テスト鍵 registry を渡す。
  5. 検証結果を通常の sparse / postHocSuspected マッピングで deriveAssurance に渡す。

実測:

{
  "valid": true,
  "coverage": {
    "signedCount": 1,
    "lastSignedEventIndex": 0,
    "coverageRatio": 0.3333333333333333
  },
  "temporal": "anchored"
}

影響・期待した動作

署名が固定するのは先頭の prefix のみ。未署名 tail は既存署名を変更せず再構成できる。暗号検証自体の成功と、全体に対する時間保証は区別すべき。時間保証の最上位には最終内容・チェーン状態への署名を条件として含め、未到達なら partial と署名範囲を表示する。

修正方針

coverage と terminal anchor の有無を AssuranceInput に伝播する。最終署名を得られなかった場合も証拠の export 自体は救済し、受理方針で扱う。最終署名があっても各イベントの実時刻が直接証明されるわけではないので、文言は署名が提供する時刻境界に合わせる。

受け入れ条件

  • 上の 1/3 署名 fixture は anchored にならない。
  • 未署名 tail のイベント数・最終署名位置が Web/CLI で確認できる。
  • 最終状態まで署名された正常 fixture は期待する保証になる。
  • 既存の sparse/post-hoc/署名不正/root 未署名による降格が維持される。
  • Web/CLI parity test と ADR-0020 の語彙を更新する。
  • 空セッションと旧形式の扱いを明示する。

関連情報

スコープ外

PoSW の反復数変更、著述者本人の証明。cp の存在を必須にする受理ポリシーは別 Issue。

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

    bugSomething isn't workingpkg:sharedpackages/shared

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions