Suite)の鍵管理(署名、暗号化、SSH認証)にYubiKeyを使います。GPG(GnuPG)についてGPGは昔からあるオープンソースの暗号・署名の主要なコンポーネントのひとつです。日本ではパスワード付きZIPファイルのやり取り、いわゆるPPAPを無くしていく流れでもあるので、これを機会にGPGが見直されればいいなと思いこの記事を書く事にしました。macOS版は複数プロダクトまたは複数バージョンに対する設定が混在していて(既に廃止された機能の説明を含む)、余計に分かりづらくなっています。昔のPGPでの主眼であった友達の輪を広げていくという考え方は現代ではもはや少なくなってしまいました。いった信用の輪がサイバー攻撃で狙われてしまう時代です。GPGでの署名やITベンダーへのサポートのためにダンプファイルを相手の公開鍵で暗号化して送付する、ダウンロードしたファイルの署名を確認するという使われ方がメインです。Suite)をお勧めします。GUIで暗号化・復号化できるのは便利です。Appleメールの拡張機能でGPGを使う場合、3,000円程度の有償となります。Homebrewであれば、gpg-suite、gpg-suite-no-mail(有償のメール機能が無いもの)が該当します。Suiteを直接ダウンロードする方法もあります。Managerのコマンドインタフェースツールが必要です。これはHomebrewでykmanをインストールするか、Yubicoのサイトからダウンロードし、インストールしてください。マウスの右クリック(タッチパッドは2本指のタップ)で以下のメニューが選択できます。選択し、マウスの右クリック(タッチパッドは2本指のタップ)で以下のメニューが選択できます。長い文字列でなければ、パスワード管理ソフトに入れておくほうが現実的でしょうか。GitHubでのVerifyGitHubでコミット時に本人が署名すると、以下の”Verified”マークが付きます。Mailでの署名と暗号化メールの受取側がGPGを持っており、相手の公開鍵を自分のGPGに取り込んであれば、暗号化と署名を付けてメールを送れます。GPGを使ったSSHYubiKeyで設定したPINを入力して公開鍵認証でSSH接続します。YubiKeyを使ったGPGの鍵管理YubiKeyを使うGPGでは主鍵(MainKey)となる認定鍵(Certify)に加え、署名(Sign)、暗号(Encrypt)、認証(Authenticate)という副鍵(SubKey)を持たせます。YubiKeyの構成上、ひとつの機能にひとつの副鍵を割り当てる事が大前提です。YubiKeyを紛失した場合を考慮し、主鍵はYubiKeyには置きません。主鍵は変えず、副鍵は任意に削除、追加する事を想定しています。Yubicoでは、この副鍵を端末側で生成し、それをYubiKeyに取り込む形を推奨しています。4/5はRSA暗号4096ビットまで対応できます。RSA暗号は2048ビットあれば十分と考えていますが、GitHubの推奨としては「キーは少なくとも4096ビットである必要があります」との事。-->F[Authenticate]主鍵は万が一YubiKeyをなくした場合などの鍵の抹消や新しい副鍵を作る以外は使いません。USBなどに複写し安全な場所で保管する事になります。主鍵が無いと友達の輪を広げられない(相手の公開鍵に署名できない)のですが、YubiKeyを使ったGPGの使い方としては、そこに重きを置いていません。YubiKeyとGPGのセットアップはお手本となる説明があります。SSH.https://github.com/drduh/YubiKey-Guideただし、このガイドは秘密鍵を漏洩させないためにクリーンなLinux上で作業し、暗号化USBを作りセットアップするという超優等生な手順になっています。この記事では可能な限りシンプルな手順の作成を目的とし一部の手順を割愛しています。大まかな手順は以下の通りです。Suite・ykman)がインストールされている事、秘密鍵のバックアップのため、macOSで認識可能となるようフォーマット済みのUSBが用意できている前提としています。鍵の生成は出来るだけ安全な環境下で実施するために、ネットワークから切り離し、ウィルス対策ソフト以外のソフトウェアを可能な限り終了させてから作業します。鍵の作成時にはYubiKeyの接続は必要ありません。私は古くはmacOSのCatalina(10.15.7)、Sonoma(14.2.1)で動作確認しています。コマンドラインエディタはvim(vi)を利用していますが、他のエディタでも構いません。GPGのコマンドインタフェースがかなり特殊な事もあって、まずはアドリブ無しにこの手順をなぞっていただく事をお勧めします。変更可能な部分は主鍵および副鍵の有効期限および鍵の種類です。鍵の種類としては特に拘りがなければRSAをお勧めします。以下の手順では、#から始まるコメント部分に要点を記載しています。初期設定ターミナルを起動します。認定(Certify)鍵を無期限で作成します。機能毎にフラグという概念を持ちます。ビットの長さで可能です。4096要求された鍵長は4096ビット鍵の有効期限を指定してください。yGnuPGはあなたの鍵を識別するためにユーザIDを構成する必要があります。Oたくさんのランダム・バイトの生成が必要です。成器に十分なエントロピーを供給する機会を与えることができます。たくさんのランダム・バイトの生成が必要です。成器に十分なエントロピーを供給する機会を与えることができます。公開鍵と秘密鍵を作成し、署名しました。law.秘密鍵が利用できます。<your@mail.com>以降は副鍵を作成していきます。一般的な考えでは、有効期限は定めるべきものとされています。ビットの長さで可能です。4096要求された鍵長は4096ビット鍵の有効期限を指定してください。yたくさんのランダム・バイトの生成が必要です。成器に十分なエントロピーを供給する機会を与えることができます。ビットの長さで可能です。4096要求された鍵長は4096ビット鍵の有効期限を指定してください。yたくさんのランダム・バイトの生成が必要です。成器に十分なエントロピーを供給する機会を与えることができます。ビットの長さで可能です。4096要求された鍵長は4096ビット鍵の有効期限を指定してください。yたくさんのランダム・バイトの生成が必要です。成器に十分なエントロピーを供給する機会を与えることができます。ご自身の環境に応じてUSBへのパスは変更してください。path/USBはアンマウントします(しばらく使わないので保存)公開鍵をホームディクレトリのpublic_key.pgpとしてエクスポートこの公開鍵はGPGの実運用で使うものになります。後でホームディレクトリの公開鍵を再度GPGに取り込み、鍵の管理をすることになります。$KEYIDYubiKeyの確認YubiKeyを接続します。ManagerでみたPIVのPIN、PUKとは異なります。YubikeyはGPG向けに別のPIN(デフォルト123456)、AdminPIN(デフォルト12345678)があるので、紛失時のためにも設定変更される事をお勧めします。Q3つの副鍵をYubiKeyに転送YubiKeyに転送された秘密鍵は端末からは全て中身が抹消され、YubiKeyに情報がある事を示すポインタにしかなりません。やりなおしが必要になった場合は、秘密鍵をバックアップから復活させてから行う必要があります。$KEYID秘密鍵が利用できます。3つのキー毎にYubikeyに転送します。2026-01-30]最終確認のチェックリストデフォルトから変更したYubiKeyのPINおよび管理PINを記録しましたGPGの主鍵のパスワードを記録しましたUSBに主鍵、副鍵、および失効証明書のコピーを保管し、オフラインで保管する準備をしましたホームディレクトリに公開鍵のコピーを保存しました鍵の生成で使った$KEYIDの値を記録しましたクリーンアップ上記のバックアップが確保されている事を前提に、作業してきた一時フォルダを削除します。GNUPGHOMEクリーンアップが終了したらネットワークに接続できます。秘密鍵はもうmacOSの中に残っていません。秘密鍵は取り外したUSBと接続されているYubiKeyの中にあります。1u以下の鍵1234567890123456は実際に上記で生成された鍵(キー)を指定します。quitGPG環境の設定gpg-agent.confの設定gpg-agent.confに以下の内容から不足があれば追加します。3-4行目のキャッシュ時間は環境に応じて自由に変更してください。Agentの自動起動についてGPGをインストールすると、OS起動時に起動するアプリケーションがLaunchAgentに登録されます。Agentの起動を登録します。ユーザーのLaunchAgentsに2つのファイルを作成します。作成先は/Librarlyではなく、$HOME/Libraryです。</dict></plist>ここまで作成したら一度macOSをログアウト、ログインします。Agentを含めて6つのプロセスが起動している事を確認します。gpg6460org.gpgtools.macgpg2.shutdown-gpg-agent-0gnupg.gpg-agent-0gnupg.gpg-agent-symlink-0org.gpgtools.updater-0org.gpgtools.macgpg2.fix5110org.gpgtools.Libmacgpg.xpcここまでの作業で一旦はGPGの基本機能が使える状態になりました。SSH公開鍵のエクスポートここからはYubikey+GPGのSSH接続設定です。cardno:000612345678Yubikeyの公開鍵の末尾にはカード番号の記載があります。SSH公開鍵を接続先のサーバーのauthorized_keysに登録します。macOS側の~/.ssh/configにはGPGのための追加設定が不要です。ターミナルから接続テストしてみましょう。GPGの公開鍵とSSH公開鍵とをGitHubに登録ホームディレクトリに作成したPGP公開鍵とSSH公開鍵との2つをGitHubに登録します。keysをクリックします。keyというボタンをクリックしそれぞれを登録します。SSHが行える事を確認しましょう。変更を参照してください。1234567890123456デフォルトですべてのコミットに署名するには、以下を実行します。trueを確認します。Toolsを使ったSSH接続と署名の対応は完了です👍。PIV方式とは異なりGUI方式によりPINの入力も行える事、また一定時間PINはキャッシュしますので、セキュアである事と利便性を両立させています。行おうとしている時に、YubiKeyへのタッチを必要とさせる設定ができます。GPGのPIN入力はキャッシュしている時間がありますが、これを設定すると、GPGのアクションの前には必ずYubiKeyにタッチする必要があります。慎重さを求める方に向いています。デフォルトではOffになっていますが、これをOnにする場合は以下のコマンドを投入します。YubiKeyがタッチを待っている間はランプが点滅します(12秒程度応答しないとギブアップします)。これはNeoなどYubiKeyの種類によっては設定できません。onOffにする場合は以下のコマンドになります。offOnの代わりに15秒キャッシュする”CACHED”という項目も設定できます。継続的インテグレーション(CI)など、署名、デプロイと連続動作させる時にこのCACHED設定は便利です。GPGとPIVとの切り替え前回の記事「YubiKeyとSSHとGitHub」ではPIVカードとしての扱いについて説明しました。GPGは排他でカードを占有してしまう仕様のため、GPGを使っている時はPIVを使うYubico-Authenticatorは動きません。infoを実行する事でGPGから切り離されPIVのインタフェースが使えるようになります。Toolsサポートでの議論もありましたが、明確な解決が難しいまま今に至っています。Authenticatorを起動する方法が簡単でしょうか。以下に画面キャプチャを記載しておきます。S/MIME-https://gpgtools.tenderapp.com/discussions/nightly/110-gpgmail-fails-to-sign-after-switch-from-smime副鍵の有効期限到来による再作成ここでは主鍵の有効期限を無制限、副鍵は有効期限ありで作成しました。副鍵の有効期限が2週間程度に近づいた場合、GPGから警告の通知ダイアログが表示される場合があります。この場合はUSBにバックアップした秘密鍵など一式を再び一時フォルダに戻した上で、既存の副鍵期限延長、または新たな副鍵を新たな期限で作成し、一度初期化したYubiKeyに再度上記の手順で再登録する事になります。SSHの公開鍵は変わりますので、再度サーバーへの配布が必要となります。