ソースコードを共有せずにコードのタイムスタンプを検証する
検証とは、暗号学的な主張が証拠へと変わる瞬間です。すべてのコミットにタイムスタンプを付与できたとしても、後日ソースコードを渡すことなくそのタイムスタンプを検証できなければ、システムは最も必要なときに機能しません。Timestamp GIT は、OpenTimestamps プロトコルを通じて Git コミットハッシュを Bitcoin ブロックチェーンに固定する、マネージド SaaS 兼 GitHub App です。証明はレシートがあれば誰でも検証できますが、レシートにコードが含まれることは決してありません。
コードのタイムスタンプに検証が重要な理由
タイムスタンプは、その検証ストーリーの分だけ価値があります。先行技術を主張するには、特定のコミットが特定の日付より前に存在したことを証明する必要があります。その証明は双方向に機能しなければなりません。裁判所や監査人にとって十分に強力であること、そして、存在を証明するためだけに営業秘密を公開しないよう、十分にプライベートであることです。
核となる考え方はゼロ知識検証です。コンテンツを明かすことなく存在を証明するのです。Git コミットハッシュは、リポジトリの状態を示す一方向のフィンガープリントです。ハッシュ自体をソースコードへ逆変換することはできません。そのハッシュが Bitcoin ブロックチェーンに固定されると、そのフィンガープリントが特定の時点で存在したという、公開された不変の記録が得られます。
この概念に馴染みがない方は、ソフトウェアコードの存在証明とは?をお読みください。この記事では検証の側面、つまり証明がどのように見えるか、どのように確認するか、結果が何を意味するかに焦点を当てます。
Timestamp GIT は基盤となるプロトコルを自動化するため、OpenTimestamps のコマンドを実行したり、Bitcoin トランザクションを手動で管理したりする必要はありません。GitHub App を一度インストールしてリポジトリを接続すれば、すべてのコミットが毎晩バッチ処理され、固定されます。検証は、バッジ、公開ステータスページ、ブラウザベースのマークルチェーンビューアを通じて行われます。
タイムスタンプ証明の外観
固定された日ごとに、リポジトリ内に主に 2 つの成果物が生成されます。
- その日のバッチに含まれるコミットハッシュを列挙したマニフェストファイル(
.txt)。 - OpenTimestamps の証明と Bitcoin 固定データを含む
.otsレシートファイル。
これらのファイルは、リポジトリ内の専用タイムスタンプブランチ、またはシャドウリポジトリにプッシュされます。これらにはコミットハッシュと固定データが含まれており、証明に必要なもの以外のソースコード、ファイル内容、リポジトリメタデータは含まれません。
.ots レシートは公開されており自己完結しているため、ファイルを持つ人なら誰でも Bitcoin ブロックチェーンに対して固定を検証できます。証明はプライベートデータベースに依存しません。Timestamp GIT は、ブラウザ内でローカルにマークルチェーンの検証を実行する Web 検証ツールを提供しているため、ソフトウェアをインストールせずに、またどのリポジトリを確認しているかを公開せずに検証できます。
検証を見える形にするために、Timestamp GIT は README 用の埋め込み可能なバッジをサポートしています。バッジはリポジトリの公開ステータスページにリンクします。プライベートリポジトリの場合、ステータス URL には暗号化された HMAC が含まれるため、許可されたユーザーだけが結果を閲覧できます。バッジ自体は、最新の固定 Bitcoin ブロック、スタンプされたコミットの総数、またはそれらを組み合わせたサマリーを表示できます。
Timestamp GIT を使用したステップバイステップの検証
検証ワークフローは、基盤となるプロトコルを学びたくない人向けに設計されています。通常の流れは以下のとおりです。
ステップ 1: Timestamp GIT GitHub App をリポジトリにインストールする
これは一度きりのセットアップです。Standard Mode では、GitHub App は監視対象のソースリポジトリから HEAD コミットハッシュを読み取ります。GitHub の権限にはコミットハッシュのみのアクセスレベルが存在しないため、ソースリポジトリへの読み取り専用アクセスと、証明ブランチが書き込まれるターゲットリポジトリへの読み書きアクセスが必要です。Enterprise ZK Mode では、短い GitHub Action がユーザーのインフラ上で実行され、コミットハッシュのみを Timestamp GIT API にプッシュします。このモードでは、ソースコードがユーザーの環境から出ることはありません。
ステップ 2: 毎晩の固定を待つ
コミットハッシュは自動的に検出されます。毎晩、ワーカーが保留中のハッシュをグループ化し、マニフェストファイルを作成し、マークルツリーを構築し、公開 OTS カレンダーを使用して OpenTimestamps 証明を作成し、マークルルートを Bitcoin ブロックチェーンに固定します。Bitcoin の承認には通常、毎晩のバッチ処理後およそ 3 時間かかるため、今日行われたコミットは通常、翌日には検証可能になります。
ステップ 3: バッジまたはステータスページを使用する
公開リポジトリの場合は、以下のステータスページにアクセスします。
https://timestampgit.dev/status/{user}/{repo}
この公開ダッシュボードには、証明の継続期間、最も古い固定日、日次の規則性、Bitcoin ブロックとトランザクションのデータ、カレンダーヒートマップが表示されます。また、監査用 CSV および PDF 証明書レポートのダウンロードにもリンクしています。
ステータス API を直接クエリすることもできます。
# 最後に固定された Bitcoin ブロック情報
curl -s https://timestampgit.dev/api/statusLast/acme/webapp
# コミット/スタンプ済みコミットの総数
curl -s https://timestampgit.dev/api/statusCount/acme/webapp
# Shields.io バッジ用の複合サマリー
curl -s https://timestampgit.dev/api/statusSummary/acme/webapp
acme/webapp は、GitHub のユーザー名または組織名とリポジトリ名に置き換えてください。プライベートリポジトリの場合、認証済みの GET /api/badgeLink/{user}/{repo} エンドポイントが、暗号化された HMAC が付加されたバッジ URL と Markdown スニペットを返します。
ステップ 4: 特定の日の検証ページを開く
詳細なステップバイステップのマークルチェーン証明については、以下を開きます。
https://timestampgit.dev/verification/{user}/{repo}/{date}
このページは、ブラウザ内でローカルに検証計算を実行します。コミットハッシュから固定されたマークルルート、そして Bitcoin ブロックに至るまでの多層マークルチェーンが表示されます。計算はローカルで行われるため、サービス側が何を検証しているかを知ることはありません。
ステップ 5: 正式な記録をダウンロードする
ステータスページまたは API から、以下をダウンロードできます。
- 全履歴の CSV 監査台帳:
GET /api/audit/{user}/{repo} - 特定の日付の PDF 証明書:
GET /api/report/{user}/{repo}/{date}
これらは法的またはコンプライアンスのアーカイブに役立ちます。PDF 証明書は人間が読める記録を提供し、CSV は完全な監査証跡を提供します。
基盤となる検証データが必要な場合は、エンドポイント GET /api/verify/{user}/{repo}/{date} がローカル検証用の完全なマークルチェーンデータを返します。
検証結果とエッジケースの解釈
検証が成功した場合に意味することは 1 つです。コミットハッシュがマークルツリーに含まれており、そのルートが特定の Bitcoin ブロックに特定の時点で固定されていたということです。そのブロックが承認されれば、タイムスタンプは不変です。Timestamp GIT を含むいかなる当事者も、それを変更したり偽造したりすることはできません。
理解しておくべきエッジケースがいくつかあります。
保留中の固定
コミット直後は、証明はまだ存在しません。Timestamp GIT はハッシュを毎晩バッチ処理して固定します。Bitcoin の承認には通常、毎晩のワーカー実行後およそ 3 時間かかります。その間、ステータスページにはバッチが保留中と表示される場合があります。トランザクションが承認されると、証明はすぐに検証可能になります。
プライベートリポジトリ
プライベートリポジトリの場合、公開ステータス URL と検証 URL は誰でもアクセスできるわけではありません。システムは、サーバーインスタンスに固有の暗号化された HMAC を付加します。完全な署名付き URL を持つ許可されたユーザーだけが、ステータスページまたは検証ページを閲覧できます。これにより、リポジトリ名とコミットメタデータは非公開のまま、指定された監査人には証明の確認を許可できます。
Timestamp GIT サーバーからの独立性
検証に Timestamp GIT がオンラインであり続けることは必須ではありません。証明は Bitcoin ブロックチェーンのデータに依存しています。.ots ファイルをダウンロードし、標準の OpenTimestamps 検証ツールを使用して Bitcoin ブロックチェーンに対して検証することもできます。Timestamp GIT のブラウザ検証ツールは、その同じチェックをマネージド化したものです。
.ots ファイルの紛失
.ots レシートとマニフェストファイルは、専用のタイムスタンプブランチまたはシャドウリポジトリに保存されています。ローカルコピーを失った場合は、ブランチから再ダウンロードしてください。証明は、サービスが元々書き込んだのと同じ Git の場所から復元可能です。
ソースを共有しない検証: ゼロ知識の利点
コードのタイムスタンプに関する最大の誤解は、存在を証明するためにサービスがコードを見る必要があるというものです。Timestamp GIT はそうではありません。
Standard Mode では、GitHub App は HEAD コミットハッシュのみを読み取ります。ソースコードを読み取ったり、コピーしたり、保存したりすることは決してありません。Enterprise ZK Mode では、GitHub Action がユーザーのインフラ上で実行され、ハッシュのみを Timestamp GIT API にプッシュします。このモードでは、Timestamp GIT がソースリポジトリへの読み取りアクセスを必要としません。そのため、Enterprise ZK Mode は機密性の高い環境に適しています。
監査人、相手方弁護士、裁判所などの第三者は、リポジトリへのアクセス権を付与することなくタイムスタンプを検証できます。.ots ファイルまたは署名付き検証 URL を提供すれば、彼らは Bitcoin ブロックチェーンに対して証明を確認できます。彼らが見るのは暗号学的な証拠であり、ソースコードではありません。
2 つのデプロイメントモードの背後にあるセットアップの詳細については、GitHub App でコードのタイムスタンプを自動化するをご覧ください。
よくある質問
何もインストールせずにタイムスタンプを検証できますか?
はい。Timestamp GIT は、.ots ファイルまたは公開ステータスページを使用できる Web ベースの検証ページを提供しています。すべての計算はブラウザ内でローカルに行われるため、ソフトウェアのインストールは不要です。
検証にはソースコードの共有が必要ですか?
いいえ。検証はコミットハッシュと .ots レシートのみを使用し、これらにはソースコードは含まれません。ゼロ知識アーキテクチャにより、コードは非公開のまま保たれます。
タイムスタンプが検証可能になるまでどのくらいかかりますか?
タイムスタンプは毎晩固定され、Bitcoin の承認には通常約 3 時間かかります。承認されると、証明はすぐに検証可能になります。
.ots レシートファイルを紛失した場合はどうなりますか?
.ots ファイルはリポジトリの専用ブランチまたはシャドウリポジトリに保存されています。そこからいつでも再ダウンロードできます。
まとめ
検証は、暗号学的タイムスタンプが有用になる場面です。確認できない証明は証明ではありません。Timestamp GIT は検証への道筋を実用的なものにします。GitHub App を一度インストールし、コミットを毎晩固定させ、その後はバッジ、ステータスページ、ローカルブラウザ検証を使用して、コードがいつ存在したかを示すことができます。ソースを共有することは一切ありません。
最初のリポジトリは Timestamp GIT でセットアップしてください。
関連記事
- ソフトウェアコードの存在証明とは?
- 特許出願前にコードの存在を証明する方法
- パテントトロールに対抗するために Git コミットにタイムスタンプを付与する
- GitHub App でコードのタイムスタンプを自動化する