Как импортировать секретный ключ gpg (скопированный с одного компьютера на другой)?

153

Я пытаюсь скопировать мой ключ gpg с одной машины на другую.

Я делаю:

gpg --export ${ID} > public.key
gpg --export-secret-key ${ID} > private.key

Переместите файлы на новый компьютер, а затем:

gpg --import public.key
gpg: nyckel [ID]: public key [Name, e-mail] was imported
gpg: Total number of treated keys: 1
gpg:                 imported: 1  (RSA: 1)

gpg --allow-secret-key-import private.key
sec  [?]/[ID] [Creation date] [Name, e-mail]
ssb  [?]/[SUB-ID] [Creation date]

Все выглядит хорошо для меня, но потом:

$ gpg -d [file].gpg
gpg: encrypted with 4096-bit RSA-key, id [SUB-ID], created [Creation date]
  [Name, e-mail]
gpg: decryption failed: secret key not accessible

Таким образом, в сообщении об ошибке говорится, что файл был зашифрован с помощью [SUB-ID], который, как представляется, импортирует секретный ключ, говорит, что он импортирован. ([SUB-ID] в обоих сообщениях одинаков).

Так что я явно делаю что-то не так, но я не знаю что.

user50849
источник

Ответы:

164

Вам необходимо добавить --importв командную строку, чтобы импортировать закрытый ключ. Вам не нужно использовать --allow-secret-key-importфлаг. Согласно справочной странице: «Это устаревшая опция и нигде не используется».

gpg --import private.key
Celada
источник
Есть ли вероятность, что вы также знаете, почему gpg2 -e -r [ID]говорится: «Нет уверенности, что этот ключ принадлежит указанному пользователю»? Хотелось бы включить его в первоначальный вопрос, но я заметил это только позже.
user50849
1
GnuPG поддерживает базу данных доверия, которую он использует, чтобы решить, насколько доверять каким ключам. Например, больше всего доверяйте своим собственным ключам, ключи, которые не подписаны напрямую или косвенно никакими доверенными ключами. После того, как вы только что импортировали в пустую базу данных, вероятно, никакие ключи вообще не являются доверенными. Эта база данных доверия отделена от базы данных или самих ключей, поэтому импорт ключей не делает их доверенными, если они не подписаны каким-либо уже доверенным ключом. Вы должны указать GnuPG, каким ключам вы хотите доверять отдельно.
Селада,
3
@Celeda, спасибо, с --edit-key и командой trust мне удалось получить ключ как доверенный. Поскольку мой первоначальный вопрос заключался в том, как скопировать ключ с одного компьютера на другой, я думаю, что было бы целесообразно добавить что-то об этом в ваш ответ. Я бы предпочел не редактировать свой ответ сам, и вы, кажется, знаете об этом намного больше меня.
user50849
Я не чувствую, что достаточно хорошо понимаю базу доверия, чтобы говорить об этом в своем ответе. Я рад, что вы смогли решить это, используя смутные подсказки, которые я дал в своем комментарии.
Селада,
Хорошо, я переименовал исходный вопрос, чтобы он более точно соответствовал ответу. Таким образом, я могу задать отдельный вопрос TrustDB. Спасибо за помощь. :)
user50849
81

Выше только частичный ответ. Полный ответ:

gpg --import private.key
  • Учитывая KEYID (например FA0339620046E260) из вывода:

    gpg --edit-key {KEY} trust quit
    # enter 5<RETURN>
    # enter y<RETURN>
    
  • ИЛИ используйте автоматическую команду ниже:

    expect -c "spawn gpg --edit-key {KEY} trust quit; send \"5\ry\r\"; expect eof"
    

Наконец, убедитесь, что ключу доверяют [ultimate]вместо[unknown]

gpg --list-keys
cmcginty
источник
6
Это должен быть принятый ответ. Гораздо более полным.
Бен Линдсей
Что делают эти дополнительные команды?
Steinybot
@Steiny Делает ключ доверенным с [Ultimate] вместо [неизвестно]. gpgtools.tenderapp.com/kb/faq/...
cmcginty
0

Я импортировал из резервной копии, которая имела старую версию gpg. Так как старый компьютер не был доступен, только резервная копия, я не смог экспортировать его первым. Это то, что сработало для меня.

gpg --import old_home_dir/.gnupg/pubring.gpg
gpg --import old_home_dir/.gnupg/secring.gpg

Если вы хотите иметь возможность импортировать секретные ключи без немедленного ввода пароля, используйте эту --batchопцию.

Чтобы проверить открытые ключи:

gpg --list-keys

Чтобы проверить секретные ключи:

gpg --list-secret-keys
Джонатан Тран
источник