GPG キーのエクスポート/インポート
はじめに
過去の投稿「GitHub の Verified マーク」の中で GPG を使用しました。マシンの買い替えにあたり、手っ取り早く GPG キーを移行することにしたので備忘のためこの手順を残しておきます。
移行は、
- 古いマシンで GPG キー、GPG 署名キーのエクスポート
- 新しいマシンで GPG キー、GPG 署名キーのインポート
- 新しいマシンで GPG キーの所有者信頼を設定する
の手順で進めます。
キーのエクスポート
GPG キー、GPG 署名キーをエクスポートするには以下のコマンドを使用します。
gpg --export {GPG キー ID} > pub.key # GPG キーのエクスポート gpg --export-secret-keys {GPG キー ID} > sec.key # GPG 署名キーのエクスポート
GPG キー ID は --keyid-format LONG
で表示することができます。
bob@old-machine ~ % gpg --list-secret-keys --keyid-format LONG gpg: checking the trustdb gpg: marginals needed: 3 completes needed: 1 trust model: pgp gpg: depth: 0 valid: 1 signed: 0 trust: 0-, 0q, 0n, 0m, 0f, 1u /home/bob/.gnupg/pubring.kbx ----------------------------- sec rsa4096/C611EFD63CD09CA7 2020-08-11 [SC] 314EC2737F246F907368BA38C611EFD63CD09CA7 uid [ultimate] Bob Marley <bob@example.com> ssb rsa4096/D3375CB42A265387 2020-08-11 [E]
上記の場合 GPG キー ID は C611EFD63CD09CA7
なので、
gpg --export C611EFD63CD09CA7 > pub.key gpg --export-secret-keys C611EFD63CD09CA7 > sec.key
とします。GPG 署名キーのエクスポートではパスフレーズを求められるので思い出して入力しましょう。
エクスポートした pub.key
、sec.key
を安全な方法で新しいマシンに配置します。後者は秘密鍵ですので取り扱いには注意です。
キーのインポート
GPG キー、GPG 署名キーをインポートするには以下のコマンドを使用します。
gpg --import {エクスポートした GPG キーのファイル} gpg --import {エクスポートした GPG 署名キーのファイル}
GPG 署名キーの方はエクスポートと同様にパスフレーズを求められます。
bob@new-machine ~ % gpg --import pub.key gpg: key C611EFD63CD09CA7: public key "Bob Marley <bob@example.com>" imported gpg: Total number processed: 1 gpg: imported: 1
bob@new-machine ~ % gpg --import sec.key gpg: key C611EFD63CD09CA7: "Bob Marley <bob@example.com>" not changed gpg: key C611EFD63CD09CA7: secret key imported gpg: Total number processed: 1 gpg: unchanged: 1 gpg: secret keys read: 1 gpg: secret keys imported: 1
確認してみましょう。
bob@new-machine ~ % gpg --list-keys /home/bob/.gnupg/pubring.kbx ----------------------------- pub rsa4096 2020-08-11 [SC] 314EC2737F246F907368BA38C611EFD63CD09CA7 uid [ unknown] Bob Marley <bob@example.com> sub rsa4096 2020-08-11 [E]
bob@new-machine ~ % gpg --list-secret-keys /home/bob/.gnupg/pubring.kbx ----------------------------- sec rsa4096 2020-08-11 [SC] 314EC2737F246F907368BA38C611EFD63CD09CA7 uid [ unknown] Bob Marley <bob@example.com> ssb rsa4096 2020-08-11 [E]
インポートされていますね。ですが、状態が unknown
です。このままでは不完全です。
所有者信頼を設定
GPG キーはキーの所有者に対する信頼の値を持ちます。unknown
は未設定状態です。キーの所有者本人なのでこれを ultimate
(キーを完全に信頼する)に変更します。所有者信頼の値を変更するには以下のコマンドを使用します。
gpg --edit-key {GPG キー ID} trust quit
コマンド投入後、対話に応える形で設定します。
bob@new-machine ~ % gpg --edit-key C611EFD63CD09CA7 trust quit gpg (GnuPG) 2.2.20; Copyright (C) 2020 Free Software Foundation, Inc. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Secret key is available. sec rsa4096/C611EFD63CD09CA7 created: 2020-08-11 expires: never usage: SC trust: unknown validity: unknown ssb rsa4096/D3375CB42A265387 created: 2020-08-11 expires: never usage: E [ unknown] (1). Bob Marley <bob@example.com> sec rsa4096/C611EFD63CD09CA7 created: 2020-08-11 expires: never usage: SC trust: unknown validity: unknown ssb rsa4096/D3375CB42A265387 created: 2020-08-11 expires: never usage: E [ unknown] (1). Bob Marley <bob@example.com> Please decide how far you trust this user to correctly verify other users' keys (by looking at passports, checking fingerprints from different sources, etc.) 1 = I don't know or won't say 2 = I do NOT trust 3 = I trust marginally 4 = I trust fully 5 = I trust ultimately m = back to the main menu Your decision? 5 # 信頼の値を選択(I trust ultimately) Do you really want to set this key to ultimate trust? (y/N) y # yes! sec rsa4096/C611EFD63CD09CA7 created: 2020-08-11 expires: never usage: SC trust: ultimate validity: unknown ssb rsa4096/D3375CB42A265387 created: 2020-08-11 expires: never usage: E [ unknown] (1). Bob Marley <bob@example.com> Please note that the shown key validity is not necessarily correct unless you restart the program.
確認してみます。
bob@new-machine ~ % gpg --list-keys /home/bob/.gnupg/pubring.kbx ----------------------------- pub rsa4096 2020-08-11 [SC] 314EC2737F246F907368BA38C611EFD63CD09CA7 uid [ultimate] Bob Marley <bob@example.com> sub rsa4096 2020-08-11 [E] bob@new-machine ~ % gpg --list-secret-keys /home/bob/.gnupg/pubring.kbx ----------------------------- sec rsa4096 2020-08-11 [SC] 314EC2737F246F907368BA38C611EFD63CD09CA7 uid [ultimate] Bob Marley <bob@example.com> ssb rsa4096 2020-08-11 [E]
ultimate
に変わっていますね!git タグの署名を検証し、成功すれば移行完了です(検証方法は 以前の回 を参照)。
パスフレーズの変更
GPG 署名キーのパスフレーズを変更したい場合は以下のコマンドを使用します。
gpg --edit-key {GPG キー ID} passwd quit
上記コマンドを叩くと既存のパスフレーズを求められたのち、新しいパスフレーズを設定することができます。