# Git

Gitはバージョン管理システムのひとつで、本稿の管理にも利用されています。変更内容に電子署名をすることで、管理されているプログラムコードなどの利用者が変更内容の検証をすることができるようになります。

GnuPGによるOpenPGP鍵対の生成が完了している環境で、commitコマンドに-Sオプションを追加することで電子署名できます。

$ git commit -S
[master fd70ab6] Start writing about signing on Git
 1 file changed, 7 insertions(+)
 create mode 100644 docs/misc/README.md
gpg2の利用

Ubuntu 16.04など、OSによっては、最近のGnuPGがgpg2コマンドとして提供されている場合があります。下記のコマンドで、Gitがgpgコマンドの代わりにgpg2コマンドを利用するようになります。

$ git config --global gpg.program gpg2

常に電子署名するよう設定することもできます。

$ git config --global commit.gpgsign true

公開鍵がインポートされている環境で、電子署名を検証することができます。

$ git verify-commit fd70ab6
gpg: Signature made Fri 26 Jun 2020 08:08:24 AM HST
gpg:                using RSA key F60960D80B224382CA8D831CB56C20316D6E8279
gpg:                issuer "zundan@gmail.com"
gpg: Good signature from "zunda <zundan@gmail.com>" [ultimate]

GitHubにOpenPGP公開鍵をアップロードすることで、GitHub上で電子署名が検証されるようになります。公開鍵はASCII Armorにしてコピーする必要があります。

$ gpg --export --armor F60960D80B224382CA8D831CB56C20316D6E8279
-----BEGIN PGP PUBLIC KEY BLOCK-----

mQGNBF7y5CEBDADCBGI+RhNbXWjHOhIwBX9k1kxr6t/nTcec97vMNMxLYn3qxaWc
  (中略)
z53RAXLlDXUjh5wQPrsASA==
=ELpI
-----END PGP PUBLIC KEY BLOCK-----

GitHub上で電子署名の検証に成功すると「Verified」というマークが表示されます。

GitHubが電子署名の検証に成功した様子

GitHubに登録されているOpenPGP公開鍵は、GitHubのREST API v3 (https://api.github.com)のGET /users/:username/gpg_keysから取得することができます。また、https://github.com/:username.gpgから取得することもできるようです。後者では、1つのASCII Armorに登録されているすべての公開鍵が同梱されるようです。