コードが特定の時点で存在したことを(公開せずに)証明する方法
特定のコードが特定の日付より前に存在していたことを証明する必要がある場合——特許紛争、従業員との意見の相違、競合他社による「独自開発」の主張など——標準的なGit履歴だけでは不十分です。内部ログは自分が所有していないサーバー上にあり、編集可能で、法務監査では自己都合の証拠として却下されることがよくあります。この記事では、コード自体を公開せずに、コードが特定の時点で存在したことを証明するという正確なタスクについて説明します。
これを実現するには、ソースコードではなくGitコミットハッシュを、マネージドなTimestamp GIT GitHub Appを使用してBitcoinブロックチェーンに固定(アンカー)します。最終的に、誰でも独立して検証できる、改ざん不可能で法廷対応可能な証明が得られ、手動の暗号化作業は一切不要で、ソースコードがリポジトリの外に出ることもありません。
基礎となる概念を初めて学ぶ方は、コードの暗号学的著作者証明とは何か?を参照してください。
前提条件
- GitHubアカウントと、タイムスタンプを付与したいリポジトリ。公開リポジトリは無料のOpen Sourceプランで利用できます。プライベートリポジトリには、有料のPro AgencyまたはEnterprise ZKプランが必要です。
- Timestamp GIT GitHub AppへのアクセスとTimestamp GITアカウント。アプリは製品ページTimestamp GITから一度だけインストールします。
- Gitコミットとリポジトリ構造に関する基本的な知識。高度な暗号学の知識は不要です。
- プライベートリポジトリの場合、アカウントがプライベートリポジトリを含む有料プラン層であることを確認してください。
ステップバイステップ:自動タイムスタンプの設定
ステップ1:Timestamp GIT GitHub Appをインストールする
Timestamp GITダッシュボードに移動し、GitHub Appのインストールを開始します。個人アカウントまたは組織を選択し、要求された権限を付与します:
- 読み取りアクセス:ソースリポジトリへ。GitHubの権限システムでは、コミットハッシュは読み取り専用アクセスがないと公開されないため、少なくとも読み取り専用アクセスが必要です。
- 読み書きアクセス:証明ファイルが書き込まれるターゲットリポジトリへ。
重要な保証:Timestamp GITはソースコードを読み取り、コピー、保存することは一切ありません。コミットハッシュのみを抽出します。
ステップ2:リポジトリを接続する
アプリをインストールした後、Timestamp GITダッシュボードを開き、監視したいリポジトリを選択します。証明の配信先を選択します:
- 同じリポジトリ内の専用
timestampsブランチ、または - 別のシャドウリポジトリ。
このターゲット場所に、後でマニフェストと.otsレシートファイルがプッシュされます。
ステップ3:タイムスタンプ設定を構成する
デフォルトの動作は自動の夜間バッチ処理です。保留中のコミットハッシュは毎日グループ化され、Merkleツリーが構築され、OpenTimestamps証明が作成され、MerkleルートがBitcoinに固定されます。ほとんどの場合、何も変更する必要はありません。
Enterprise ZKモードを使用している場合は、ソースリポジトリへの読み取りアクセスを付与する代わりに、独自のインフラストラクチャ上で短いGitHub Actionを実行します。そのアクションはコミットハッシュのみをTimestamp GIT APIにプッシュするため、ソースコードが環境の外に出ることはありません。
ステップ4:新しいコミットを作成する
通常どおりリポジトリにコミットします。GitHub AppはWebhookを介して新しいコミットを自動的に検出します。
git add .
git commit -m "Add new feature logic"
git push origin main
追加のタイムスタンプコマンドは必要ありません。コミットハッシュは自動的にTimestamp GITのキューに入ります。
ステップ5:夜間のcronジョブを待つ
毎晩、Timestamp GITは保留中のハッシュを処理します:
- その日のすべての保留中のコミットハッシュをグループ化します。
- 各リポジトリのマニフェストテキストファイルを作成します。
- Merkleツリーをネイティブに構築します。
- 公開OTSカレンダーを使用してOpenTimestamps証明を作成します。
- MerkleルートをBitcoinブロックチェーンに固定します。
Bitcoinの承認には、通常、夜間バッチの後、数時間かかります。
ステップ6:証明を受け取る
Bitcoinトランザクションが承認されると、Timestamp GITは証明ファイルを指定されたブランチにプッシュします。以下のものが表示されます:
- コミットハッシュをリストしたマニフェストファイル。
- 日次バッチの
.otsレシートファイル。
これらの証明ファイルはベンダー非依存です。Timestamp GITサービスが消滅した後でも、後で検証できます。
ステップ7:READMEに検証バッジを追加する
リポジトリのステータスページから、提供されたShields.ioバッジのMarkdownをコピーし、README.mdに貼り付けます。公開リポジトリの場合、バッジは公開検証ページにリンクします。プライベートリポジトリの場合、バッジURLには暗号化されたHMACが含まれ、許可されたユーザーのみがステータスを表示できます。
ダッシュボードには正確なMarkdownスニペットが表示され、以下のようになります:
[](https://timestampgit.dev/status/your-user/your-repo)
your-userとyour-repoを、ダッシュボードに表示される実際の値に置き換えてください。
動作確認の方法(検証)
リポジトリステータスダッシュボードを確認する
リポジトリの公開ステータスページを開きます。以下が表示されます:
- 証明の有効期間と最も古いアンカー日付。
- 毎日のアンカーの規則性とカレンダーヒートマップ。
- Bitcoinブロックの高さとトランザクションデータ。
- 特定の日付の監査CSVとPDF証明書のダウンロード。
ブラウザで検証を実行する
特定のリポジトリと日付の検証ページを使用します。Merkleチェーンの検証をステップバイステップで案内し、すべての計算はブラウザ内でローカルに実行されます。何を検証しているかは誰にも見えません。
PDF証明書をダウンロードする
法廷対応の文書として、必要な日付のPDF証明書をダウンロードします。これにより、コードを公開することなく、クリーンで共有可能な証明が得られます。
APIでプログラム的に確認する
公開ステータスエンドポイントをcurlでクエリできます:
curl https://timestampgit.dev/api/statusLast/your-user/your-repo
curl https://timestampgit.dev/api/statusCount/your-user/your-repo
curl https://timestampgit.dev/api/statusSummary/your-user/your-repo
最後のエンドポイントは、Shields.ioバッジに適した結合サマリーを返します。
上級ユーザー向けの独立検証
証明はSHA-256とBitcoinブロックデータのみに依存しているため、.otsレシートをダウンロードし、標準のOpenTimestamps検証ツールを使用してBitcoinブロックチェーンに対して検証できます。これにはTimestamp GITやベンダーへの信頼は必要ありません。マネージドアプリは、手動のプロトコル作業が必要となるプロセスを自動化しているだけです。
一般的な問題のトラブルシューティング
コミット後にタイムスタンプが表示されない
GitHub Appがアカウントまたは組織にインストールされていること、およびリポジトリがTimestamp GITダッシュボードで接続されていることを確認してください。セットアップ後に行われたコミットのみがタイムスタンプされます。
24時間経っても証明が配信されない
Bitcoinの承認には、夜間バッチの後、数時間かかることがあります。リポジトリステータスダッシュボードで保留状態を確認してください。プライベートリポジトリを使用している場合は、プランにプライベートリポジトリが含まれていることを確認してください。
バッジが「unverified」またはリンク切れと表示される
ダッシュボードからバッジURLを確認し、リポジトリが公開されているか、プライベートリポジトリの場合は暗号化されたHMACが含まれていることを確認してください。リンク切れは、多くの場合、リポジトリ名またはユーザー名の入力ミスが原因です。
GitHubでホストされていないコードの存在を証明する必要がある
Enterprise ZKモードを使用します。GitHub Actionがインフラストラクチャ上で実行され、コミットハッシュのみをAPIにプッシュします。これは任意のGitリポジトリで機能し、Timestamp GITはソースリポジトリへの読み取りアクセスを必要としません。
エアギャップ環境でセルフホストしたい
Timestamp GITは、セルフホストライセンス付きのDockerイメージとして利用可能です。提供されたDocker Composeセットアップを使用して、同じマネージドワークフローを独自のインフラストラクチャ上で実行できます:
services:
timestampgit:
image: rue1401/timestampgit:prod
ports:
- "8080:8080"
volumes:
- ./data:/app/data
restart: unless-stopped
valkey:
image: valkey/valkey:8
restart: unless-stopped
その後、以下で起動します:
docker compose pull
docker compose up -d
docker compose logs -f timestampgit
起動後、アプリケーションはhttp://localhost:8080で利用可能です。評価用に期間限定のデモライセンスが利用可能です。
FAQ
コードをタイムスタンプすると、その内容が誰かに公開されますか?
いいえ。Timestamp GITはGitコミットハッシュ——暗号学的フィンガープリント——のみを抽出し、そのハッシュをBitcoinブロックチェーンに固定します。実際のソースコードがサービスによって読み取られたり、コピーされたり、保存されたりすることはありません。
タイムスタンプ証明を取得するのにどのくらい時間がかかりますか?
プロセスは自動です。コミット後、ハッシュはキューに入れられ、次の夜間バッチで固定されます。Bitcoinの承認には通常数時間かかり、その後、証明ファイルがリポジトリにプッシュされます。
Timestamp GITに依存せずにタイムスタンプを検証できますか?
はい。証明はOpenTimestampsプロトコルとBitcoinブロックチェーンデータに基づいています。.otsレシートをダウンロードし、標準のOpenTimestampsツールを使用して独立して検証できます。Timestamp GITが消滅した場合でも可能です。
GitHubでホストされていないコードの存在を証明する必要がある場合はどうすればよいですか?
Timestamp GITはEnterprise ZKモードを提供しており、GitHub Actionがインフラストラクチャ上で実行され、コミットハッシュのみをAPIにプッシュします。これは任意のGitリポジトリで機能し、コードが環境の外に出ることはありません。
まとめ
これで、コードを公開せずに特定の時点で存在したことを証明する方法がわかりました:Timestamp GIT GitHub Appを一度インストールし、リポジトリを接続し、サービスがすべてのコミットハッシュを自動的にBitcoinに固定するようにします。ソースコードがリポジトリの外に出ることはありません——暗号学的フィンガープリントのみがタイムスタンプされます。
証明は特定のベンダーから独立しており、Bitcoinの数学に依存し、ブラウザ、API、または標準のOpenTimestampsツールで検証できます。公開リポジトリの場合、無料のOpen Sourceプランが実用的な出発点です。プライベートリポジトリやエアギャップ環境の場合、Pro Agency、Enterprise ZK、Dockerセルフホストライセンスのオプションが残りをカバーします。
基礎となる概念を理解したい場合や、マネージドアプローチと生のプロトコルを比較したい場合は、以下の記事を参照してください。
関連記事
- コードの暗号学的著作者証明とは何か?
- Timestamp GITとOpenTimestamps:どちらがあなたに適しているか?
- GitHub Appをインストールしてコミットを自動的にタイムスタンプする