この記事の内容は2023年6月13日(火)の時点で最新
GPG鍵(GnuPG)の設定
GnuPG(GNU Privacy Guard)をインストールする。
環境
windows10
git version 2.40.0.windows.1
「gpg –list-keys」コマンドを初めて実行した際には、GnuPGが新しいキーペアを作成し、鍵リングに鍵のエントリを作成する。そのため、1回目の実行では鍵リングが作成され、その情報が表示される。
2回目以降の実行では、GnuPGは既に鍵リングが存在することを認識しているため、直接鍵の情報を表示する。表示される情報には、鍵の種類、作成日時、鍵の識別子、および関連するユーザー情報が含まれる。
したがって、初回の実行時には鍵リングが作成され、2回目以降の実行では作成された鍵の情報が表示されるという動作になる。このような挙動は、GnuPGのデフォルトの動作である。
公開鍵のキーID:5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17
$ gpg --list-keys
gpg: directory '/c/Users/〇〇〇/.gnupg' created
gpg: keybox '/c/Users/〇〇〇/.gnupg/pubring.kbx' created
gpg: /c/Users/〇〇〇/.gnupg/trustdb.gpg: trustdb created
$ gpg --list-keys
gpg: checking the trustdb
gpg: marginals needed: 3 completes needed: 1 trust model: pgp
gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u
gpg: next trustdb check due at 2025-06-11
/c/Users/〇〇〇/.gnupg/pubring.kbx
---------------------------------
pub rsa3072 2023-06-12 [SC] [expires: 2025-06-11]
5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17
uid [ultimate] △△△
sub rsa3072 2023-06-12 [E] [expires: 2025-06-11]
$ gpg --list-keys
/c/Users/〇〇〇/.gnupg/pubring.kbx
---------------------------------
pub rsa3072 2023-06-12 [SC] [expires: 2025-06-11]
5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17
uid [ultimate] △△△
sub rsa3072 2023-06-12 [E] [expires: 2025-06-11]
$ gpg --list-keys
/c/Users/〇〇〇/.gnupg/pubring.kbx
---------------------------------
pub rsa3072 2023-06-12 [SC] [expires: 2025-06-11]
5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17
uid [ultimate] △△△
sub rsa3072 2023-06-12 [E] [expires: 2025-06-11]
GPG鍵の生成
$ gpg --gen-key
本名: Taro
電子メール・アドレス: 〇△△@gmail.com
次のユーザIDを選択しました:
"Taro <〇△△@gmail.com>"
名前(N)、電子メール(E)の変更、またはOK(O)か終了(Q)? O
この鍵にパスフレーズ(パスワード)の設定
→〇△△
※このパスフレーズは忘れないこと
公開鍵を出力する。何度このコマンドを打っても出力する公開鍵pubkey.keysは同じ中身になる。
$ gpg --armor --export 5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17 > pubkey.keys
githubのsettingsを選ぶ
[SSH and GPG keys] > [New GPG key]を選んで、公開鍵pubkey.keysの中身をコピペしてGPG keysを登録する。
秘密鍵を出力する。
–armorは「ASCII armor」を意味し、秘密鍵をASCIIテキスト形式でエクスポートするための指定である。
このコマンドを打っても出力する度に秘密鍵private.keysは同じ中身にならない。
「秘密鍵はランダムなデータで保護される。毎回異なる出力が生成されるのは、エクスポートされた秘密鍵のデータがランダム性を持っているためである」
という理由らしい。しかし、この秘密鍵はランダムなデータで保護されるという意味がよく分からない。秘密鍵はランダムなデータで保護されるという話は初めて聞いたわ。
$ gpg --export-secret-keys --armor > private.keys
違うパソコンで同じ環境にするには秘密鍵をimportすること。
$ gpg --import private.keys
Gitに対して、指定した公開鍵を使用してコミットに署名するためのキーID(公開鍵のキー)を設定する。
$ git config --global user.signingkey 5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17
設定されたコミット署名に使用されるキーIDを確認する。
$ git config --global user.signingkey
5DC1DAA0EFF4A8D9D72364BE3B3214054324EF17
コミットに署名するには-Sオプションを使用する。
これはverifedマークは付くのか?不明やわ。
$ git commit -S -m <your commit message>
tagに署名するには-sオプションを使用する。
この署名ありでtagを付けたらverifiedマークつかなかったけど、何故だ?署名なしでのtag付けでverifiedマークが付いたわ。
$ git tag -s v1.0 -m '1st version'
$ git push --tags
署名されたtagかどうかは-vオプションを使用する。
$ git tag -v <tagname>
Git でコミット作成者を偽装する方法/署名付きコミットでの対策 – Qiita ExternalLink
GitHub の Verified マーク – Smile Engineering Blog (hateblo.jp) ExternalLink
Git – 作業内容への署名 (git-scm.com) ExternalLink