19
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

🔰【Win/Mac】Gitコミットに署名(verifiedマーク)を付けよう!✍

Last updated at Posted at 2022-06-21

Gitのコミットに署名をつけるための手順です✍🥒
※ 一番最後に動画を追加しました☘️

署名付きコミットは、ログ上にバッジが付きます。

  • Unverified - 何かが間違っていて認証に失敗したコミット
  • Verified - 本人確認に成功したコミット(あるいはブラウザからGitHub上で行われたコミット)
  • バッジなし - 署名がついていないコミット

署名付きコミットの検証について
About commit signature verification - GitHub Docs(English)

前提

  • Windows10
  • 管理者アカウント
  • Gitのユーザ設定が適切に設定されている(本記事の工程をすべて終えた後に設定してもOK)
    • git config --global user.name
    • git config --global user.email

Package managerを入れよう
ソフトウェアインストールが楽になるのであらかじめ、WindowsならChocolatey、macOSならHomebrewを入れておきましょう!👀

※ これらを利用しない場合でも、任意の方法で必要なソフトウェアをインストールできます
※ それぞれの記事のchocobrew以外の内容も見ていただけるとうれしいです☺

ログやキャプチャはWindows 10で実施したものをサンプルとして掲載しています

1. 環境を整えよう

まずはGPGがインストールされているかを確認しましょう。
シェルに、次のコマンドを入力してみます。

gpg --version

シェルとは

  • Windows:PowerShell
  • macOS:ターミナル、iTerm2など

GPGのインストール方法は?

Windows 10
choco install gpg4win -y
macOS
sudo brew install gpg

GPGをインストールしたはずなのに「gpgというコマンドを認識できない」と言われた場合は、シェルを立ち上げ直してみましょう。

2. Gitの設定を確認しよう

シェルにそれぞれ入力し、設定しているユーザ名とメールアドレスを控えておきます。
何も値が出力されない場合は設定が誤っているので、Gitのユーザ設定を見直してください。

git config user.name
git config user.email

2. 秘密鍵を発行しよう

次のコマンドを入力します。

gpg --full-generate-key

質問に答えよう

いくつか質問されるので、回答していきましょう。

設問 入力 備考
ご希望の鍵の種類を選択してください
あなたの選択は?
1 いくつか候補が出てきます。
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は?
4096 特に理由がなければ最大値に設定します。
参考:公開鍵と秘密鍵のサイズに関する考慮事項 - IBM Documentation
鍵の有効期限を指定してください。
鍵の有効期間は?
任意 無期限でいい場合は0と入力します
これで正しいですか? y やり直す場合はN
本名 冒頭で控えたuser.nameの値
電子メール・アドレス 冒頭で控えたuser.emailの値
コメント 特に入力しなくてもOK
名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O 修正するものがなければ「O(おー)」を入力します
gpg (GnuPG) 2.3.6; Copyright (C) 2021 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

ご希望の鍵の種類を選択してください:
   (1) RSA と RSA
   (2) DSA と Elgamal
   (3) DSA (署名のみ)
   (4) RSA (署名のみ)
   (9) ECC (署名と暗号化)
  (10) ECC (署名のみ)
  (14) カードに存在する鍵
あなたの選択は? 1
RSA 鍵は 1024 から 4096 ビットの長さで可能です。
鍵長は? (3072) 4096
要求された鍵長は4096ビット
鍵の有効期限を指定してください。
         0 = 鍵は無期限
      <n>  = 鍵は n 日間で期限切れ
      <n>w = 鍵は n 週間で期限切れ
      <n>m = 鍵は n か月間で期限切れ
      <n>y = 鍵は n 年間で期限切れ
鍵の有効期間は? (0)0
鍵は無期限です
これで正しいですか? (y/N) y

GnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。

本名: XXXXXXXXXXXX
電子メール・アドレス: XXXXXXXXXXXX@example.com
コメント:
次のユーザIDを選択しました:
    "XXXXXXXXXXXX <XXXXXXXXXXXX@example.com>"

名前(N)、コメント(C)、電子メール(E)の変更、またはOK(O)か終了(Q)? O

ここまで進むと、パスワードを決めるように促されます。
安全なパスワードを考えて入力してください。

以上で鍵の生成は完了です。

うまくいったら・・・

次のような出力がされると思います。

gpg: 失効証明書を 'C:\\Users\\XXXXXXXXXXXX\\AppData\\Roaming\\gnupg\\openpgp-revocs.d\\XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX.rev' に保管しました。
公開鍵と秘密鍵を作成し、署名しました。

pub   rsa4096 yyyy-mm-dd[SC]
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid                      XXXXXXXXXXXX <XXXXXXXXXXXX@gmail.com>
sub   rsa4096 yyyy-mm-dd [E]

先に進まない!?

たくさんのランダム・バイトの生成が必要です。キーボードを打つ、マウスを動かす、ディスクにアクセスするなどの他の操作を素数生成の間に行うことで、乱数生成器に十分なエントロピーを供給する機会を与えることができます。

だいたい10秒かからない程度で鍵の生成は完了しますが、このメッセージで止まる場合はエントロピープールが枯渇した状態になっています。
書かれている通り、キーボードを入力したりマウスを動かしたりして、鍵生成と関係ない別の作業をしてみてください。

3. 秘密鍵のKey IDを取得しよう

まずはKey IDを取得します。
次のコマンドを実行してください。

gpg --list-secret-keys --keyid-format LONG

すると以下のように、作った鍵の一覧が取得できます。

C:\Users\___user_name___\AppData\Roaming\gnupg\pubring.kbx
----------------------------------------------------------
sec   rsa4096/🥒🥒🥒 2022-06-21 [SC]
      XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
uid                 [  究極  ] XXXXXXXXXXXX <XXXXXXXXXXXX@gmail.com>
ssb   rsa4096/XXXXXXXXXXXXXXXX 2022-06-21 [E]

今回作った鍵の「🥒🥒🥒」の部分をコピーしてください。
この後で2回ほど使用します。

4. コミット時に使う鍵をGitくんに教えてあげよう

次のように、コピーしたKey IDを使ってGitの設定を変更します。
今回はグローバル設定を変更しますが、必要があればリポジトリごとの設定も行ってください。

git config --global user.signingkey 🥒🥒🥒

次のコマンドを入力すると設定内容が表示されます。

git config --global -e

userの項目にsigningkeyが増えていることが確認できたら成功です。
:q!と入力して終了しましょう(シェルを閉じてもOK)。

.gitconfig
[user]
        email = XXXXXXXXXXXX@example.com
        name = XXXXXXXXXXXX 
+       signingkey = 🥒🥒🥒

5. 公開鍵を発行しよう

gpg --armor --export 🥒🥒🥒

無事に公開鍵が作れると、次のようなとても長い文字列が出力されます。

-----BEGIN PGP PUBLIC KEY BLOCK-----

めちゃくちゃ長い文字列
めちゃくちゃ長い文字列
めちゃくちゃ長い文字列

-----END PGP PUBLIC KEY BLOCK-----

「-----BEGIN PGP PUBLIC KEY BLOCK-----」から「-----END PGP PUBLIC KEY BLOCK-----」まですべてコピーしてください。

6. GitHubくんに公開鍵を渡そう

なぜGitHubくんに公開鍵を渡すの?
今回、gpg --full-generate-keyで作ったものは秘密鍵gpg --armor --exportで作ったものは公開鍵と呼ばれています。

公開鍵とは接続先に渡す南京錠で、「たくさんある情報の倉庫」の戸締りに使われます(暗号化用)。
秘密鍵とは、その南京錠を開けられる唯一の鍵です(復号用)。

「私のデータが改ざんされないように、書き換える権限はこの南京錠でしっかり戸締りしてね!」と、GitHubくんと約束するために公開鍵を渡さなければなりません。

  1. GitHubにログインする
  2. SettingsページからSSH and GPG keysページを開く
  3. New GPG Keyボタンをクリックする
  4. テキストフィールド「Title」に任意の文字列を入力する(今お使いのPCの名前、たとえば「何代目Windows PC」とかでもOK)
  5. テキストフィールド「Key」にコピーした公開鍵を貼り付ける
  6. Add GPG keyボタンをクリックする

7. コミット・プッシュしてみよう

任意のリポジトリにコミットを積んでみましょう。
その際、-Sオプションをつけると証明書つきでコミットすることができます。

また、次の設定を適応すると-Sオプションなしのデフォルトで署名付きコミットにすることができます。

git config --global commit.gpgsign true

Windowsの方向け

gpg: skipped "🥒🥒🥒": No secret key

というエラーが出る場合があるため、以下のコマンドも実行しておいてください。

git config --global gpg.program "C:\Program Files (x86)\GnuPG\bin\gpg.exe"

任意のリポジトリにコミットを積んでgit pushできたら、GitHub上でコミットログを確認します。
無事、積んだコミットに「Verified」バッジがついてたら設定成功です!

おつかれさまでした!🥳🥒

おまけ:鍵の削除

誤って作ってしまった鍵や、不要になった鍵を削除する方法を紹介します。

まずは秘密鍵を削除します

削除したい秘密鍵に紐づいたメールアドレスかKey ID(🥒🥒🥒)を添えて、--delete-secret-keysを実行します。

gpg --delete-secret-key メールアドレスまたはKey ID

実行後に出てくる設問とダイアログの内容をよく見て、問題なければ削除を実施します。

PS C:\Users\___user_name___> gpg --delete-secret-key XXXXXXXXXXXXXXX@example.com
gpg (GnuPG) 2.3.6; Copyright (C) 2021 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


sec  rsa4096/XXXXXXXXXXXXXXXX 2022-06-21 XXXXXXXXXXXXXXX <XXXXXXXXXXXXXXX@example.com>

この鍵を鍵リングから削除しますか? (y/N) y
これは秘密鍵です! 本当に削除しますか? (y/N) y

続いて、公開鍵の削除です

公開鍵の削除には--delete-keyを用います。

gpg --delete-key メールアドレスまたはKey ID

問題なければ削除を実施します。

PS C:\Users\___user_name___> gpg --delete-keys XXXXXXXXXXXXXXX@example.com
gpg (GnuPG) 2.3.6; Copyright (C) 2021 g10 Code GmbH
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.


pub  rsa4096/XXXXXXXXXXXXXXXX 2022-06-21 XXXXXXXXXXXXXXX <XXXXXXXXXXXXXXX@example.com>

この鍵を鍵リングから削除しますか? (y/N) y

参考文献

▶ 動画

今回の手順を実際にやってみました🥒

19
13
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
19
13

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?