如何导出私有/秘密ASC密钥以解密GPG文件


88

背景:我的老板曾尝试向我导出带有公共和私有部分的ASC密钥,但是每当我得到文件时,私有部分就永远不会加载,也不会解密任何文件。

我们尝试使用以下方法导出ASC密钥:

  • Windows应用程序Kleopatra 2.1(包含在gpg4win中)
  • Windows应用程序GNU Privacy Assistant(包含在gpg4win中)

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

您如何正确导出秘密或私有asc密钥来解密gpg文件?

Answers:


185

您可以使用GPG中命令行工具导出私钥。它可以在Windows shell上运行。使用以下命令:

gpg --export-secret-keys

具有的常规导出--export将不包含任何私钥,因此必须使用--export-secret-keys

编辑:

总结我的评论中给出的信息,这是允许您将ID为1234ABCD的特定密钥导出到文件secret.asc的命令:

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

您可以使用以下命令找到所需的ID。ID是第二列的第二部分:

gpg --list-keys

要仅导出一个特定密钥而不是全部密钥:

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

keyIDNumber是您要导出的所需密钥的密钥ID的编号。


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 encryption”对其进行解密。
rockdaboot 2014年

2
从GnuPG导出的密钥保持加密状态(这就是为什么您不需要输入私钥密码短语的原因),因此确实不需要再次对其进行加密。
Ferry Boender '17

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以启用该导入的私钥作为您的密钥之一


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/

其中包括合理安全的密钥传输方式。您可以将该建议放入如下所示的shell脚本中,以供重复使用。

首先从显示的列表中获取所需的KEYID

$ gpg -K

从结果列表中,记下您需要传输的KEYID(秒后的8个十六进制)。

然后在第一个帐户上调用经过测试的shell脚本“ 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 '16

期权--no-use-agent是在GPG版本2.过时
乔希Habdas

9

我认为您尚未导入私钥,如消息错误所述,要从gnupg导入公钥/私钥:

gpg --import mypub_key
gpg --allow-secret-key-import --import myprv_key

我在询问要从可运行的计算机中导出的信息...如果密钥只能在本地服务器上,则只能导入。
Brian McCarthy

@布莱恩·麦卡锡:您想说什么?
SIFE

如果已经导入了私钥,我们真的需要导入公钥吗?据我了解,公钥可以由私钥生成。
farhany

@farhany我认为是的,因为签署消息时将需要它。
SIFE 2013年

6

最终为我工作:

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

您可以使用任何名称来命名keyfilename.asc,只要保持扩展名为.asc即可。
此命令将用户计算机上的所有密钥复制到调用该命令的工作目录中的keyfilename.asc中。

要仅导出一个特定密钥而不是全部密钥:

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

keyIDNumber是您要导出的所需密钥的密钥ID的编号。


1
您可以使用“ --list-keys”列出所有可用的键。第二列将包含ID,例如“ 2048g / 1234ABCD”。找到所需的密钥并使用“ gpg --export-secret-keys 1234ABCD> secret.asc”将其导出,当然用正确的ID更改1234ABCD。您也可以添加“ -a”标志。它以ASCII字符写入输出,以防二进制输出引起麻烦。
Demento

@demento,感谢您的其他反馈...我不希望在答复中添加此内容
Brian McCarthy

2
如果您确实需要asc,则仍需要-a
RichieHH 2014年

然后如何将它们导入另一台计算机?
纳蒂姆

@Natim我想您会exportedKeyFilename.asc转到另一台计算机,然后gpg --allow-secret-key-import --import exportedKeyFilename.asc在目录中处理.asc文件。请参阅:unix.stackexchange.com/questions/184947/...
Brōtsyorfuzthrāx

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.