在导出 PGP 公钥和私钥时,是否有一个通用的最佳实践来命名它们?

信息安全 gnupg
2021-09-04 21:25:33

在导出或以其他方式将它们存储为文件时,是否有命名导出的公共和私有 GPG 密钥的通用最佳实践?

我知道 GnuPG 并不关心导入它们时的名称。但是,必须有一些用于导出的命名约定。这种事情总是有的。我自己在这里或通过谷歌都找不到明确的答案。

我想可能没有命名私钥的常见最佳实践。在服务器环境中,私钥很少被导出。但是对于个人通信加密,需要备份私钥,并可能将其导入新计算机。因此,必须导出。理论上,您是唯一会看到私钥文件并知道它是什么的人,因此不需要“最佳实践”命名约定。但是必须共享公钥文件,因此应该有一些常见的最佳实践。

假设我刚刚创建了一个新的密钥对:Bruce Wayne <bruce@wayneenterprises.com>

然后我将私钥和公钥导出为 ASCII 保护文件——私钥存储在安全的地方以供备份,公钥与人们共享。

我应该给这些文件起什么名字?我应该使用什么扩展?

一般...
public.key
private.key

使用 UID “真实姓名”...
brucewayne-
public.asc brucewayne-private.asc

使用 UID 电子邮件地址...
bruce@wayneenterprises.com.public
bruce@wayneenterprises.com.private

生成密钥时,会显示一个八(十六进制)字符 ID。我已经看到一个公钥使用它作为文件名。

~ # gpg --list-keys
/root/.gnupg/pubring.kbx
------------------------
pub   rsa2048/1234ABCD 2016-08-20 [SC]
uid         [ultimate] Bruce Wayne <bruce@wayneenterprises.com>
sub   rsa2048/5678EABC 2016-08-20 [E]

如果有任何常见的最佳实践,请告诉我。并且,如果可能,请向我指出使用它的任何文档或手册。

1个回答

虽然显然很难证明是否定的,但我认为您没有发现这样的“常见最佳实践”的原因是不存在。

密钥本身并不关心它的文件名。更重要的是,有一些方法可以处理根本不涉及文件系统上任何文件的导出密钥!考虑一些相对琐碎的事情,例如gpg --export 0xDEADBEEF | ssh me@remote-server.example.com gpg --import.

但是,您应该命名导出的密钥文件,以便您对它包含的密钥有所了解,因为导出的文件本身(具有讽刺意味的是,如果文件是 ASCII 铠装的,则更是如此)不会将该信息保存在一种易于阅读的格式,除非您自己对其进行编辑(例如,在Comment:ASCII 装甲数据 blob 的字段中)。

对于发布,十六进制密钥 ID 通常是一个很好的起点,因为它相当独特,特别是如果您使用完整的 64 位密钥 ID甚至指纹(实际上,但不是理论上,保证是唯一的)。

对于个人存储,或者例如将公钥通过电子邮件发送给通讯员,您通常希望能够自己区分密钥,但并不真正关心全局唯一性。因此,确定您的关键的东西可能是一个很好的起点;因此,您可能会首先查看相关信息,例如相关名称、相关电子邮件地址、生成或到期日期或类似的信息。例如,如果您每 18 个月生成一次新密钥,则生成日期可能是包含在文件名中的合理信息,因为它会告诉您密钥的年表以及您可能期望用于的时间特定的消息。

我已经看到了各种命名约定来区分密钥的私有部分和公共部分,但最重要的是,只要您可以毫无歧义地分辨出哪个文件是哪个文件,这实际上并不重要. 如果您想在文件扩展名之前附加-privateand -public,或者如果您想命名一个.asc和另一个.private,或者您喜欢的任何方案,那么根本不重要:只需选择一个让您清楚哪个文件是哪个文件.