Новый каталог .gnupg: импортировать старые секретные ключи в новую установку

9

Я переустановил свою ОС (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
Косой
источник

Ответы:

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 в формат ключа, вы сначала создаете резервные копии значений доверия владельца, затем переименовываете файл (например, в 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-keyscommdn (и вообще всегда есть варианты перед командами для GnuPG):

gpg --no-default-keyring --secret-keyring=secring.gpg --list-secret-keys
Йенс Эрат
источник
Хорошо, вы прибили это по вопросу владения. Мой новый secring.gpg принадлежал пользователю root. Кроме того, использование --no-default-keyringи --secret-keyringперед --list-secret-keysпроизводит узнаваемый вывод. Итак, давайте посмотрим, что у меня сейчас.
Диагон
Работает! И спасибо за информацию об обновлении. Очень полезно.
Диагон