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
上記コマンドを叩くと既存のパスフレーズを求められたのち、新しいパスフレーズを設定することができます。