コミット署名の検証について
コミットとタグにローカルで署名して、行った変更の根拠を他のユーザに信頼してもらうことができます。 コミットまたはタグに暗号で検証可能な GPG、SSH、または S/MIME 署名がある場合、GitHub はコミットまたはタグに "Verified" とマークします。
![リポジトリのコミット リスト内のコミットのスクリーンショット。 [検証済み] がオレンジ色の枠線で強調表示されています。](/assets/cb-17614/images/help/commits/verified-commit.png)
コミットまたはタグに検証できない署名が含まれている場合、GitHub はそのコミットまたはタグを "Unverified" とマークします。
ほとんどの個々のユーザーにとって、コミットの署名には GPG または SSH が最適です。 通常、S/MIME 署名は、大規模な組織のコンテキストで必要です。 SSH 署名は最も簡単に生成できます。 既存の認証キーを GitHub にアップロードして、署名キーとして使用することもできます。 GPG 署名キーの生成は、SSH キーを生成するよりも複雑ですが、GPG には SSH にはない機能があります。 GPG キーは、使用されなくなったときに有効期限が切れるか、取り消すことができます。 GPG 署名には、期限切れまたは失効に関する情報が含まれる場合があります。
永続的なコミット署名の検証
署名 (GPG、SSH、S/MIME) の選択に関係なく、検証の済んだコミット署名は、そのリポジトリのネットワーク内で検証済みのままになります。 「リポジトリ間の接続を理解する」を参照してください。
GitHub へのプッシュ時にコミット署名が検証されると、検証レコードがコミットと共に格納されます。 時間が経過して、署名キーのローテーションや取り消し、またはコントリビューターの離職が発生したとしても、署名が検証済み状態を維持するよう、このレコードは編集できず、いつまでも存在します。
検証レコードには、検証が完了したときをマークするタイムスタンプが含まれます。 この永続的なレコードにより、一貫した検証済み状態が保証され、リポジトリ内のコントリビューションの安定した履歴が提供されます。 このタイムスタンプを見るには、GitHub で "Verified" バッジをポイントするか、verified_at フィールドを含む REST API を使ってコミットにアクセスします。 「コミット用の REST API エンドポイント」を参照してください。
永続的コミット署名の検証は、GitHub にプッシュされる新しいコミットに適用されます。 この機能より前から存在するコミットについては、GitHub で次にコミットの署名が検証されるときに永続的なレコードが作成され、リポジトリの履歴全体での検証済み状態の安定と信頼が維持されます。
永続的なコミット署名の検証を無効にする方法については、「永続的コミット検証の無効化」を参照してください。
取り消しと期限切れの後もレコードが残っている
永続的コミット署名の検証には、検証の時点でのコミットの検証済み状態が反映されます。 つまり、後で署名キーが取り消されたり、期限切れになったり、変更されたりした場合、以前に検証されたコミットは、最初の検証中に作成されたレコードに基づいて、検証済みの状態を維持します。 GitHub では、以前に署名されたコミットの再検証や、キーの状態の変化に応じた検証状態の遡及的調整は行われません。 Organization では、セキュリティ ポリシーに合わせてキーの状態を直接管理することが必要になる場合があり、キーのローテーションや取り消しが頻繁に計画されている場合は特にそうです。
検証レコードのスコープはそのリポジトリ ネットワークです
検証レコードはリポジトリ ネットワーク全体で永続的です。つまり、同じコミットが同じリポジトリまたはそのフォークに再度プッシュされる場合は、既存の検証レコードが再利用されます。 これにより、GitHub は、ネットワーク内でそのコミットが発生するたびにそれを再検証する必要はなく、関連するリポジトリ間で一貫した検証済み状態を維持できます。 この永続化により、リポジトリ ネットワーク内のコミットのすべてのインスタンスにおいて、コミットの信ぴょう性の一貫した信頼できる認識が促進されます。
リベースとマージの署名検証
pull request で Rebase と Merge オプションを使用する場合は、ヘッド ブランチのコミットがコミット署名の検証なしでベース ブランチに追加されることに注意することが重要です。 このオプションを使用すると、元のコミットのデータとコンテンツを使用して、GitHub によって変更されたコミットが作成されます。 つまり、GitHub は、このコミットを本当に作成していないため、汎用システム ユーザーとして署名することはできません。 GitHub では、コミッターの秘密署名キーにアクセスできないため、ユーザーの代わりにコミットに署名できません。
これを回避するには、ローカルでリベースとマージを行い、変更を pull request のベース ブランチにプッシュします。
詳しくは、「GitHubのマージ メソッドについて」をご覧ください。
リポジトリ管理者は、ブランチでコミット署名を必須として、署名および検証されていないすべてのコミットをブロックできます。 詳しくは、「保護されたブランチについて」をご覧ください。
GitHub 上の署名されたコミットあるいはタグの検証ステータスをチェックして、コミットの署名が検証されない理由を表示することができます。 詳しくは、「コミットおよびタグの署名の検証ステータスを確認する」をご覧ください。
サイト管理者が Web コミット署名を有効にしている場合、GitHub は GPG を自動的に使用して、Web インターフェイスで行ったコミットに署名します。 GitHub によって署名されたコミットは、確認済みの状態になります。
https://HOSTNAME/web-flow.gpg で入手可能な公開キーを使用して、署名をローカルで確認できます。 詳しくは、「Web コミット署名を構成する」をご覧ください。
GPG コミット署名の検証
自分で生成した GPG キーで、GPG を使ってコミットに署名できます。
GitHub では、OpenPGP ライブラリを使用することで、ローカルで署名されたコミットとタグが、お使いの GitHub Enterprise Server インスタンス でアカウントに追加した公開キーに対して暗号化で検証可能であることを確認します。
GPG を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください。
-
[既存の GPG キーがあるかチェックする](/authentication/managing-commit-signature-verification/checking-for-existing-gpg-keys) -
[新しい GPG キーを生成する](/authentication/managing-commit-signature-verification/generating-a-new-gpg-key) -
[GITHUB アカウントに GPG キーを追加します](/authentication/managing-commit-signature-verification/adding-a-gpg-key-to-your-github-account) -
[Git へ署名キーを伝える](/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) -
[コミットに署名する](/authentication/managing-commit-signature-verification/signing-commits) -
[タグに署名する](/authentication/managing-commit-signature-verification/signing-tags)
SSH コミット署名の検証
SSH を使うと、自分で生成した SSH キーを使ってコミットに署名できます。 詳細については、Gitのリファレンスドキュメントを参照してください。 GitHub で認証するために SSH キーを既に使用している場合は、署名キーとして使用するために同じキーをもう一度アップロードすることもできます。 アカウントに追加できる署名キーの数に制限はありません。
GitHub では、open source Ruby ライブラリである ssh_data を使用して、お使いの GitHub Enterprise Server インスタンス でアカウントに追加した公開キーに対して、ローカル署名されたコミットとタグが暗号で検証可能であることを確認します。
メモ
SSH 署名の検証は、Git 2.34 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。
SSH を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください。
-
[既存の SSH キーを確認する](/authentication/connecting-to-github-with-ssh/checking-for-existing-ssh-keys) -
[新しい SSH キーを生成する](/authentication/connecting-to-github-with-ssh/generating-a-new-ssh-key-and-adding-it-to-the-ssh-agent) -
[GITHUB アカウントに SSH 署名キーを追加します](/authentication/connecting-to-github-with-ssh/adding-a-new-ssh-key-to-your-github-account) -
[Git へ署名キーを伝える](/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) -
[コミットに署名する](/authentication/managing-commit-signature-verification/signing-commits) -
[タグに署名する](/authentication/managing-commit-signature-verification/signing-tags)
S/MIME コミット署名の検証
S/MIME を使い、自分の Organization で発行した X.509 キーを用いてコミットに署名できます。
GitHub では、Mozilla ブラウザーで使われているのと同じ信頼ストアである Debian ca-certificates パッケージを使って、ローカル署名されたコミットとタグが信頼されたルート証明書の公開キーに対して暗号化で検証可能であることを確認します。
メモ
S/MIME 署名の検証は、Git 2.19 以降で利用できます。 git の最新バージョンを入手するには、Git の Web サイトを参照してください。
S/MIME を使ってコミットに署名し、それらのコミットを GitHub 上で検証済みにするには、以下の手順に従ってください。
-
[Git へ署名キーを伝える](/authentication/managing-commit-signature-verification/telling-git-about-your-signing-key) -
[コミットに署名する](/authentication/managing-commit-signature-verification/signing-commits) -
[タグに署名する](/authentication/managing-commit-signature-verification/signing-tags)
公開キーを GitHub にアップロードする必要はありません。
参考資料
-
[AUTOTITLE](/authentication/managing-commit-signature-verification/signing-commits) -
[AUTOTITLE](/authentication/managing-commit-signature-verification/signing-tags) -
[AUTOTITLE](/authentication/troubleshooting-commit-signature-verification)