GPG の設定 ~楕円曲線が使いたかったんや~
まだ使えてなくて渋い...
使えるようになった
概要
結構前から GPG Key が GitHub 上でも使えるようになって、 Commit に署名ができるようになっていることは皆さんご存知かと思われます。僕自身何回か挑戦したものの、仕組みがよくわからなかったりして動かねーって何回か挫折したのをエイヤッと乗り越えるついでに GPG についても勉強したログ
ツールについて
ページによって色々インストールするように指示がありますが、gpg-suite さえあれば全てのことはできるようになってます。Qita とか Stack Overflow のコピペはしなくて大丈夫です。 mac なら cask で入れると楽です。
$ brew cask install gpg-suite
gpg-suite を入れると gpg コマンドも使えるようになります。gpg1, gpg2 とかは気にしなくていいです。
code:sh
$ gpg --version
gpg (GnuPG/MacGPG2) 2.2.8
libgcrypt 1.8.3
Copyright (C) 2018 Free Software Foundation, Inc.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: /Users/JP23064/.gnupg
サポートしているアルゴリズム:
公開鍵: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
暗号方式: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256,
TWOFISH, CAMELLIA128, CAMELLIA192, CAMELLIA256
ハッシュ: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
圧縮: 無圧縮, ZIP, ZLIB, BZIP2
以下に設定ファイルとかがあります。
$ ls -al $HOME/.gnupg
作業ログ
以下で鍵を生成します。
僕は楕円曲線を使った鍵を作りたかったのでコマンドで作成しました。
code:sh
$ gpg --expert --full-gen-key
gpg (GnuPG/MacGPG2) 2.2.8; Copyright (C) 2018 Free Software Foundation, Inc.
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 (署名のみ)
(7) DSA (機能をあなた自身で設定)
(8) RSA (機能をあなた自身で設定)
(9) ECC と ECC
(10) ECC (署名のみ)
(11) ECC (機能をあなた自身で設定)
(13) 既存の鍵
あなたの選択は? 9
ご希望の楕円曲線を選択してください:
(1) Curve 25519
(3) NIST P-256
(4) NIST P-384
(5) NIST P-521
(6) Brainpool P-256
(7) Brainpool P-384
(8) Brainpool P-512
(9) secp256k1
あなたの選択は? 1
以下でテストする、エラーが出たら内容を確認する
$ echo "test" | gpg --clearsign -vvv
以下で agent を落とせる。これの後にもう一回テストすると署名できたりする
$ killall gpg-agent
以下で作成した鍵の ID を出力できる (key が複数あるとかの場合は適宜調整
$ gpg --list-secret-keys --keyid-format LONG | grep sec | grep -Eo '\w{16}'
<key-id> を入力して公開鍵を出力する
$ gpg --armor --export <key-id>
署名の取り扱いについて
Linus Torvalds 曰くコミットにバシバシ署名するより tag に署名することの方が本質的だそうなので、以下で false にしておく $ git config --global commit.gpgsign false
それでも毎回署名したいなら、対象のリポジトリで以下を実行するのでいいのでは
$ git config --local commit.gpgsign true
もっと詳しく知りたい人は上記のコメントにもありますが以下がわかりやすかったです。
参考文献