今まで RSA で適当に鍵を作ったりしていたが、もう少しセキュリティ面を考え、真面目に SSH key を作ったり、署名付きコミットをしてみようと思った。
強い SSH key を作る
RSA の 1024bit はよくないらしく、 2048bit も時間の問題で使えなくなりそうなので、ここは ECDSA や Ed25519 を使うことにしてみる。
各種Keyの作り方は下記が参考になった。
2017年版 SSH公開鍵認証で使用する秘密鍵ペアの作り方 - Qiita
圧倒的に意識が高いらしい、 ed25519 にして鍵を作ってみる。
ssh-keygen -t ed25519
なお、電子署名EdDSA(ed25519)の数的構造 - Qiita 等で理論を軽くおってみたが、難しいことはよくわからなかった。
ただ、古いサーバーに入ることに備えて RSA の鍵も作っておく。長さは 4096bit にして少しでも長くしておく。(自分が使う範囲だとこれくらいの長さでも大丈夫だが、もっと古いサーバーだとそうもいかなかったりするのかな?)
ssh-keygen -t rsa -b 4096
GPG鍵を使った署名付きコミットをする
GitHub で SSH key の他に PGP key が登録できるのだが、これが今までなぜ存在するのか実は知らなかった。
公式の記事を読んで機能を知った。About commit signature verification - GitHub Help
導入についてはこの記事が参考になった。
macOS Mojave で GnuPG の鍵を SSH の鍵として使う - Qiita
なお、導入にあたっては gpg
コマンドが動く状態であることが重要っぽい。そのためのパッケージがどうこうみたいな問題はあるようだが、あまり躓くことなく導入できてしまったので何が最小構成なのかわかっていない。(一応、 gpg
コマンド動く状態で、 Ubuntu で少し試してみたが、同じ手順で導入できている)
ただしバージョンはなるべく新しいほうが良いようだ。こちらの git(GitHub)でGPGを使った署名をおこなう - Qiita 記事も参考にしたが、なるべく新しいほうがいいんだなあ… ということを知った。(ただこの記事は RSA で進めていたので、もう少しいい感じのやつないかなーで上の macOS Mojave でやる記事を見つけた)
最後に下記を打ち込んで、
gpg --list-keys --with-keygrip <あなたのemailアドレス>
pubの直後にある部分を <keyのID>
としてやると、 GPG キーが Export される。
gpg --armor --export <keyのID>
これを GitHub の PGP Key に貼り付ければ登録完了。
登録後はこんな感じに。
git commit を常に署名付きにする
git config --global commit.gpgsign true
で global な .gitconfig
に設定を書き込んであげればOK。
push したら下記のように見えるはず。(しかし個人リポジトリだからといってコミットメッセージがひどい)
緑色の Verified
がついていればOK。
まとめ
GPG key の存在とか、設定方法とか改めて提供されている機能を活用してみようと思うといろいろ学ばなければいけないことが多いなと感じた。
でもこれでこれは私のコミットです!!と堂々と言えるようになったのは良かったかな、と思う。バリバリ署名付きコミットをアピールするように進捗を出していきたい。