GitHub App ですべての Git コミットに自動でタイムスタンプを付与する
コミットするたびに、Git はリポジトリの正確な状態を識別する一意のハッシュをすでに生成しています。そのハッシュは、その瞬間の作業内容を暗号学的に安全に示すフィンガープリントです。しかし、それ自体が証明するのは作業内容であって、その作業がいつ存在したかということではありません。そのハッシュを不変で法廷対応の証拠に変えるには、従来は手動のプロセスが必要でした。追加のコマンドを実行し、出力を監視し、レシートファイルを保存し、それをコミットごとに繰り返すという作業です。
自動化された代替手段はもっとシンプルです。GitHub App を一度インストールし、リポジトリを選択すれば、あとは寝ている間に将来のすべてのコミットが Bitcoin ブロックチェーンにアンカーされます。
Timestamp GIT は、そのアイデアを中心に構築されたマネージドサービスです。OpenTimestamps プロトコルを完全に自動化するため、CLI を操作したり、Bitcoin トランザクションを構築したり、証明ファイルを手動で管理したりする必要は一切ありません。この記事では、一度きりのセットアップ、夜間の自動化パイプライン、監視、ベストプラクティス、よくある質問について説明します。
一度きりのセットアップ: Timestamp GIT GitHub App のインストール
製品全体が単一のセットアップフローを中心に設計されています。その後は、コードをコミットすることだけがあなたの取るべき唯一のアクションです。
標準モード: GitHub App
- GitHub Marketplace から Timestamp GIT GitHub App をインストールします。
- インストール中に要求される権限を付与します。標準モードでは、GitHub の権限体系にコミットハッシュのみのスコープが存在しないため、アプリはソースリポジトリへの読み取り専用アクセスを必要とします。Timestamp GIT がソースコードを読み取ったり、コピーしたり、保存したりすることは決してありません。
- 監視したいリポジトリを選択します。パブリックリポジトリは無料の Open Source プランでサポートされ、プライベートリポジトリには有料プランが必要です。
- 証明ファイルの保存場所を選択します。同じリポジトリ内の専用の
timestampsブランチに保存するか、別のターゲットリポジトリに保存できます。別のシャドウリポジトリを使用すると、メインのソース履歴をクリーンに保てます。
インストール後、GitHub App は選択されたリポジトリを自動的に監視します。インストールする CLI ツールも、学ぶべき OpenTimestamps コマンドも、セットアップ後に実行する手動手順もありません。
Enterprise ZK モード: GitHub Action
最大限の隔離を求める組織向けに、Timestamp GIT は Enterprise ZK モードを提供しています。GitHub App にソースリポジトリへの読み取りアクセスを付与する代わりに、GitHub Action が自社のインフラストラクチャ上で実行され、コミットハッシュのみを Timestamp GIT API にプッシュします。
ワークフローの形は次のようになります。
name: timestamp-git-zk
on:
push:
jobs:
timestamp:
runs-on: ubuntu-latest
steps:
- name: Push commit hash to Timestamp GIT
env:
COMMIT_SHA: ${{ github.sha }}
REPO: ${{ github.repository }}
run: |
curl -fsS -X POST \
-H "Authorization: Bearer ${{ secrets.TIMESTAMP_GIT_HMAC }}" \
-H "Content-Type: application/json" \
-d "{\"repo\":\"$REPO\",\"hash\":\"$COMMIT_SHA\"}" \
"${{ vars.TIMESTAMP_GIT_API_URL }}"
正確な API URL、リポジトリ識別子、HMAC シークレットは、Enterprise セットアップウィザードで提供されます。重要なのは、このワークフローが行わないことです。ソースコード、ファイル、リポジトリの内容を送信することは決してありません。送信するのはコミットハッシュだけで、それ以外は何も送信しません。
このモードでは、Timestamp GIT はソースリポジトリへの読み取りアクセスを一切必要としません。
自動化パイプライン: コミットから Bitcoin アンカーまで
GitHub App または GitHub Action が配置されると、タイムスタンプ付与はバックグラウンドジョブになります。
1. コミット検出
標準モードでは、監視対象リポジトリに新しいコミットが到着すると、GitHub App が Webhook を受信します。Enterprise ZK モードでは、GitHub Action がコミットハッシュを API に直接プッシュします。
2. ハッシュキュー
検出されたコミットハッシュは、インメモリのキーバリューストアに入り、バッチ処理を待ちます。Timestamp GIT がコードをスキャンしたり、リポジトリ全体をクローンしたり、ファイルの内容を検査したりすることはありません。
3. 夜間 Cron ワーカー
毎晩、ワーカーが保留中のすべてのハッシュをリポジトリごとにグループ化します。各リポジトリについて、マニフェストファイルを作成し、Merkle ツリーをネイティブに構築し、公開 OTS カレンダーを使用して OpenTimestamps 証明を作成します。
4. Bitcoin アンカリング
日次バッチの Merkle ルートは、OpenTimestamps プロトコルを使用して Bitcoin トランザクションに埋め込まれます。そのトランザクションが Bitcoin ブロックで承認されると、アンカーは不変になります。Timestamp GIT を含むいかなる主体も、それを改変したり偽造したりすることはできません。
Bitcoin の承認には通常約 3 時間かかります。つまり、勤務時間中に行われたコミットは、通常翌朝までにアンカーされます。
5. 証明の配信
承認後、マニフェストと .ots レシートファイルが、設定した証明の保存場所(専用の timestamps ブランチまたはシャドウリポジトリ)にプッシュバックされます。証明ファイルは、コミットハッシュが Bitcoin ブロックの採掘前に存在していたことを証明する小さなテキストおよびバイナリファイルです。
パブリックリポジトリの最後にアンカーされたブロックは、シンプルな API 呼び出しで照会できます。
curl -s https://timestampgit.dev/api/statusLast/your-org/your-repo
レスポンスには、最後にアンカーされた Bitcoin ブロックの情報が含まれます。追加のエンドポイントでは、スタンプされたコミットの総数、結合されたステータスサマリー、特定の日の完全な Merkle チェーンデータが返されます。
監視と障害処理
自動化は、それが機能していることを確認できる場合にのみ有用です。
リポジトリステータスダッシュボード
接続された各リポジトリには、公開または認証付きのステータスページが用意されます。ダッシュボードには以下が表示されます。
- 証明の長期性: 最も古いアンカー日がどこまで遡るか
- 日次の規則性: コミットが一貫してバッチ処理されているかどうか
- 各アンカーの Bitcoin ブロックおよびトランザクションデータ
- アクティビティを視覚的に確認できるカレンダーヒートマップ
ステータスページは、「昨日のコミットはアンカーされたか?」という質問にすばやく答えてくれます。
監査およびコンプライアンスエクスポート
Timestamp GIT はダウンロード可能な監査記録を提供します。
# 完全な監査台帳を CSV としてダウンロード
curl -o audit.csv https://timestampgit.dev/api/audit/your-org/your-repo
特定の日付の PDF 証明書をダウンロードすることもできます。これらのエクスポートは、コンプライアンスアーカイブ、法的レビュー、取締役会レベルの IP 文書化に役立ちます。
取り逃したコミットの処理
通常の運用では、夜間バッチに間に合わなかったコミット(たとえば、Webhook の配信が遅延した場合)は、次の夜間実行で拾い上げられます。バッチ指向の設計により、一時的な障害が発生しても手動で何かを再実行する必要はありません。
プライベートリポジトリのプライバシー
プライベートリポジトリの場合、ステータスエンドポイントは暗号化された HMAC で保護されています。正しい URL 署名を持つ承認されたユーザーのみがリポジトリのステータスを表示できます。HMAC はサーバーインスタンスに固有であるため、ステータスデータが公開されることはありません。
自動タイムスタンプ付与のベストプラクティス
GitHub App が仕組みを自動化できますが、いくつかの設定上の選択によって証拠がより強固になり、管理しやすくなります。
すべてのアクティブなリポジトリを監視する
リリースブランチだけを監視しないでください。先行技術をめぐる紛争は、初期の実験的コミット、作業中のブランチ、簡単なプロトタイプに左右されることがよくあります。意味のあるコードが書かれているすべてのリポジトリで監視を有効にしましょう。
専用のシャドウリポジトリを使用する
証明ファイルでメインリポジトリが散らかるのを避けたい場合は、証明を別のリポジトリにプッシュするように Timestamp GIT を設定します。これにより、ソース履歴をクリーンに保ちながら、弁護士、監査人、コンプライアンスチームが証明レシートを探すための単一の場所を提供できます。
最大限の隔離のために Enterprise ZK モードを選択する
コードが非常に機密性が高い場合や、セキュリティポリシーでソースリポジトリへのサードパーティの読み取りアクセスが禁止されている場合は、Enterprise ZK モードを使用してください。GitHub Action アプローチでは、ソースコードが環境の外に出ることはありません。Timestamp GIT が受け取るのはコミットハッシュのみです。
監査 CSV を定期的にアーカイブする
.ots ファイルは暗号学的な証明ですが、監査 CSV は人間が読める記録です。スケジュールに従ってダウンロードし、他のコンプライアンス文書と一緒に保存しましょう。紛争が起きた場合、クリーンな時系列の台帳があれば時間を節約できます。
README に検証バッジを追加する
パブリックリポジトリでは、Timestamp GIT のステータスページにリンクする検証バッジを表示できます。リポジトリ接続ページには、バッジの URL と Markdown スニペットが用意されています。典型的なバッジは次のようになります。
[](https://timestampgit.dev/status/your-org/your-repo)
リポジトリを閲覧する人は誰でも、何もインストールせずにクリックして現在のタイムスタンプステータスを確認できます。
FAQ
GitHub App はどのようにしてコミットに自動でタイムスタンプを付与するのですか?
インストール後、GitHub App は選択されたリポジトリを監視します。毎晩、すべての新しいコミットハッシュを収集し、Merkle ツリーを作成し、OpenTimestamps を介してルートを Bitcoin ブロックチェーンにアンカーし、.ots 証明ファイルをリポジトリにプッシュバックします。手動の手順は一切必要ありません。
GitHub App はソースコードへのアクセスを必要としますか?
標準モードでは、コミットハッシュを読み取るためにソースリポジトリへの読み取り専用アクセスが必要です。これは GitHub の権限がそのスコープを要求するためです。ただし、Timestamp GIT がソースコードを読み取ったり、コピーしたり、保存したりすることは決してありません。処理するのはコミットハッシュのみです。Enterprise ZK モードでは、GitHub Action が自社のインフラストラクチャ上で実行され、コミットハッシュのみを API にプッシュするため、アプリはソースリポジトリに一切アクセスしません。
コミットが Bitcoin 上でタイムスタンプされるまでどのくらいかかりますか?
コミットは毎晩バッチ処理されます。バッチが処理された後、Bitcoin トランザクションがブロードキャストされます。Bitcoin ブロックチェーンでの承認には通常約 3 時間かかり、その後、証明ファイルがリポジトリに書き込まれます。日中に行われたコミットは、通常翌朝までにタイムスタンプ証明が利用可能になります。
Timestamp GIT に依存せずにタイムスタンプを検証できますか?
はい。証明は標準の OpenTimestamps .ots ファイルです。ダウンロードして、任意の OpenTimestamps 検証ツールを使用して Bitcoin ブロックチェーンに対してローカルで検証できます。Timestamp GIT は、便宜上、Web ベースの検証ページと PDF 証明書も提供しています。
まとめ: 設定したらあとは忘れるだけ
Timestamp GIT は、暗号学的な先行技術保護を手作業の雑務から自動のバックグラウンドプロセスに変えます。GitHub App を一度インストールし、リポジトリを選択すれば、将来のすべてのコミットが同じパイプラインを流れます。ハッシュ検出、夜間バッチ処理、Merkle ツリー構築、Bitcoin アンカリング、証明配信です。
セキュリティモデルは意図的にゼロ知識です。ソースコードが読み取られたり保存されたりすることは決してありません。標準モードはコミットハッシュのみを処理し、Enterprise ZK モードでは、API にプッシュするまでそのハッシュさえもあなたの管理下に置かれます。
価格は一般的なケースをカバーしています。Open Source はパブリックリポジトリで無料、Pro Agency はプライベートリポジトリで月額 $49、Enterprise ZK は GitHub Actions サポート付きで月額 $199 です。エアギャップ環境や自己管理環境向けには、Docker セルフホストライセンスも利用可能です。
まだ個々のコミットに対して手動でタイムスタンプを作成しているなら、より速い道は Timestamp GIT GitHub App をインストールするか、最大限の制御のために Docker セルフホストライセンスをリクエストすることです。
関連記事
- Timestamp GIT vs Manual OpenTimestamps: Which Is Better?
- How to Prove Prior Art for Software: A Developer’s Guide
- How to Protect Your Software from Patent Trolls