8

Я переустановил свою ОС (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. (Я не просто скопировал каталог .gnupg в новую установку, потому что я понимаю, что новый gnupg2 имеет некоторые различия в формате базы данных, которые являются частью новых параметров шифрования EC.)

Следующее работает для открытых ключей, но не для секретных ключей:

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 , но ответ был таким же. Установка идентификатора ключа (адреса электронной почты) после экспорта также не работает. С другой стороны, я могу перечислить ключи:

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

1 ответ1

7

Прежде всего, вы делаете что-то вроде "без операции". gpg по-прежнему GnuPG 1.4.20 в Ubuntu 16.04, в то время как gpg2 совершил переход с GnuPG 2.0.28 на 2.1.11. Затем, хотя GnuPG 2.1 внесла некоторые изменения в форматы файлов (новый формат хранилища ключей "keybox"/.kbx и объединение секретного набора ключей в общедоступный), он все еще совместим и будет выполнять слияние секретного набора ключей при первом вызове gpg2 . Формат кольца ключей остается прежним, если вы не конвертируете его вручную . Старый формат полностью поддерживается, новый формат просто предлагает улучшения производительности. Предложенный путь перехода к новому формату keybox преобразуется в старом каталоге GnuPG, а не в совершенно новый:

Чтобы преобразовать существующий файл pubring.gpg в формат keybox, сначала создайте резервную копию значений доверия владельца, затем переименуйте файл (например, в publickeys), чтобы он не распознавался какой-либо версией GnuPG, затем запустите импорт и, наконец, восстановите Ценность владельца

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

Затем вы можете переименовать файл publickeys обратно, чтобы он мог использоваться более старыми версиями GnuPG. Помните, что в этом случае у вас есть две независимые копии открытых ключей. Значения доверия владельцев сохраняются всеми версиями gpg в файле trustdb.gpg, но для сохранения их при импорте необходимо принять вышеуказанные меры предосторожности.

Учитывая опубликованное вами сообщение об ошибке, кажется, что для создания ключа недостаточно разрешений для нового домашнего каталога ~/.gnupg или секретного набора ключей ~/.gnupg/secring.gpg . Это часто происходит, если GnuPG был вызван пользователем root случайно.

Сообщение от --list-keys не является нормальным выводом, но кажется сообщением об ошибке. Чтобы напечатать произвольный набор ключей, используйте параметры --no-default-keyring и --secret-keyring и --list-secret-keys commdn (и обычно всегда имеют параметры, предшествующие командам для GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .