読者です 読者をやめる 読者になる 読者になる

GPG鍵の作り方

「盗難/紛失に備えるGPG鍵の作り方 」をメモしておく。

GnuPG(GPG/Gnu Privacy Guard)は、公開鍵、秘密鍵の2種類の鍵を使う、というのは誰でも知ってる。しかし主鍵(プライマリキー)と副鍵(サブキー)については、あまり知られていない。とりあえず主/副の鍵は何も気にしなくても、特に使用に不都合はないのだが、最近、副鍵の面白い使い方を知った。GPG秘密鍵が入っているノートパソコンやスマホなどの紛失や盗難にあったとき、インパクトを最小にするためにサブキーを追加してプライマリキーを削除したキーリングを使う方法というのがあるというのだ。
秘密鍵を盗まれると、その鍵を使って他人が所有者になりすましたり、暗号をやりとりすることができるようになる。
それでは困るので、失効証明書を発行してその鍵を使えないようにすればいい。
ただ、鍵を失効させてしまうと、新しい鍵を作りなおさなければいけなくなる。新しい公開鍵を配布し直さなければならないことは言うまでもないが、信用の輪(web of trust)もゼロから構築しなおさなければならない。公開鍵の配布はともかく、web of trustの中にいる人にとっては、信用関係を構築し直すのは相当めんどくさいことになる。
しかしサブキーの仕組みをうまく使えば、公開鍵のIDを変更することなく、盗まれた鍵だけを失効させ、新しい鍵に入れ替えることができる。この場合、新しく公開鍵を配布し直さなければならないことに変わりはないが、新しい鍵は従来の鍵と同じ信用を持っているので、相手側は安心して鍵を入れ替えることができる。

この方法のポイントは2つある。まず、GPGの鍵に署名用のサブキーを追加し、最初に生成された署名用のプライマリキーを削除した秘密鍵を、ノートパソコンなどのモバイルデバイスや、普段利用する環境で使うこと。そして最初に生成された署名用プライマリキーを含む秘密鍵は安全な場所に保管しておくということ。なお、公開鍵の署名用メインキーは削除しない。
こうしてプライマリキーを含まない秘密鍵は元の鍵の信頼を受け継ぐので、この鍵ペアを使ってドキュメントの暗号化や署名の処理をすることができる。言うまでもないが、web of trustのために他人の鍵に署名する場合は保存しておいたオリジナルのプライマリキーを使うこと。
もし秘密鍵が盗まれても、どこかにこっそり保管しておいたオリジナルのプライマリキーを含む秘密鍵で、盗まれた暗号用、署名用のサブキーを失効させる。そして新しく暗号用、署名用のサブキーを作成して差し替えれば、鍵ペアのIDを変えず、またその鍵ペアの信頼も損なうことなく、新しい鍵として使えるようになる、というわけだ。
この一連の操作については、ざっと以下のような流れになる。

gpg --edit-key 鍵名
gpg> addkey
gpg --export-secret-keys 鍵名 > 保存ファイル
gpg --export --armor 鍵名 > 公開用アスキー化ファイル
gpg --export-secret-subkeys 鍵名 > 一時ファイル
gpg --delete-secret-key 鍵名
gpg --import 一時ファイル
rm 一時ファイル

これらの鍵操作については、 Using OpenPGP subkeys in Debian development、 Creating the perfect GPG keypair などが参考になる。

ソ-ス:雑記: 盗難/紛失に備えるGPG鍵の作り方