Skip to main content

コミット署名の検証について

GPG、SSH、または S/MIME を使用すると、タグに署名し、ローカルでコミットできます。 これらのタグやコミットは GitHub で検証済みとしてマークされているため、他のユーザーはその変更が信頼できるソースからのものであると確信できます。

コミット署名の検証について

コミットとタグにローカルで署名して、行った変更の根拠を他のユーザに信頼してもらうことができます。 コミットまたはタグに暗号で検証可能な GPG、SSH、または S/MIME 署名がある場合、GitHub はコミットまたはタグに [検証済み] または [部分的に検証済み] のマークを付けます。

リポジトリのコミット リスト内のコミットのスクリーンショット。 [検証済み] がオレンジ色の枠線で強調表示されています。

ほとんどの個々のユーザーにとって、署名コミットには GPG または SSH が最適です。 通常、S/MIME 署名は、大規模な組織のコンテキストで必要です。 SSH 署名は最も簡単に生成できます。 既存の認証キーを GitHub にアップロードして、署名キーとして使用することもできます。 GPG 署名キーの生成は、SSH キーを生成するよりも複雑ですが、GPG には SSH にはない機能があります。 GPG キーは、使用されなくなったときに有効期限が切れるか、取り消すことができます。 GitHub には、キーがセキュリティ侵害としてマークされていない限り、[検証済み] などのキーで署名されたコミットが表示されます。 SSH キーにはこの機能はありません。

コミットとタグには、警戒モードを有効にしているかどうかによって、次の検証ステータスが含まれます。 デフォルト設定では、警戒モードは有効になっていません。 警戒モードを有効にする方法については、「すべてのコミットの検証ステータスを表示する」を参照してください。

コミットへの署名は、コミットのサインオフとは異なります。 コミットのサインオフについて詳しくは、「リポジトリのコミット サインオフ ポリシーの管理」を参照してください。

デフォルトのステータス

状態説明
Verifiedコミットが署名され、署名が正常に検証されました。
Unverifiedコミットは署名されていますが、署名を検証できませんでした。
No verification statusコミットが署名されていません。

リベースとマージの署名の検証

pull request で Rebase と Merge オプションを使用する場合は、ヘッド ブランチのコミットがコミット署名の検証なしでベース ブランチに追加されることに注意することが重要です。 このオプションを使用すると、元のコミットのデータとコンテンツを使用して、GitHub によって変更されたコミットが作成されます。 つまり、GitHub は、このコミットを本当に作成していないため、汎用システム ユーザーとして署名することはできません。 GitHub では、コミッターの秘密署名キーにアクセスできないため、ユーザーの代わりにコミットに署名できません。

これを回避するには、ローカルでリベースとマージを行い、変更を pull request のベース ブランチにプッシュします。

詳しくは、「GitHub上のマージ方法について」を参照してください。

警戒モードが有効になっているステータス

状態説明
Verifiedコミットは署名され、署名の検証も成功しており、コミッターは警戒モードを有効化した唯一の作者。
Partially verifiedコミットは署名され、署名の検証も成功しているが、コミットには a) コミッターではなく b) 警戒モードを有効化した 作者がいる。 この場合、コミットの署名は作者の合意を保証しないので、コミットは部分的にのみ検証されています。
Unverified次のうち当てはまるものはどれですか?
- コミットは署名されていますが、署名を確認できませんでした。
- コミットが署名されておらず、コミッターが警戒モードを有効にしています。
- コミットが署名されておらず、作成者が警戒モードを有効にしています。

リポジトリ管理者は、ブランチでコミット署名を必須として、署名および検証されていないすべてのコミットをブロックできます。 詳しくは、「保護されたブランチについて」を参照してください。

GitHub上の署名されたコミットあるいはタグの検証ステータスをチェックして、コミットの署名が検証されない理由を見ることができます。 詳しくは、「コミットおよびタグの署名の検証ステータスを確認する」を参照してください。

GitHub は GPG を自動的に使用して、Web インターフェイスで行ったコミットに署名します。 GitHub によって署名されたコミットは、確認済みの状態になります。 https://github.com/web-flow.gpg で入手可能な公開キーを使用して、署名をローカルで確認できます。

オプションとして、GitHub Codespaces で行ったコミットを GitHub GPG で署名させることもできます。 codespace で GPG 検証を有効にする方法について詳しくは、「GitHub Codespaces の GPG 検証を管理する」を参照してください。

GPG コミット署名の検証

自分で生成した GPG キーで、GPG を使ってコミットに署名できます。

GitHub では、OpenPGP ライブラリを使用することで、ローカルで署名されたコミットとタグが、GitHub.com でアカウントに追加した公開鍵に対して暗号化で検証可能であることを確認します。

GPG を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください:

  1. 既存の GPG キーがあるかチェックする
  2. 新しい GPG キーを生成する
  3. GitHub アカウントに GPG キーを追加する
  4. Git へ署名キーを伝える
  5. コミットに署名する
  6. タグに署名する

SSH コミット署名の検証

SSH を使うと、自分で生成した SSH キーを使ってコミットに署名できます。 詳細については、user.Signingkey に関する Git リファレンス ドキュメントを参照してください。 GitHub で認証するために SSH キーを既に使用している場合は、署名キーとして使用するために同じキーをもう一度アップロードすることもできます。 アカウントに追加できる署名キーの数に制限はありません。

GitHub では、オープンソース Ruby ライブラリの ssh_data を使用することで、ローカルで署名されたコミットとタグが、GitHub.com でアカウントに追加した公開鍵に対して暗号化で検証可能であることを確認します。

注: SSH 署名の検証は、Git 2.34 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。

SSH を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください:

  1. 既存の SSH キーを確認する
  2. 新しい SSH キーを生成する
  3. GitHub アカウントに SSH 署名キーを追加する
  4. Git へ署名キーを伝える
  5. コミットに署名する
  6. タグに署名する

S/MIME コミット署名の検証

S/MIME を使い、自分の Organization で発行した X.509 キーを用いてコミットに署名できます。

GitHub では、Mozilla ブラウザーで使用されているのと同じ信頼ストアである Debian ca-certificates パッケージを使用して、ローカル署名されたコミットとタグが信頼されたルート証明書の公開キーに対して暗号化で検証可能であることを確認します。

注: S/MIME 署名の検証は、Git 2.19 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。

S/MIME を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください:

  1. Git へ署名キーを伝える
  2. コミットに署名する
  3. タグに署名する

公開鍵を GitHubにアップロードする必要はありません。

ボットの署名検証

コミットの署名が必要な Organization および GitHub Apps は、コミットの署名にボットを利用できます。 コミットまたはタグが暗号的に検証可能なボット署名を持っている場合、GitHub はそのコミットまたはタグを検証済みとしてマークします。

ボットの署名検証は、要求が検証され GitHub App またはボットとして認証されており、カスタム作者情報、カスタムコミッター情報、およびコミットAPI などのカスタム署名情報が含まれていない場合にのみ機能します。

参考資料