私は自分の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
まず第一に、あなたは一種の「ノーオペレーション」をしている。 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