ある環境から別の環境に gnupg の secret key を 1 個だけコピーしたいことがあったので、 export して import してみました。

確認環境

セキュリティ上の理由で細かいバージョンは省略しますが、 どちらも gpg (GnuPG) 2.2 系です。

export 側

gpg --list-secret-keys で鍵 ID を確認します。

例えば以下なら 2 行目の末尾 8 文字の B4222F7A や 16 文字や全体が鍵 ID として使えます。

sec   rsa4096 2010-06-27 [SC] [有効期限: 2040-08-10]
      B863D6DCC2B957B852386CE0262ED8DBB4222F7A

--export-secret-keys で export しました。 ここでパスフレーズが要求されます。

クリップボード経由で安全にコピーできる経路ならファイルには書き込まない方が良さそうですが、 tmux の中でコピーしにくかったのでファイルを経由しました。

gpg --export-secret-keys --armor --output private-key $keyid

コピーし終わったら、 shred --remove などで安全に消しておきます。

shred --remove private-key

import 側

ssh 経由などの安全な経路でコピーします。

--allow-secret-key-import 付きの --import で取り込みます。 ここでもパスフレーズが要求されます。

gpg --allow-secret-key-import --import private-key

こちらでも shred --remove などで安全に消しておきます。

trust

trust db は鍵とは別なので、別途 --edit-key の trust で変更します。

gpg --edit-key $keyid

確認

import した鍵を使って、暗号化を解くなどが出来るのを確認します。

感想

本来 secret key は ssh なら環境ごとに鍵ペアを作成して公開鍵しか外に出さない、というのが望ましいのですが、 gnupg の鍵は信頼の輪などの都合もあって、そういうわけにもいかなくて難しいです。

secret key のコピーは目的によって、 .gnupg を全部コピー、鍵束 (keyring) ファイルをコピー、 鍵だけコピーという方法がありそうですが、今回は特定の鍵だけコピーしたかったので、 export して import をしました。

Disqus Comments

Kazuhiro NISHIYAMA

Ruby のコミッターとかやってます。 フルスタックエンジニア(って何?)かもしれません。 About znzに主なアカウントをまとめました。

znz znz


Published