公開CSVに「署名」をつけるだけでデータ信頼性が劇的に変わる話

IT政策の提案
公開CSVに「署名」をつけるだけでデータ信頼性が劇的に変わる話

どうも〜おかむーです!今日はちょっとクリプト寄りでエンジニアっぽい話をしますよ〜

  • 公開CSVは形式の話ばかり注目されがちだが、改ざん/破損の検知は軽視されている
  • 小さな対策(チェックサムと署名)を運用に組み込めば、二次利用者のコストが劇的に下がる
  • 実装パターンとCI連携、運用ルールまで実例付きで示すよ!

結論

政府・自治体が公開するCSVやデータセットには「機械可読性」だけでなく「データの整合性保証(検証可能な署名)」を標準化で求めるべき。要するに、データの正しさを“鍵”で担保する仕組みを作れば、ダッシュボードや分析パイプラインの信頼度が一気に上がりますよね。

レポート本文

現状観察:これ見てくださいよ

公開データは増えている。たとえば内閣官房・デジタル行財政改革会議が機械可読性ルールを議論している(https://www.cas.go.jp/…、資料も公開されてます)し、各省のCSV(例:NOTICEのstatus_notice.csv https://notice.go.jp/docs/status_notice.csv、総務省の全国CSV https://www.soumu.go.jp/main_content/000323625.csv、環境省や厚労省のCSV)もダウンロード可能。

ただ、これらのCSV、ほとんどが「ただのファイル」として公開されていて、ダウンロード時にそれが最新で改ざんされていないかを自動で検証する仕組みが無いことが多い。要するに「フォーマットはあるけど、誰が・いつ・本当に出したのか」を機械が検証できないんです。

なぜ署名(とチェックサム)が必要か

  • ネットワーク経由での破損、CDNキャッシュの不一致、ミドルボックスでの改変を検知できない
  • 二次利用者はデータ取り込み後に手作業で確認することになり、コストが増える
  • 重要政策(医療施設リスト、支援金リスト等)だと不整合が社会的混乱を招く可能性がある

エンジニア的に言うと、チェックサムはハッシュでの整合性検査、署名はそのハッシュに対する公開鍵暗号での認証です。要するに「内容が変わっていない」と「出所が正しい」を両方担保するということです。

実装パターン(ライト&フル)

  • ライト:CSVと同じ場所に manifest.json を置く。中身は最低限これだけ
{

"name": "status_notice.csv",

"url": "https://notice.go.jp/docs/status_notice.csv",

"sha256": "<hex>",

"signed_at": "2026-04-25T12:00:00Z",

"signer": "[email protected]",

"signature_url": "https://notice.go.jp/docs/status_notice.csv.sig"

}

  • フル:manifest + detached signature (.sig PGP/COSE) + timestamping(TSP/RTT)+公開鍵の配布(well-known URL / DNS TXT / Web Key Directory)

コード例:Pythonでの検証(概念)

import requests, hashlib, gnupg

ダウンロード

r = requests.get(url)

data = r.content

ハッシュ検証

h = hashlib.sha256(data).hexdigest()

assert h == manifest['sha256']

GPG署名検証

gpg = gnupg.GPG()

公開鍵は事前に取得してインポートしておく

verify = gpg.verify_data('status_notice.csv.sig', data)

assert verify.valid

運用ワークフロー(現場向け)

  • CSV生成パイプライン(RDB→CSV)で毎回SHA256を算出
  • 署名鍵(運用用の非公開キー)でmanifestを署名、署名ファイルを公開
  • Git/GitHub ActionsなどCIで署名処理を自動化し、履歴(コミット)を残す
  • 公開鍵は自治体サイトの well-known と複数の公開チャネル(PKI/DNS)で提供
  • 利用者向けに検証ライブラリ(軽量)を配布して受け取り側の導入障壁を下げる
  • ポリシー面の提案

    • 機械可読性ルールに「署名とmanifest必須」を追加。既に検討されている機械可読性(digital.go.jp の資料)に整合性要件を加えるだけで現場の負担は少ないはず
    • 重要データ(医療・支援金・施設リスト等)は必須、その他は推奨から段階的適用
    • 署名鍵管理はKMS/HSMで。鍵ローテーションと公開鍵のチェーンを定義

    コスト感と導入メリット

    • 実装コストは小さめ(既存CIに署名ステップを1つ追加するだけ)
    • 受け手のコストが大幅に減る(検証スクリプトで自動スキップ可能)
    • 信頼性が上がれば民間データ製品や自治体間連携の採用ハードルが下がる

    まとめ

    CSVをただ公開する時代は終わりつつあります。フォーマットの標準化に次いで必要なのは「そのCSVが本物かどうかを機械が即判定できること」。チェックサム+署名+manifestという小さな投資で、政府データの二次利用エコシステムがぐっと安定するんですよね。

    おかむーから一言

    データの信頼はケーブル一本で生まれるんじゃなくて、鍵一本から始まります!小さな暗号の約束が、市民とサービスの信頼を作るんです。俺たちでその約束をコードに落としましょう!

    シェアする