みなさん、GitのCommitに署名使っていますか?気軽に使えるので、みなさんも登録してみましょう。
もしも署名されたコミットの場合は以下のように緑文字でVerified
と記載されます。かっこいいですね。「なりすましをしていないよ!」ということを示しています。
ざっくりとした手順
- 全体用の鍵を作る
- 署名用の鍵を付け加える
- Githubに公開鍵を登録する
- Gitにこの鍵を使うよとconfig --globalで伝える。
- Commitする!
詳細手順
全体用の鍵の作成
macの場合は以下のアプリケーションをインストールします
https://gpgtools.org/
上記のツールをインストールした状態で以下のコマンドを入力します。
$ gpg --full-generate-key
鍵の種類は(1) RSA と RSA (デフォルト)
を選択
RSA鍵の長さは4096
を選択1 その後以下のコマンドを入力すると以下のような記述がなされているかと思います
この時点でrsaxxx/AAAAAAAA 2222-00-00 [S]
というような表記がある場合Githubに公開鍵を登録する部分まで飛ばしてしまっても問題ありません。
$ gpg --list-secret-keys --keyid-format=long
-------------------------------
pub rsa4096/550D4A48 2022-12-07 [SC]
01293870FAA94837AF26C7382007732
uid [ 究極 ] Hugami Hogeta <example@example.com>
sub rsa4096/AA49243B 2022-12-07 [E]
署名用の鍵の作成
上記の場合Pubの鍵が「550D4A48」2であるので以下のようにコマンドを入力
$ gpg --edit-key 550D4A48
gpg> addkey
sec rsa4096/550D4A48
作成: 2022-12-07 有効期限: 無期限 利用法: SC
信用: 究極 有効性: 究極
ssb rsa4096/AA49243B
作成: 2022-12-07 有効期限: 無期限 利用法: E
ssb rsa4096/5D8AC5A
作成: 2022-12-07 有効期限: 無期限 利用法: S
今度は暗号化ようの鍵を生成するため(4) RSA (署名のみ)
を選択肢鍵の長さは前回同様4096
を選択。このようにすると、利用方法:S な署名用の鍵5D8AC5A
が生成されます。
gpg >quit
変更を保存しますか? (y/N) y
gpgのインターフェースはquit
で抜けることが可能です。
公開鍵の登録
gpg --armor --export 550D4A48
-----BEGIN PGP PUBLIC KEY BLOCK-----
(中略)
-----END PGP PUBLIC KEY BLOCK-----
ここでのポイントはSではなくSCの鍵を登録することです。上記で鍵を付け加えたため、公開鍵には署名に対応する鍵も含まれています。
きちんと--BEGIN PGP
から---END PGP
までコピーしておきましょう。Macの場合は以下のコマンドで同時にクリップボードが可能になります
gpg --armor --export 550D4A48 | pbcopy
これをGithubのSettings > SSH and GPG keys
のNew GPG Key
ボタンから登録することで鍵の登録が可能になります。
Gitに登録(グローバル)
git config --global gpg.program gpg
git config --global user.signingkey 5D8AC5A
git config --global commit.gpgsign true
git config --global tag.gpgsign true
あとはコンフィグをセットするだけです。ポイントとしては、user.signkey
に登録するのは「署名鍵の」IDを使うという点です。
参考文献
https://qiita.com/kanatatsu64/items/85104644d1599c244f35
https://docs.github.com/ja/authentication/managing-commit-signature-verification/generating-a-new-gpg-key
https://gpgtools.org/
おまけ ー Discordの鍵流出対策が面白い話ー
GithubのPublicリポジトリにDiscordのトークンを一瞬流出させてしまったのですが、流出した瞬間にトークンが無効になりDMが飛ぶようなシステムまで作られているみたいです。
普通にすごい。
※トークンは流出しないようSecretで管理しましょう。
iOS版アプリでもポップアップで教えてくれます。ヒェッ