この記事(アーカイブされたリンク)を読みました。この記事では、macOS で PGP をセットアップする方法が非常によく説明されています。しかし、Git コミットに署名するために生成されたキーを使用する予定であるため、キーを他のコンピューターに転送する必要があると考えています。これは正しいです?もしそうなら、それらのキーをデバイス間で転送する最良の方法は何ですか?
1 に答える
はい、キーを転送する必要があります。Mac と Linux は同じように機能し、キーは に保存され~/.gnupg
ます。ファイルを転送する最も安全な方法は、scp
(ssh の一部)を使用することです。
scp -rp ~/.gnupg othermachine:
ssh
ただし、最初に作業する必要があります。
ファイルを削除した後でも秘密鍵がそのドライブに残るため、たとえば USB フラッシュ ドライブを使用してそれらを転送するのはあまり良い考えではありません。パスフレーズで保護されていますが、誰かがキー ファイルのコピーを手に入れた場合、余暇に長期にわたるブルート フォース攻撃を仕掛けることができます。
Windows のディレクトリの場所がわかりません。gpg のドキュメントには記載されており、内容はほぼ確実に同じです。
キーリング全体をコピーするのはすばやく簡単ですが、キーリング全体を上書きして既存のキーを失うことなく、マシン間で個々のキーを移動できるようにしたい場合があります。個々のキーを選択的にコピーするには、gpg --export-secret-key
と を使用しgpg --import
ます。宛先マシンに ssh アクセスできる場合は、パイプを使用してこれを行うことができ、中間キーをどこにも保存する必要はありません。
すでにキーを持っているマシンを使用している場合:
gpg --export-secret-key SOMEKEYID | ssh othermachine gpg --import
キーが必要なマシンを使用している場合:
ssh othermachine gpg --export-secret-key SOMEKEYID | gpg --import
gpg
がリモート マシンの既定の場所にない場合(たとえば/opt/local/bin
、Mac にある場合)、ssh へのフル パスを指定するか、/usr/local/bin
.
転送されたデータは引き続きパスフレーズによって保護されており、転送先でも転送元と同じパスフレーズがキーに含まれることに注意してください。場所ごとに異なるパスフレーズを使用する場合は、エクスポート先でパスフレーズを変更するか、エクスポートする前に一時的にソースでパスフレーズを変更する必要があります。同僚が管理する Debian パッケージ リポジトリを更新できるようにするために、同僚と秘密鍵を共有する必要がありましたが、私のパスフレーズを彼と共有したくありませんでした。そこで、パスフレーズを一時的なものに変更し、エクスポートされたキーを (gpg 暗号化された電子メールで!) 送信し、一時的なパスフレーズを口頭で伝え、キーをインポートした直後に新しいパスフレーズを設定するように依頼しました。次に、キーのコピーのパスフレーズを元の状態に戻しました。
2021-03-03 更新
GnuPG 2.0 では、リモート マシンからキーをエクスポートしていて、X11 接続転送を使用していない場合、パスフレーズの入力に問題が発生する可能性があります。たとえば、gpg
「'/dev/tty' を開けません」と表示されます。キーを使用して疑似端末の割り当てを強制すると、パスフレーズ プロンプトやsssh -t
などの端末アクティビティと混同されます。\r
これを回避する 1 つの方法は次のとおりです。
ssh othermachine gpg --passphrase-fd 0 --pinentry-mode loopback ...
次に、パスフレーズを入力して Enter を押す必要があります。プロンプトは表示されず、エコーは抑制されません (したがって、パスフレーズは端末に表示されます)。反響が気になる場合は、 で一時的に消音し、stty -echo
で再度鳴らすことができますstty echo
。これはすべて、次のように 1 つのコマンドにまとめることができます。
stty -echo; \
ssh othermachine gpg --passphrase-fd 0 --pinentry-mode loopback \
--export-secret-key SOMEKEYID | gpg --import; \
stty echo
ただし、これが必要になることはめったにありません。最も一般的なケースは、座っているマシンからエクスポートし、ssh 先のリモート マシンにインポートする場合です。