GPG KeyのYubiKey運用をはじめた

Table of Contents

背景・動機

2025年5月の自分の手元の環境はGPGに重度に依存している。

GPG Keyの運用についてかねてから悩んでいたが、YubiKey運用が一番よいという結論に至った。 ちょうどMacを初期化するタイミングがあったので完全に移行した。

次の記事を参考にした。

試したこと・やったこと

0. 運用方針を決める

GPG 鍵と YubiKey の運用メモ - Zenn と同様、次の方針で運用してくことにした。

  • YubiKey には主鍵と副鍵 (Encrypt) を焼き、持ち歩く
  • YubiKey の主鍵を利用して副鍵 (Sign, Auth) をデバイス毎に作成・保存しておく
    • コミット署名はデバイス毎の副鍵 (Sign) を利用する
    • SSH Keyはデバイス毎の副鍵(Auth) gpg --export-ssh-key 経由で端末ごとに生成する
      • keygrepを ~/.gnupg/sshcontrol に入れる
  • 暗号化・復号機能は YubiKey の副鍵 (Encrypt) を利用する

元記事に加えてSSH KeyもGPG経由で生成することにした。 Terraform GitHub Providerを導入した でIaCの土壌が用意されているので、端末が増えるごとに毎回追加する運用にしていく。

GPGの仕組みについてはChatGPTにひたすら質問して不安な部分を潰した。

1. YubiKeyを購入する

Amazonで Yubico セキュリティキー YubiKey 5C NFC USB-C/FIDO2/WebAuthn/U2F/2段階認証/高耐久性/耐衝撃性/防水 を購入した。

古いファームウェアには脆弱性があるようで、最新の5.7が届くことを祈りながら注文したら問題なく届いてくれた。(サポートには問合せ済み)

https://news.mynavi.jp/techplus/article/20240906-3019439/

代理店が完売状態が続いていて辛い。

https://ykey.yubion.com/collections/yubikey-5/products/yubikey-5c-nfc

2. 主鍵と副鍵をYubiKeyに焼く

ありすえさんの記事を参考に焼いた。 特に詰まる所なく対応できた。

3. 新規端末で副鍵(Sign, Auth)を入れる

こちらもありすえさんの記事を元に addkey をして副鍵を生成した。 元記事に加えて Auth も付与して生成した。

Authを付与するには --expert のオプションが必要なので注意。

# bad
$ gpg --edit-key <KEY_ID>

# good
$ gpg --expert --edit-key <KEY_ID>

4. ssh keyを生成する

gpg-agentを有効にして ~/.gnupg/gpg-agent.conf に次のような設定をした。

https://github.com/takeokunn/nixos-configuration/blob/main/home-manager/services/gpg-agent/default.nix

enable-ssh-support
grab
default-cache-ttl 86400
default-cache-ttl-ssh 86400
max-cache-ttl 86400
max-cache-ttl-ssh 86400

keygrepを取得して ~/.gnupg/sshcontrol にkeygripを書き込む。

$ gpg -K --with-keygrip

5. githubにssh keyを登録する

Terraform GitHub Providerを導入した のとおり、terraform経由でssh keyを登録する。

$ gpg --export-ssh-key <KEY_ID>
ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIOev0KNrycAZEyKdVRBehEKH0l1c8FL9fON4PiguGVOl openpgp:xxxx

ここから確認ができる。

https://github.com/takeokunn.keys

GPG keyのpublic keyは変化ないので初回登録しておけばよい。

https://github.com/takeokunn.gpg

得られた結果・所感

想像以上にスムーズにYubiKeyに移行できた。

なんだかんだ以前生成した ~/.ssh/id_ed25519 を使っていたので、SSH Keyから解放されたのが個人的には一番嬉しいポイントかもしれない。

今後の展開・検討事項

冗長性を高めるために自宅に厳重に保管する用のYubikeyも買って主鍵を焼く。 また、管理課の端末を増やして主鍵副鍵運用をもっと洗練させていく。

この記事を書いている間に 【令和最新版】sshcontrolは使わないで!最近のGPGによるSSH認証のベストプラクティス という記事を見つけたので別途調査する。