web-dev-qa-db-ja.com

新しい.gnupgディレクトリ:古い秘密鍵を新しいインストールにインポート

私は自分のOS(Ubuntu 16.04)を再インストールし、古い.gnupgディレクトリに次のものが含まれています。

gpg-agent.conf  
gpg-agent-info-<hostname> 
gpg.conf  
private-keys-v1.d  
pubring.gpg  
secring.gpg  
S.gpg-agent  
trustdb.gpg

古い公開鍵と秘密鍵を新しいgnupgにインポートしたいのですが。 (私は、新しいgnupg2が新しいEC暗号化オプションの一部であるデータベース形式にいくつかの違いがあることを理解しているので、単に.gnupgディレクトリを新しいインストールにコピーしませんでした。)

以下は公開鍵では機能しましたが、秘密鍵では失敗しました。

gpg --export --keyring=~/.gnupg.old/pubring.gpg | gpg --import
gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg | gpg --import

後者はこう答えました:

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0

newシークレットリングを開けないことに注意してください。ファイルにエクスポートしようとすると、同じエラーが発生します。

gpg --export-secret-keys --keyring=~/.gnupg.old/secring.gpg > secret.asc

gpg: can't open `~/.gnupg/secring.gpg'  <== New Secret Keyring
gpg: WARNING: nothing exported

私の秘密鍵にはマスター鍵の秘密部分が取り除かれているため、--export-secret-subkeysを使用して同じことを試しましたが、応答は同じでした。エクスポート後にキーID(電子メールアドレス)を入力しても機能しません。一方、キーをリストすることができます:

gpg --list-keys --keyring=~/.gnupg.old/secring.gpg

gpg: Oops; key lost!
node 0x1e7ee00 01/00 type=secret-key
node 0x1e9cbd0 00/00 type=user-id  "Me <[email protected]>" ....
node 0x1e99dd0 00/00 type=signature  class=13 keyid=XXXXXXXX ts=1383637282
node 0x1e9c510 00/00 type=secret-subkey
node 0x1eaa210 00/00 type=signature  class=18 keyid=XXXXXXXX ts=1449138073
node 0x1eaf1f0 00/00 type=secret-subkey
node 0x1eaf580 00/00 type=signature  class=18 keyid=XXXXXXXX ts=138363647

(「キーロスト」とは、取り除かれた秘密のマスターキーを指します。)これを解決する方法を誰かに教えてもらえますか?

@Jens(以下)の助けを借りて、次のように動作します。

gpg --no-default-keyring --secret-keyring=~/.gnupg.old/secring.gpg --export-secret-keys | gpg --import
9
Diagon

まず第一に、あなたは一種の「ノーオペレーション」をしている。 gpgはUbuntu 16.04でもGnuPG 1.4.20ですが、gpg2はGnuPG 2.0.28から2.1.11に移行しました。次に、GnuPG 2.1がファイル形式(新しいキーストア形式 "keybox"/.kbxおよび公開鍵リングをマージすること)にいくつかの変更を加えましたが、それでも互換性があり、最初の呼び出し時に秘密鍵リングをマージします/ gpg2手動で変換する でない限り、キーリング形式は古い形式のままです。古い形式は完全にサポートされており、新しい形式ではパフォーマンスが向上します。新しいキーボックス形式への移行パスの提案は、完全に新しいディレクトリに移動するのではなく、古いGnuPGディレクトリをwithinに変換することです。

既存のpubring.gpgファイルをキーボックス形式に変換するには、最初にownertrust値をバックアップしてから、ファイルの名前を(たとえば)publickeysに変更します。これにより、どのGnuPGバージョンでも認識されなくなり、インポートを実行して、最後に復元しますownertrust値:

$ cd ~/.gnupg
$ gpg --export-ownertrust >otrust.lst
$ mv pubring.gpg publickeys
$ gpg2 --import-options import-local-sigs --import publickeys
$ gpg2 --import-ownertrust otrust.lst

その後、古いGnuPGバージョンで使用できるように、公開鍵ファイルの名前を元に戻すことができます。この場合、公開鍵の2つの独立したコピーがあることに注意してください。 ownertrustの値は、すべてのgpgバージョンによってファイルtrustdb.gpgに保持されますが、インポート時にそれらを保持するには、上記の予防策を講じる必要があります。

投稿したエラーメッセージを考慮して、新しい~/.gnupgホームディレクトリまたは秘密鍵リング~/.gnupg/secring.gpgの一部の権限は、鍵を作成するには不十分であるようです。これは、GnuPGが誤ってrootユーザーから呼び出された場合によく発生します。

--list-keysからのメッセージは通常の出力ではありませんが、エラーメッセージのようです。任意のキーリングを出力するには、--no-default-keyringおよび--secret-keyringオプションと--list-secret-keysコマンドを使用します(通常、常にGnuPGのコマンドの前にオプションがあります)。

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
7
Jens Erat