パスワード管理ソフトで有名な 1Password に SSH の鍵管理の機能が追加されていた。 新たにセットアップする機会がなかったのでスルーしていたが、セットアップ機会が訪れたので試してみたところ、思った以上に体験が良かった。
また GitHub に SSH 鍵でコミットの署名・検証を行える機能が追加された。 これらが組み合さって、これまでの鍵管理やコミット署名と比べて手間無くセキュアに出来ることに気づいてきたので紹介してみる。
1Password での SSH 鍵生成/管理
まず、1Password 8 から SSH の鍵を生成 / 管理できるようになった。
詳しいやり方は上記のブログやドキュメントを見てもらう方がわかりやすい。
この機能を使った GitHub への鍵の登録イメージはブログにもあるこの動画を見てもらうと想像出来ると思う。
見ての通り、1Password 拡張を入れていればブラウザだけで SSH 鍵の生成と登録が出来るようになる。 自動で公開鍵をペーストしてくれるので、よくわからずに秘密鍵の方を貼り付けるといったこともなくなる。 さらに署名アルゴリズムのデフォルトが Ed25519 で生成するので、よくあるコピペそのままを使って RSA を利用するといったこともなくなる*1。
1Password で生成した SSH 鍵を使い Git のコミット署名をする
次に 1Password で生成した SSH 鍵を使って Git のコミット署名を行うことについて説明する。
これまでも GitHub は GPG や S/MIME を使った署名・検証を行えたが、この8月の機能追加で SSH 鍵を使ったコミット署名の検証に対応した。
そして2週間後、1Passwordを使いGitのコミット署名を行うブログが出た。これがビジネスのスピード感。
これも同じようにブログにある動画を見てもらった方がわかりやすい。
動画の通りわずか1分で署名用の鍵の登録と Git の設定が完了した。 上手く見せてるだけと思うかもしれないが、自分自身が試したときもこれと同じステップで設定が完了した。時間を使ったのはせいぜい 1Password に登録する名前を考えるくらい。
自分はこれらの機能が出る前から GitHub でコミット検証が出来るように設定していたが、1Password を使うやり方と比べたらはるかに手間や知識が必要と感じた。
基本的には GitHub が用意しているドキュメント通りにやれば出来るものの、GnuPGを入れたりCLI操作が必要だったり、コミットに署名するための設定を .gitconfig
に追記したり等、様々な手順が必要だった。
それがこの 1Password での SSH 鍵管理と GitHub の SSH 鍵によるコミット検証対応で、非常に簡単な操作かつ追加のインストールを必要とせず行えるようになった。 このことの衝撃が多少なりとも伝わればと思う。
試してみた感想
既に書いてしまっているが、実際に試してみた感想や思ったことを書き出してみる。
SSH 鍵の管理を考えなくてよくなった
これまで真面目に鍵の管理を考えていたわけではないが、1Password に保存されることで全てをそちらに任せられる。
鍵の管理を意識するのは、特に端末を移行する際鍵をどう移行させるかといったときに考える。 もちろん移行はそこまで手間のかかる作業ではないが、面倒で新しく鍵を生成することもよくあった。
これが 1Password に保存されることで 1Password のセットアップさえ出来ればそれで済むことになり、管理だけでなく SSH 鍵のポータビリティが向上していると思う。
コミット署名の設定が楽
これは既に書いているが、コミット署名の設定が非常に楽になった。
追加のインストールが必要ないだけでなく、1Password が自動で .gitconfig
に追記してくれるので、ボタン1クリックでコミット署名の設定が完了した。
デフォルトでコミット署名を行うようになるので、ユーザーは何も意識せずに署名と検証が出来るようになる。
これまでは設定が手間でコミット署名を行ってこなかった人も、こんなに簡単に出来るのなら設定しておくかと思うのではないか。
全ての開発者に Git のコミット署名をお願いしやすくなった
Git のコミット署名・検証は行えた方がよいとされているはず*2。GitHub でどのアカウントによる変更か正しく追跡できるようになるし、Branch Protection Rule で署名付きコミットのみに制限することも可能になる。
しかし、Git のコミット署名は面倒だったので設定しないことが多かった。自分も面倒さのために最近まで設定できていなかった。 自分自身が出来ていないので、他人に勧めたりチームや会社のルールにして必須化するまでは考えにくかったが、この 1Password と GitHub の機能追加によって状況が変わったように思う。
ターミナル操作を行わなくても10クリック程度でコミット署名の設定が行えるようになったし、1Passwordで鍵のポータビリティが上がったことで鍵の移行も間違いなく出来る。
この利便性の向上によって、全ての開発者に Git のコミット署名の設定をお願いしやすくなったと思う。 ここでの開発者はエンジニアだけでなく、デザイナーなどの職種も含んでいる。
コミット署名はやれた方がいいが、他に優先させることがあれば後回しになる類の設定になると思う*3。 署名しなくても Git は使えるし、設定不備によるサポートの手間も考えなくてはいけなくなる。 署名によるセキュリティの向上具合を考えたら、他に取り組むべき課題を優先させることがあってもおかしくはないだろう。 しかし、10クリック程度で簡単に設定できるなら、簡単なので署名をしようという方向に出来ると思う。
SSH 鍵の管理と Git のコミット署名の設定の体験が良くなったことで、特別なことをせずにセキュリティを向上させられていると感じている。 このことは 1Password もブログに書いていて、複雑さを無くすことでセキュリティリスクを下げられることについて書いている。
気になるかもしれないこと
懸念もないわけではないので、書いておく。
SSH 鍵のパスフレーズを設定できない?
既にパスフレーズが設定されているものをインポートしたときは要求されたが、新規で作る際は要求されなかった。UIも見辺らないし今は実装されていないのかもしれない。
このパスフレーズは秘密鍵が窃取されたり、端末にアクセスされた際に利用されないようにするもの*4。 端末へアクセスについては 1Password のマスターパスワードで代替できているとしてもいいだろう。 一方秘密鍵が窃取された状況はカバー出来ていないかもしれない。 そう考えるとこれはやや微妙に感じるポイントかもしれないが、そもそも 1Password 保管庫にある情報が窃取されている状況はもっと深刻な被害になるような気はする……。
秘密鍵をクラウド上に保管していいのか?
秘密鍵をローカルPC以外に保存したことがなかったので一瞬考えたが、既に重要なサービスの認証情報を 1Password に置いているのなら何も気にすることはないと思い杞憂であると思った。
むしろ秘密鍵を ~/.ssh/
以下にそのまま置いてあるより安全なのではないか。
これはもう 1Password をどの程度信用するかに寄ると思う。
SSH 鍵をコミット署名に利用していいのか
GPG の方が確実で信用できる、といった議論が出来る知識は乏しいのでここでは議論しない。
使いものになるかの話で言うと、1Password で管理することで鍵のポータビリティが上がり同じ SSH 鍵を利用し続けるコストが低くなったため、署名・検証が機能するのではと考えている。
まとめ
1Password で SSH の鍵生成・管理、また Git のコミット署名を行うことについて紹介した。
第一印象は今すぐにでも広めたいくらいだが、まだ気づいていない問題点があるかもしれない。 実際私用で試し始めたばかりなので、しばらく使ってみて改めて振り返ってみようと思う。
パスワードレスの世界が本当に来そうなタイミングで、1Password が開発者向けツールを模索していることはとても納得がいく。 複雑さを無くすことでセキュリティリスクを下げるといったことにも共感するので、これからの動向にも期待したい。
参考情報
- https://github.blog/changelog/2022-08-23-ssh-commit-verification-now-supported/
- https://blog.1password.com/git-commit-signing/
- https://developer.1password.com/docs/ssh
*1:ちなみに、 GitHub のドキュメントでは Ed25519 を使うようになっている Generating a new SSH key and adding it to the ssh-agent - GitHub Docs
*2:開発者のための GitHub Organization の安全な運用と 継続的なモニタリング - Speaker Deck
*3:当然チーム・業種によるだろうが
*4:https://docs.github.com/ja/authentication/connecting-to-github-with-ssh/working-with-ssh-key-passphrases