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


9

私は自分の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

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

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 <Me@home.com>" ....
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

回答:


7

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

既存の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

さて、あなたはそれを所有権の問題に釘付けにしました。新しいsecring.gpgはrootが所有していました。また、使用--no-default-keyringして--secret-keyring前にすることは--list-secret-keys認識出力を生成します。だから、今持っているものを見てみましょう。
ディアゴン2016年

動作します!アップグレード情報をありがとう。非常に役立ちます。
ダイアゴン2016年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.