⚠️ SIMULATION NOTICE / 模擬演習 本文書は、品質確保およびシナリオテストのために生成された架空の報告書です。

製品セキュリティ現状報告 (2026-01-03)

報告者: SRN Tech Lead 対象期間: 2026-01-01 〜 2026-01-03

1. エグゼクティブサマリー

本期間において、Web/Aおよび関連モジュール(CIV, Folio, SSG)に対し、100件を超えるコミットによる大規模な改修を実施した。 主な成果は、(1) Web/Aフォームの実用性を飛躍的に高める "Infinite Canvas" UXと入力支援機能の実装、(2) マイナンバーカード等を扱う CIV (Citizen Identity Verification) モジュールの統合、(3) Manifest Architecture (Pack & Prune) による配付効率の最適化である。

一方で、開発プロセスにおいて**重大なセキュリティインシデント(Firebase APIトークンの漏洩)**が発生した。これについては直ちに無効化およびローテーションを実施し、Git履歴の洗浄を含む再発防止策を講じた。

以下に詳細を報告する。


2. Web/A Form エコシステムの強化

2.1. "Infinite Canvas" UX (最低限の実用性から「愛される製品」へ)

従来の「紙のような固定幅レイアウト」を廃止し、画面幅一杯を使うフラットデザイン(Infinite Canvas) へと刷新した。

  • 目的: 複雑な行政申請(数十列の表など)に耐えうる実用性 ("Utility First") の確保。
  • 実装:
    • スタイルシート (style.css) のフルスクラッチ改修。
    • ヘッダーと一体化した「スティッキー・ツールバー」の実装。
    • モバイル端末での操作性を考慮した余白・フォントサイズの調整。

2.2. Input Intelligence (入力支援)

「手書きよりも楽な入力」を実現するため、以下の機能を実装した。

  • (required) バリデーション: Markdown定義側で必須項目を指定可能にし、満たされない場合は提出ボタンを無効化(グレーアウト)する制御を導入。
  • 郵便番号自動補完: postal プラグインを統合し、7桁入力で住所を自動補完。
  • LGコード補完: 地方公共団体コード(LGCode)の辞書検索をクライアントサイドで実装。
  • 動的テーブル: 行追加・削除が可能な動的テーブルにおいて、連番(Auto-numbering)や計算ロジックが追従する仕組みを整備。

2.3. Manifest Architecture & Plugin System

機能増大に伴うファイルサイズ肥大化を防ぐため、"Pack & Prune" (必要なものだけ詰め込み、あとは削ぎ落とす) 戦略をアーキテクチャレベルで実装した。

  • ManifestManager: フォント、辞書データ、WASMモジュール等の巨大アセットを blob: URL として管理。
  • Lazy Loading: 郵便番号辞書やL2暗号化モジュールは、フォーム内で実際に必要とされた場合のみバンドル・ロードされる。
  • weba-convert: MarkdownからHTMLへのコンパイル、およびその逆変換を行うCLIツールを整備。

3. CIV (Citizen Identity Verification) モジュールの進捗

マイナンバーカード(JPKI)に加え、パスポート、在留カード、および欧州身分証(European Identity Card)など、ICAO 9303準拠のICカード全般をブラウザから直接読み取るための包括的な基盤整備を進めた。

  • 多種カード対応:
    • JPKI (日本): 署名用/利用者証明用電子証明書の読み取りとPIN検証。
    • Passport (世界標準): BAC (Basic Access Control) による真正性検証とCSCA証明書連携。
    • Drivers License (日本): 運転免許証のPIN1/PIN2認証および基本4情報の読み取りロジック(外字対応等は検証中)。
    • Residence Card (日本): 在留カードの券面事項読み取り。
    • EuId (欧州): 欧州身分証のDGデータ読み取りに対応(パスポートロジックの再利用)。
  • 技術的成果:
    • Native WebUSB Driver: TypeScriptによるCCIDドライバ実装で、専用アプリ不要のブラウザ直接通信を実現。
    • WASM Core: OpenSSL依存を排除したRust製 civ クレートをWASM化し、ポータビリティを確保。

残課題とボトルネック

  • 顔写真デコード: 券面画像データ(JPEG2000等)のデコード処理において、一部環境で正常に復元できない不具合が残っている。
  • 検証環境の制約: 開発チームの手元にある物理カードの種類に限りがあり、特に欧州身分証や特定在留カードの実機検証がボトルネックとなっている。シミュレータ環境の整備を検討中である。

4. セキュリティインシデント報告 (Severity: High)

4.1. インシデント概要

  • 発生日時: 2025年末(コミット時刻)/ 2026-01-01(発覚・対処)
  • 事象: 公開Gitリポジトリへのコミットに含まれる設定ファイル (functions/src/config.ts) に、Firebaseの管理者用APIトークンおよびService Account Key がハードコードされた状態でプッシュされた。
  • 原因: Red Teamからの指摘(機能不全の修正)に対する年末の突貫工事により、.gitignore 設定確認が不十分なままコミットされたため。年始のコードレビューにて発覚し、直ちに止血処置を行った。

4.2. 対応措置

  1. 即時無効化: 該当するGoogle Cloud Project (GCP) のサービスアカウントキーを削除・無効化。
  2. 履歴削除: git filter-repo (BFG Repo-Cleaner相当) を用いて、当該ファイルを含む過去の全コミット履歴から機密情報を抹消。
  3. キー・ローテーション: 新しいAPIキーを発行し、環境変数経由でのみ参照するようコードを修正。
  4. 再発防止:
    • .gitignore の厳格化(secret/, keys/, *.key, config.ts 等の除外)。
    • プレコミットフック等による秘密鍵検知スキャンの導入検討(今後の課題)。

4.3. 影響範囲

  • 当該キーの有効期間中に不正アクセスが行われた痕跡は確認されていない(GCP監査ログにて確認済)。
  • プロジェクトは「模擬演習(Simulation)」フェーズであり、実在の個人情報は保持していないため、情報漏洩の実害はない。

5. 今後のロードマップ (修正版)

前回の委員会報告(Utility First戦略)に基づき、以下の優先順位で開発を進める。

  1. Folio CLI Local UX (Coming Soon)

    • サーバーサイド開発を一旦凍結し、CLIによるローカルデータ管理(SQLite)と検証ワークフローを確立する。
    • これにより、ネットワークに依存しない「真のデータ主権」を実証する。
  2. Assisted Filling (入力支援の高度化)

    • 蓄積された過去データからの「オートフィル」を実装し、"Input Intelligence" を完成させる。
  3. Web/A VP (Juminhyo) PoC

    • 「住民票の提示」 を具体的シナリオとした動作検証デモ(PoC)を早期に開発する。
    • 重要課題: 提示先(Relying Party)の情報をどう安全かつ簡便に証明書(VP)へ埋め込むか("Last Mile UX/Injection Challenge")の解を提示する。
  4. Simulation & Governance

    • 引き続き、開発と並行して模擬監査(Audit Simulation)を実施し、プロジェクトの透明性を維持する。

以上。