GPG KeyのYubiKey運用をはじめた
Table of Contents
背景・動機
2025年5月の自分の手元の環境はGPGに重度に依存している。
- Bitwardenからpassword-storeに移行した
- Authyからpassword-store-otpに移行した
- credential管理をorg-encryptからpassword-storeに移行した
GPG Keyの運用についてかねてから悩んでいたが、YubiKey運用が一番よいという結論に至った。 ちょうどMacを初期化するタイミングがあったので完全に移行した。
次の記事を参考にした。
- GPG 鍵と YubiKey の運用メモ - Zenn
- YubikeyでOpenPGP鍵をセキュアに使う - κeenのHappy Hacκing Blog
- YubiKey(OpenPGP card)には主鍵を入れよう - ふわわあのへや
試したこと・やったこと
0. 運用方針を決める
GPG 鍵と YubiKey の運用メモ - Zenn と同様、次の方針で運用してくことにした。
- YubiKey には主鍵と副鍵 (Encrypt) を焼き、持ち歩く
- YubiKey の主鍵を利用して副鍵 (Sign, Auth) をデバイス毎に作成・保存しておく
- コミット署名はデバイス毎の副鍵 (Sign) を利用する
- SSH Keyはデバイス毎の副鍵(Auth)
gpg --export-ssh-key
経由で端末ごとに生成する- keygrepを
~/.gnupg/sshcontrol
に入れる
- keygrepを
- 暗号化・復号機能は 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に焼く
ありすえさんの記事を参考に焼いた。 特に詰まる所なく対応できた。
- https://zenn.dev/lambdalisue/articles/gpg-with-yubikey-2024#主鍵の編集
- https://zenn.dev/lambdalisue/articles/gpg-with-yubikey-2024#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
に次のような設定をした。
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認証のベストプラクティス という記事を見つけたので別途調査する。