Yubikey5NFCを買ったのでGPGに入門する話。

こんにちは!

今回はYubikey5を購入したのでそれに関するお話をしようと思います

(Yubikey5を買ってからこの記事を寝かし続けて半年以上経ってしまいました笑)

Yubikey5を購入した後にCloudflareでYubikey5の大安売りが有ったので10本購入しました。

手元には11個のYubikey5が有ります・・・笑

と言うわけで、Yubikey5を最大限活用したいと思います。

(表記揺れ防止のためGPGで統一します)

はじめに

私はYubikey5を購入しようと思ったきっかけはSSHの秘密鍵を焼きこんでSSH物理鍵としてYubikey5を利用する事が出来るという事を知ったからです。

当時の私は、SSHする際に踏み台となるサーバーを1台用意していて、そのサーバーに対してSSHした後、踏み台サーバーの中にある秘密鍵を利用して対象となるサーバーにSSHするという事を行っていました。

ただセキュリティ的にはあまりよろしくなく、何かの拍子に踏み台サーバーが乗っ取られた際に、自分の管理しているサーバーにリモートからアクセスできなくなるだけでなく、勝手に様々な操作を行える状況になり、何をされたかログを見ないとわからない(ログも消せるかもしれない)状況になるという恐れがありました。

でもどこからでも踏み台サーバーにSSHが出来ればどの対象にでもSSH出来るという利便性を捨てたくなかったのです。

そこでYubikey5を購入してその中に鍵をいれて持ち歩くという事を思いつきました。

管理しているすべてのサーバーにyubikey5の中にある鍵の公開鍵を登録しておけば、どの端末からどのサーバーにアクセスしようとしても踏み台をはさまず、Yubikey5を刺してPIN入力するだけで良いという環境を作れると考えました。

(外出先でAndroid端末からSSHする際などにも使えるしね!)

なぜGPGを利用しようと思ったのか

SSH鍵を生成してYubikey5に保存するのであればGPGである必要は無いはずです。

それどころかGPGのセットアップがSSH鍵を作成するより面倒くさいです。

理由その1

GitHubにVerifiedタグをつけたかった

当時GitHubにcommitする際に Verifiedタグをつける際にGPG鍵を登録して、commit時に署名を行う必要がありました。

いつかはGPGを利用して Verifiedタグをつけたいと考えていた為、GPGに入門するにはベストタイミングだと思いました。

理由その2

GPG鍵を利用してSSHする事が可能だという事を知ったから

ぶっちゃけSSHさえできれば鍵の種類はなんでもよかったんですよね。

いままではセキュリティ的に一番よさそうなed25519を利用していましたが、そこに強いこだわりは無かったのです。

しかもAndroidのSSHクライアントでYubikey5+GPGでSSHする事が出来る物も見つけたので外出先などからのアクセスも問題が無い事が分かりました。

理由その3

Yubikey5を可能な限り酷使したかったから

せっかくウン千円払ってYubikey5を購入したのでSSH鍵を1つ入れて終わりにしたくなかったのです。

どうせ鍵を入れるなら多機能な物を!と考えたのです。

理由その4

ロマン

以上。

GPG鍵のセットアップ

私はこちらの記事を参考に鍵のセットアップを行いました。

ここで解説するより圧倒的に丁寧ですので、是非ご覧になってください。

私はオフラインのThinkPadにUbuntu22をUSB bootして鍵を作成し、

主鍵の秘密鍵をDVDに焼き保存しました。

一緒に作成した副鍵の秘密鍵をSDカードに保存しつつyubikeyに書き込み、公開鍵をUSBメモリに保存しました。

参考にしたサイト以外で行った事

その後USBメモリの中から公開鍵を取り出し取り込み、keyserverに送信しました。

GPGにはKeyServerというものがあり、作成した鍵などをアップロードする事により分散保存してくれます。

最初私はhttps://keyserver.ubuntu.com/ にアップロードしましたが、気が付いたらhttps://keys.openpgp.org/ にも伝播していてニッコリ

ちなみにkeyserverに鍵を送信するコマンドは

gpg --keyserver keyserver.ubuntu.com --send-keys $KEYID

です

GPG鍵を入れたYubikey5でSSH

ここまでにGPGの設定は済み、Yubikey5にGPG鍵のインストールまで行えているはずです。

では早速GPGでSSHしてみましょう。

今回の環境はUbuntu22.04LTSとmacOS Venturaです。

あとついでにAndroidもやってみましょう。

ではまずはUbuntuの方から設定していきましょう。

なおWindowsのWSL2でも利用する事は可能ですが、ちょっとめんどくさい設定とかをする必要があります。

なので今回は解説しません!!!!!!!

ご要望があれば解説しますが、ググって見つけてもらった方が早いです。おすすめです。

Ubuntu設定編

我流でとりあえずこれやっておけば使えたのでまとめます。

間違えてる所があればコメント欄やDMでこっそり教えてください~

  1. GPG agentを設定してSSHで利用できるようにする
  2. SSH-agentの代わりにgpg-agentが用意しているSSH_AUTH_SOCKを使うようにする
  3. gpg-connect-agentのプロンプトを表示するターミナルを変更する

GPG agentを設定してSSHで利用できるようにする

まずはGPG agentの設定を行います。

~/.gnupg/gpg-agent.confの中にenable-ssh-supportという1行を追加します。

たったこれだけです。簡単ですね。

SSH agentの代わりにGPG agentのSSH_AUTH_SOCKを使う

SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"というコマンドを1行打つだけで良いのですが、自分の環境だと1度ssh agentを起動してからこのコマンドを打つ必要がありました。

ちなみに、gpgconf --list-dirs agent-ssh-socketというコマンドを打つと、GPG agentが用意しているssh socketのpathが表示されます。

その出力をそのままSSH_AUTH_SOCKに設定しているだけです。

gpg-connect-agentのプロンプトを表示するターミナルを変更する

私の環境では1度gpg-connect-agentのプロンプトを表示するターミナルを変更する必要がありました。

多分ターミナルを閉じなければ、これは必要のない作業だと思いますが、おまじない的に実行しています。

実行するコマンドはgpg-connect-agent updatestartuptty /byeです。

このコマンドを実行する事でYubikeyのPIN入力プロンプトが表示されるようになります。

以上の手順を普段利用しているLinux全機種で行った所、YubikeyのGPG鍵でSSHを行う事が出来るようになりました。

続いて、macbookで利用できるように設定を行います。

macOS Ventura設定編

正直ほぼうろ覚え状態なのですが、設定した内容はほとんどUbuntuと同じだったと思います。

ただGPG Suiteがいろいろ裏でやってくれるので、さらに簡単に出来たような記憶があります

  1. brewでGPG Suiteをインストール(鍵のインポートもやる)
  2. GPG agentを設定してSSHで利用できるようにする
  3. SSH-agentの代わりにgpg-agentが用意しているSSH_AUTH_SOCKを使うようにする

くらいだったかと・・・

brewでGPG Suiteをインストール

タイトルの通りbrewでGPG Suiteをインストールします。

brewじゃなくても大丈夫です。GPG Keychainと言うツールをインストールする事でGPG鍵の利用を簡単にしてくれます。

https://gpgtools.org/

https://formulae.brew.sh/cask/gpg-suite

また、Yubikeyを利用できるようにするためにykmanと言うYubikey manager的なツールをインストールする必要があります。

これもhomebrewでインストール可能です。

https://developers.yubico.com/yubikey-manager/

https://formulae.brew.sh/formula/ykman

上記2つをインストール後GPG Keychainを開き、公開鍵のインポートを行います。

keyserverにアップロードしたものを利用しても大丈夫です。

(確かこのタイミングでもうyubikeyが使えるようになったはず・・・違っていたら教えてください)

GPG agentを設定してSSHで利用できるようにする

では先ほどUbuntuでGPGの設定を行ったのと同様に設定を行います。

~/.gnupg/gpg-agent.confの中にenable-ssh-supportという1行を追加します。

私はこのタイミングでbrew install pinentry-macを行い、pinentry-program /usr/local/bin/pinentry-macという行も一緒に追加しました。

これをする事によりYubikeyを使用する際に、PIN入力のウィンドウが表示されるようになります。

SSH-agentの代わりにgpg-agentが用意しているSSH_AUTH_SOCKを使うようにする

最後にこれですね。

私は~/.zshrcの中にexport SSH_AUTH_SOCK=$HOME/.gnupg/S.gpg-agent.sshという1行を追加して対応しました。

Ubuntuの時はssh-agentを起動しないとだめだったのですが、macはこれで大丈夫なんですよね。

これを追記するだけで、ターミナルを開いただけでYubikey GPG鍵を利用する準備が整うのでとてもとても楽です。

Android設定?編

最後にAndroidです。

IOSではGPG鍵を利用する方法が現状無さそうなのですが、Androidであればいくつか選択肢があります。

私はオープンソースのSSHソフトウェアを利用しています。

https://hwsecurity.dev/termbot/

このアプリケーションはconnectbotという超メジャーなSSHアプリケーションのフォークで、YubikeyなどのGPG Cardを利用できるようにカスタマイズされた物です。

使い勝手はconnectbotとほぼ全く同じな事に魅力を感じました。

このtermbotをインストールしたら、右上のハンバーガーボタンをタップし、公開鍵管理をタップします。

すると公開/秘密鍵の設定画面が表示されます。

右上の+マークをタップすると、鍵の追加などの設定が表示されるのですが、

Add OpenPGP security keyという項目をタップしYubikey5を接続します。

NFCが搭載されているAndroid端末であれば、NFCリーダーが付いている場所にYubikey5をかざすだけでOKです。

なんたってYubikey5 NFCなので!

あとはconnectbotを使用する感覚でSSHするサーバーの追加設定を行います。

その際に公開鍵を使用という選択欄で、先ほど追加した鍵を指定するだけです。

あとは接続する際に、Yubikey5の接続とPIN入力を求められます。

ただそれだけなのでとてもとても簡単ですね。

参考にしたサイト

https://gpgtools.org/

https://formulae.brew.sh/cask/gpg-suite

https://developers.yubico.com/yubikey-manager/

https://formulae.brew.sh/formula/ykman

https://keichi.dev/post/yubikey-configuration/

https://hwsecurity.dev/termbot/


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です