Как экспортировать частный / секретный ключ ASC для расшифровки файлов GPG

88

Предыстория: мой босс пытался экспортировать мне ключ ASC с публичной и частной частями, но всякий раз, когда я получаю файл, частная часть никогда не загружается и не расшифровывает никакие файлы.

Мы пробовали экспортировать ключ ASC, используя:

  • Приложение Windows Kleopatra 2.1 (входит в состав gpg4win)
  • Приложение Windows GNU Privacy Assistant (входит в состав gpg4win)

            Error: "Decryption failed. Secret Key Not available." 
    

Как правильно экспортировать секретный или закрытый asc-ключ для расшифровки файлов gpg?

Брайан Маккарти
источник

Ответы:

185

Вы можете экспортировать закрытый ключ с помощью инструмента командной строки из GPG . Работает под Windows-оболочкой. Используйте следующую команду:

gpg --export-secret-keys

Обычный экспорт с --exportзакрытыми ключами не будет, поэтому вы должны использовать --export-secret-keys.

Редактировать:

Подводя итог информации, приведенной в моих комментариях, это команда, которая позволяет вам экспортировать определенный ключ с ID 1234ABCD в файл secret.asc:

gpg --export-secret-keys --armor 1234ABCD > secret.asc

Вы можете найти нужный идентификатор, используя следующую команду. ID - это вторая часть второго столбца:

gpg --list-keys

Чтобы экспортировать только один конкретный секретный ключ вместо всех:

gpg --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber - это номер идентификатора ключа для желаемого ключа, который вы пытаетесь экспортировать.

Дементо
источник
4
@Brian: Это сбросит ключ в консоль. Если вы хотите сохранить его в файле, вы можете перенаправить вывод на произвольное имя файла («gpg --export-secret-keys> secret.asc»).
Demento
5
@Brian: Это дает вам вывод в ASCII, а не в двоичном формате. Если вы сохраните его в файле, это не имеет значения. Но как только вы захотите передать его любым другим способом, с версией ASCII будет намного проще работать (например, отправив ее в электронном письме)
Demento
8
Может быть, вы хотите перенести свой секретный ключ в другое место. В этом случае вы должны зашифровать экспортированные данные: «gpg --export-secret-keys keyIDNumber | gpg -c> encrypted», расшифровать их с помощью «gpg -o unencrypted encrypted».
rockdaboot
3
Ключи, экспортированные из GnuPG, остаются зашифрованными (поэтому вам не нужно вводить парольную фразу для закрытого ключа), поэтому нет необходимости снова зашифровывать их.
Ферри Боендер,
1
@FerryBoender Вы в этом уверены ?
Джош Хабдас
32

Все приведенные выше ответы верны, но может быть пропущен один важный шаг, вам нужно отредактировать импортированный ключ и "полностью доверять" этому ключу.

gpg --edit-key (keyIDNumber)
gpg> trust

Please decide how far you trust this user to correctly verify other users' keys
(by looking at passports, checking fingerprints from different sources, etc.)

  1 = I don't know or won't say
  2 = I do NOT trust
  3 = I trust marginally
  4 = I trust fully
  5 = I trust ultimately
  m = back to the main menu

и выберите 5, чтобы включить этот импортированный закрытый ключ в качестве одного из ваших ключей

Higuita
источник
18

Смотрите лечение Темной Выдры

https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

Если сайт не работает, используйте ссылку на резервную копию archive.org:

https://web.archive.org/web/20170518155052/https://montemazuma.wordpress.com/2010/03/01/moving-a-gpg-key-privately/

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

Сначала получите нужный KEYID из списка, показанного

$ gpg -K

Из полученного списка обратите внимание на KEYID (8 шестнадцатеричных чисел после секунды), необходимый для передачи.

Затем активируйте проверенные сценарии оболочки «export_private_key» в первой учетной записи и сгенерируйте свой pubkey.gpg + keys.asc. Впоследствии вызовите на второй учетной записи «import_private_key». Вот их содержимое, показанное с помощью cat (скопируйте и вставьте содержимое):

$ cat export_private_key 
gpg -K
echo "select private key"
read KEYID
gpg --output pubkey.gpg --export $KEYID
echo REMEMBER THE COMING PASS-PHRASE
gpg --output - --export-secret-key $KEYID | \
   cat pubkey.gpg - | \
   gpg --armor --output keys.asc --symmetric --cipher-algo AES256
ls -l pubkey.gpg keys.asc
####################  E X P O R T _ P R I V A T E _ K E Y  #####################

Теперь перенесите каким-либо образом "pubkey.gpg" (если необходимо) и закрытый "keys.asc" на вторую учетную запись и активируйте показанную ниже программу.

$ cat import_private_key 
gpg --no-use-agent --output - keys.asc | gpg --import
###################  I M P O R T _ P R I V A T E _ K E Y  ######################

В духе Выдры «А то, должно быть, то».

Вольфрам Дж.
источник
Благодарим вас за сценарий, включающий открытый и закрытый ключи в один файл, защищенный парольной фразой. Делает мою жизнь намного лучше!
codekoala
Опция --no-use-agentустарела в gpg версии 2.
Джош Хабдас
9

Я думаю, что вы еще не импортировали закрытый ключ, как говорилось в сообщении об ошибке. Чтобы импортировать открытый / закрытый ключ из gnupg:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key
SIFE
источник
я спрашивал об экспорте с компьютера, который работает ... вы можете импортировать ключ, только если он находится на локальном сервере.
Брайан МакКарти,
@ Брайан Маккарти: Что ты хочешь сказать?
SIFE
Действительно ли нам нужно импортировать открытый ключ, если частный уже импортирован? Насколько я понимаю, публичный ключ можно сгенерировать из приватного чего угодно.
farhany
@farhany Думаю, да, потому что он вам понадобится, когда вы подпишете свое сообщение.
SIFE
6

это сработало для меня:

   gpg -a --export-secret-keys > exportedKeyFilename.asc 

вы можете назвать keyfilename.asc любым именем, если вы сохраняете расширение .asc.
эта команда копирует все секретные ключи на компьютере пользователя в файл keyfilename.asc в рабочем каталоге, в котором была вызвана команда.

Чтобы экспортировать только один конкретный секретный ключ вместо всех:

   gpg -a --export-secret-keys keyIDNumber > exportedKeyFilename.asc

keyIDNumber - это номер идентификатора ключа для желаемого ключа, который вы пытаетесь экспортировать.

Брайан Маккарти
источник
1
Вы можете перечислить все доступные ключи с помощью «--list-keys». Второй столбец будет содержать идентификаторы типа «2048g / 1234ABCD». Найдите нужный ключ и экспортируйте его с помощью "gpg --export-secret-keys 1234ABCD> secret.asc", конечно же, изменив 1234ABCD на правильный ID. Вы также можете добавить флаг «-a». Он записывает вывод с помощью символов ASCII на тот случай, если двоичный вывод вызывает проблемы.
Demento
@demento, спасибо за дополнительный отзыв ... я добавлю это к ответу
Брайан Маккарти,
2
вам все еще нужен -a, если вы действительно хотите asc
RichieHH
Как потом импортировать их на другой компьютер?
Натим
@Natim Я предполагаю, что вы перейдете exportedKeyFilename.ascна другой компьютер, а затем перейдете gpg --allow-secret-key-import --import exportedKeyFilename.ascв каталог с .ascфайлом. См .: unix.stackexchange.com/questions/184947/…
Brōtsyorfuzthrāx 02
5

Подобно ответу @Wolfram J, вот способ шифрования вашего закрытого ключа с помощью парольной фразы :

gpg --output - --armor --export $KEYID | \
    gpg --output private_key.asc --armor --symmetric --cipher-algo AES256

И соответствующий метод расшифровки:

gpg private_key.asc
Матин Улхак
источник
5

1. экспортируйте секретный ключ (это то, что ваш босс должен был сделать за вас)

gpg --export-secret-keys yourKeyName > privateKey.asc

2.Импортируйте секретный ключ (импортируйте свой приватный ключ)

gpg --import privateKey.asc

3. Еще не сделано, вам все равно нужно полностью доверять ключу. Вам нужно будет убедиться, что вы в конечном итоге доверяете ключу.

gpg --edit-key yourKeyName

Введите trust, 5, y, а затем выйдите

Источник: https://medium.com/@GalarnykMichael/public-key-asymmetric-cryptography-using-gpg-5a8d914c9bca

Майкл Джеймс Кали Галарник
источник