Web/Aの技術概要と検証可能性

2週間のエンジニアリング深掘り:検証、セキュリティモデル、およびフォームの暗号化


セッションマップ

アジェンダ (60分)

  • Part 1: ビジョン — PDF/XMLの罠を超えて
  • Part 2: コア・アーキテクチャ — 3レイヤーモデルとHMP
  • Part 3: L2 セキュリティ深掘り — 暗号化、PRF、およびWASM
  • Part 4: データ主権 — Web/A Folio と信頼レベル (LoA)
  • Part 5: 信頼モデルとガバナンス — ライトウェイト・トラストとDID-lite
  • Part 6: エンジニアリング詳細 — タイポグラフィとバイモーダルUI
  • Part 7: 現在の状況とロードマップ — レッドチーミングと標準化

ビジョン

Soraneとは何か?

  • 検証可能なWebドキュメントのためのオープンソース参照実装
  • 長期的な判読性暗号化による信頼にフォーカス
  • PDFでは不十分な公共セクターのワークフロー向けに設計

マシン専用の罠 (XTX / カスタムXML)

  • 構造化データが人間には読めなくなる
  • ベンダやスキーマ間でセマンティクスが乖離する
  • レイアウトが切り離されることで、人間による信頼が損なわれる

XML + XSLT: 外部接続性の罠

  • レンダリングが外部のスタイルシートに依存する
  • 依存関係なしには長期的な存続が危うい
  • アーカイブの真正性維持の運用コストが膨大になる

署名検証の壁

  • AATLとビューアのロックインが隠れた信頼のアンカーを生んでいる
  • ライセンスされたツール以外での検証コストが高い
  • Web/Aは、ビューアへの依存を排除することを目指している
  • PDFは判読可能だが、大規模な検証が困難

比較

Web/A vs PDF/A vs XML/XTX

比較表 項目 Web/A PDF/A XML/XTX ポータビリティ HTML 1ファイル ファイルベース ツールに依存 検証可能性 署名を内蔵 ビューアに依存 スキーマに依存 人間による可読性 最高(Web標準) 高い 低い(専用ツール要) 要約 可搬かつ検証可能 可搬だが、意味論が脆弱 構造化されているが脆い

なぜSRNを構築したのか

  • 精密なタイポグラフィはセキュリティの問題である:レイアウト自体が検証可能でなければならない
  • ドキュメントは数十年にわたり読めるだけでなく、証明可能でなければならない
  • 暗号化は特定のサーバに依存せずに機能しなければならない

コア・アーキテクチャ

4レイヤー信頼モデル

  • Layer 1: The Template — 規約・設問・スキーマの定義
  • Layer 2: The Data — ユーザーによる具体的な事実・証跡データ
  • Layer 3: The Context — メタデータ・配送制御・バリデーション属性
  • Layer 4: The Presentation — UI・フォント・表示ロジック
Web/A ドキュメント (.html) Layer 4: Presentation (View / UI) CSS、フォント、最小限のJS Layer 3: Context (Metadata / Routing) 配送タグ、有効期限、Nonce、ポリシー参照 Layer 2: Data (Evidence / Result) 暗号化ペイロード、署名済み事実記録 Layer 1: Template (Definition / Schema) 人間用(可読) HTML / テンプレート 等価 マシン用(定義) JSON-LD / ロジック 発行者署名: Ed25519 + PQC

検証可能性

人間・マシン等価性 (HMP)

  • 人間用のHTMLとマシン用のJSON-LDが確実に統合されている
  • 署名によって、両方のビューが同一の事実を表していることを保証する
  • 生成された全てのドキュメントに検証UIが組み込まれている

適合性

Web/A 適合性レベル

Web/A 適合性レベル Web/A-1s Semantic (意味論) HTML + CSS JSON-LD 埋め込み 基本的な署名 Web/A-1u Universal (汎用) 全アセット埋め込み サブセット化フォント CLS 0 (レイアウト崩れなし) Web/A-1p Provenance (出自) C2PA マニフェスト HMP証明 高信頼アーカイブ

L2 セキュリティ

Web/A Form セキュリティのハイライト

  • Layer 1 テンプレートは署名され、ハッシュで束縛されている
  • Layer 2 ペイロードは Ed25519 署名を使用
  • 暗号化は AAD を用いて layer1_ref に束縛される (切り貼り攻撃防止)

L2 暗号化

アーキテクチャ概要

flowchart TD
    User["ユーザー入力"] --> Plain["L2 平文"]
    
    subgraph browser ["ブラウザ(クライアント)"]
        Plain --> Sign["署名者 (Ed25519)"]
        Sign --> Signed["L2 署名済みペイロード"]
        Signed --> Encrypt["暗号化 (HPKE / WASM)"]
    end
    
    Encrypt --> Envelope["L2 暗号化エンベロープ"]
    
    Envelope --> Storage["配送 (Local / WebA Post)"]
    
    subgraph aggregator ["アグリゲータ(発行者)"]
        Storage --> Decrypt["復号器 (Strict Replay Check)"]
        Decrypt --> Verify["署名検証器"]
        Verify --> Data["検証済みデータ"]
    end

エコシステム

Web/A 5つの構成要素

graph TD
    Maker[Web/A Maker] -->|1. 鋳造| Form[Web/A Form]
    Maker -->|1. 鋳造| Doc[Web/A Doc]
    
    Form -->|2. 入力・署名| Doc
    Doc -->|3. 保管| Folio[Web/A Folio]
    
    Folio <-->|4. 配送| Post[Web/A Post]
    Post -->|5. 収集| Aggregator[Aggregator]
  • Foundry (Maker/Aggregator):信頼の生成と集計
  • Interface (Form/Doc):人間と機械が等価に扱える容器
  • Infrastructure (Folio/Post):主権的な「所有」と「配送」

L2 暗号化

階層的鍵導出

flowchart TD
    Instance["SRN マスター鍵"] -->|HKDF| Root["組織ルート鍵"]
    Root -->|HKDF| Campaign["キャンペーン・フォーム鍵"]
    
    subgraph per_form ["フォーム毎"]
    Campaign --> Pub["公開鍵(フォームに埋め込み)"]
    Campaign --> Priv["秘密鍵(アグリゲータで使用)"]
    end
  • 運用の手間がかからない鍵ローテーション
  • キャンペーンおよびフォーム間の隔離
  • マスター鍵を露出させない鍵預託

L2 暗号化

WebAuthn PRF による復号

sequenceDiagram
    participant User as ユーザー
    participant Browser as ブラウザ
    participant Auth as WebAuthn/認証器
    
    User->>Browser: 「パスキーでロック解除」をクリック
    Browser->>Auth: PRF拡張付きで get() を実行
    Auth-->>Browser: PRF 出力 (シード)
    Browser->>Browser: HKDF(シード) -> ラップ鍵
    Browser->>Browser: AES復号 (ラップされた秘密鍵)
    Browser->>Browser: L2 エンベロープを復号
    Browser->>User: 平文データを表示

暗号化

L2 エンベロープのライフサイクル

sequenceDiagram
  participant User as ユーザー
  participant Browser as ブラウザ
  participant Issuer as 発行者
  User->>Browser: フォームに入力
  Browser->>Browser: ペイロードに署名 (Ed25519)
  Browser->>Browser: 暗号化 (HPKE準拠)
  Browser->>Issuer: エンベロープを送信
  Issuer->>Issuer: 復号 + 検証

L2 セキュリティ

リプレイ保護

  • エンベロープ毎に nonce を保存し、厳格に重複をチェック
  • Security Audit v3 要件:復号時のリプレイガードを必須化
  • CLI: JsonFileReplayStore / ブラウザ: LocalStorageReplayStore
flowchart TB
  S[エンベロープ] --> N{既知の nonce?}
  N -- No --> A[受理 + 保存]
  N -- Yes --> R[拒絶]

トラフィック解析対策

  • バケットパディング (1KB / 4KB / 16KB / ...)
  • ペイロードのサイズクラスを秘匿
  • 高機密用途向けにダミートラフィックを計画中

WASM 暗号モジュールの完遂

  • Ed25519 / X25519 / ML-KEM / ML-DSA / AES-GCM / SHA2 を WASM 化
  • ブラウザ側の JS 依存を排除:性能向上とサイドチャネル攻撃耐性
  • サイドローディング可能な独立した暗号コアとしての検証を完了

安全性

パイロット運用における安全ガイド

  • 利用者向けガイドの公開:リスクと責任境界の明文化
  • 人的サポート体制:技術的限界を運用(バックアップ等)で補完
  • 実験的機能の明示:HMPの実証を通じた段階的な信頼獲得

前方秘匿性

Pre-Key インフラストラクチャ草案

  • prekey_url を介した使い捨て受信者鍵
  • オフライン提出の利便性を維持
  • 静的な鍵へのフォールバック時には警告を表示

L3の展望

Layer 3:Web/A Folio

Web/A Folioの展望 Web/A Folio アイデンティティ紐付け型コンテナ 履歴 + 証明 + 主張 ポータブルでオフライン対応 検証可能な提示 (VP) 選択的開示 認可フロー 同意 + 権限の委譲 依存当事者 (RP) サービスの検証者

Folio設計

信頼レベルとLoA

  • LoA 1 (本人申告):正本 = 人間可読テキスト。JSONは派生。
  • LoA 2+ (検証済み):正本 = マシン可読。人間用は派生。
  • バリデーション:LoA 2+データを編集すると「検証済み」が無効化される。

Folio内部構造

提出用バンドル

graph TD
    B[提出用バンドル] --> M[Manifest.json]
    B --> D[Docs/ HTML]
    B --> A[Attachments/ PDF]
    B --> V[VP/ スコープ限定の主張]
    B --> R[検証レポート]
    
    M -->|署名済み| S[Manifest.sig]
    R -->|全ファイルをカバー| B

Folio CLI

ツールキット・アーキテクチャ

graph TD
    MD[Form.markdown] -->|parse| Schema[Schema.json]
    Data[Data.json] -->|fill| Filled[Filled.html]
    MD -->|validate| Result[検証結果]
    Key[Passkey] -->|sign| Signed[署名済みHTML]

Folio適合性

ポリシー用DSL(草案)

profile: onboarding
requires:
  - manifest.bundle_id
  - subject.id
rules:
  - id: vp_required_for_l3
    when: claims.level == 3
    assert: vp.exists == true

エコシステム戦略:AIエージェント・ファースト

  • エージェントがWeb/Aを読み取り、検証し、要約できる
  • 構造化データが安全な自動化を可能にする
  • 人間が最終的な信頼のアンカーとして残り続ける

AI 連携

Bring Your Own AI Agent (BYOA)

  • MCP (Model Context Protocol) 対応:エージェントが Folio に直接アクセス
  • 検証済みのコンテキスト:AI が「正しい証拠」に基づいて推論・対話を遂行
  • 個別のエージェント選択:特定のプラットフォームに縛られない自由なAI活用

信頼とガバナンス

「ライトウェイト・トラスト」モデル

  • 強力な検証機能を維持しつつ、導入コストを低減
  • レガシーPKIからの段階的な移行を想定した設計
  • インフラ刷新なしに耐量子暗号 (PQC) への移行をサポート

権限の階層化:PasskeyからBuildへの委譲

  • ルート権限がビルド時の署名権限を委譲する
  • Passkeyによるハードウェアベースの信頼
  • ルート鍵を露出させることなく、自動化を可能にする

エフェメラル(一時的)な発行

  • ビルド毎に署名鍵をリフレッシュし、漏洩時の影響範囲を最小化
  • 頻繁な鍵更新を容易にする
  • オフライン、ファイル中心のワークフローに適合する

透明性によるアイデンティティ (DID-lite)

  • Web上での公開と透明性から信頼を導き出す
  • 重厚な証明書階層よりも摩擦が少ない
  • フィンガープリントの公開により「既知の良い発行者」リストを提供

暗号の俊敏性 (Cryptographic Agility)

  • 動的な信頼のルートと継続性
  • ハイブリッド署名(従来型 Ed25519 + PQC ML-DSA-44)
  • 量子時代の安全な移行を最優先要件としている

法的ポジショニング

  • 「意思」から「証拠」へ
  • 証明可能な意図と監査可能性にフォーカス
  • 署名法に基づく厳格なPKIとは実用的な距離を置く

展開の安全性

クライアントの安全性:下書き状態の保存

  • 下書きHTML内に作業状態を埋め込み
  • デバイス間移動やキャッシュクリア後の復元を可能に
  • 下書きファイル自体を機密性の高い成果物として扱う

エンジニアリング

高度なタイポグラフィ要件

  • 行政標準文字のカバー (IVS/SVS)
  • 公的なレイアウトの忠実な再現(グリッド再現)
  • セキュリティ制約としての「レイアウト崩れゼロ」

フォーム再現における課題

  • レンダリングエンジンの差異 vs ミリメートル単位の精度
  • レイアウトに依存するセマンティクス(意味論)
  • 署名されたビューが長期間安定していなければならない

バイモーダル・プレゼンテーション

  • アーカイブ・ビュー:公式検証用の固定レイアウト
  • ウォレット・ビュー:スマートフォン向けのレスポンシブなカード表示
  • 単一の署名済みペイロードからCSSで動的に切り替え可能

保存プロファイル

  • Web技術の安全なサブセットを定義する (Evergreen)
  • ブラウザの仕様変更によるアーカイブの破損を防ぐ
  • プロファイル検証により、長期的な可読性を保証する

現在の状況

Web/Aの進化(サマリー)

Web/Aの進化タイムライン 3レイヤー信頼モデル フォーム対応 Layer 2 暗号化 機密ペイロードの保護 監査ループ 問題修正のトラッキング

タイムライン

エンジニアリングの進捗

flowchart LR
  A[L2 実現可能性] --> B[暗号化フォーム]
  B --> C[ReplayGuard 強化]
  C --> D[WASM 移行完遂]
  D --> E[Red Team 評価 v8]
  E --> F[安全ガイド公開]
  F --> G[広域運用に向けた設計]

レッドチーミング

反復的なフィードバックループ

sequenceDiagram
  participant Dev as Web/A チーム
  participant RT as レッドチーム
  participant Spec as 仕様 + 文書
  RT->>Dev: 発見事項 (v2)
  Dev->>Spec: 修正計画
  Dev->>RT: 実装報告
  RT->>Dev: 再評価 (v3)
  Dev->>Spec: ハードニング・メモ

導入戦略

段階的な導入アプローチ

段階的導入戦略 Layer 1 公的ドキュメント 証明書、通知 まず監査可能性を確保 現在のSRNスコープ Layer 2 + 3 機密データと配送属性 L2 暗号化 リプレイガード (L3) 選択的アクセス制御 Layer 4 ID 連携と認証提示 検証可能提示 (VP) ホルダー・バインディング 将来の拡張スコープ

ロードマップ

文書の類型化

文書の類型化 Tier 1 公共アセット 官報、統計レポート 誰でも閲覧可能 公共の信頼 Tier 2 個人記録 領収書、個別通知 機密性が最優先 直接配送 Tier 3 本人確認資格 住民票、身分証 なりすまし防止が必須 ホルダーとの紐付け

課題

標準化に向けた課題

  • デバイス間、および対面での転送プロトコル
  • ブラウザサンドボックス内での実用的なホルダーバインディング
  • ブラウザによるネイティブな検証サポート
  • 長期検証 (LTV) の確立


次のステップ

  • Pre-Key サーバの PoC + テストハーネス
  • WASM バインディングの形式的な外部レビュー
  • ダミートラフィック生成戦略の策定
  • デプロイ用の CSP/SRI テンプレートの公開

最後に

なぜこれが重要なのか

  • Web/Aは文書を、単なるファイルではなく検証可能な「成果物」に変える
  • 信頼は時間、デバイス、機関を超えてポータブルになる
  • 目標は、ロックインではなく、透明なセキュリティによる相互運用性である