我应该为加密所需的密钥提供什么信任级别?

信息安全 pgp 文件加密 备份
2021-09-10 23:11:38

当我加密服务器备份时,我通常将我的公共 GPG 密钥从密钥服务器安装到我服务器的密钥环中:

gpg --search-keys 6569758F

我将密钥导入我的密钥环。

然后我尝试加密文件:

gpg --encrypt --recipient 6569758F myfile.log

我现在看到这样的东西:

gpg: EE928AAF: There is no assurance this key belongs to the named user

pub  4096R/EE928AAF 2013-12-05 Naftuli Tzvi Kay <rfkrocktk@gmail.com>
 Primary key fingerprint: 0E26 BDF1 BD1C 4A16 9571  21A8 8938 1D75 6569 758F
      Subkey fingerprint: 65F4 87F2 C898 F0E7 0377  EBA1 8484 EC48 EE92 8AAF

It is NOT certain that the key belongs to the person named
in the user ID.  If you *really* know what you are doing,
you may answer the next question with yes.

Use this key anyway? (y/N) 

我现在需要“信任”密钥。但是,我发现除非我“最终”信任密钥,即:级别 5,否则每次我需要加密某些内容时都会收到此提示,这对于 shell 脚本来说效果不太好。

我真的需要最终信任一个密钥来简单地用它加密文件吗?

2个回答

帖子的标题和您提出的实际问题不太匹配。如果我没看错,您是在问如何最好地使用您自己的公共 PGP 密钥来加密备份。另一方面,问题的标题是为加密密钥分配信任级别。在我看来,您正在使用自己的密钥进行加密,因此为其分配信任级别并不是您想要的。恕我直言,您为备份问题使用了错误的 GPG“信任模型”。

您可以通过更改您正在执行的命令的“信任模型”来显式绕过 GPG 中的所有密钥验证。默认情况下,使用“PGP”信任模型,这就是 GPG 希望您明确将密钥标记为受信任的原因。或者,您可以告诉 GPG 使用“始终”信任模型,这将绕过您看到的消息:

--trust-model always

我认为这会让你得到你所追求的行为。但请记住,您的脚本正在从您无法控制的远程主机下载密钥,因此您无法真正保证它是您期望的密钥(密钥服务器妥协)。如果您只希望使用一个密钥来加密您的备份,那么只需将公钥嵌入您的脚本中(它不敏感)并将密钥服务器完全从架构中删除就足够了。这将消除对密钥服务器的所有依赖并简化备份解决方案中的信任关系。

只是一个。希望这可以帮助。

根据要求,这是一个示例。假设我想在我管理的系统上收集备份数据。我只希望自己可以恢复此备份数据。为此,我希望脚本中收集的所有数据都使用我的公共 PGP 密钥进行加密。我还假设进行备份的用户帐户不用于备份以外的任何内容,因此 ~/.gnupg 目录中没有任何重要内容,我可以删除它而不必担心丢失密钥。

在玩这个之前总是备份你的 .gnupg 目录!

以下是一个简单的 bash 脚本,它将使用嵌入在脚本中的公钥加密一些文本:

#!/bin/bash -e                                                                 

gpg --trust-model always --import <<EOF
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.12 (GNU/Linux)

xxxxxx
...
...
-----END PGP PUBLIC KEY BLOCK-----
EOF

echo "backup data" | gpg --trust-model always --armor  --encrypt --recipient guest@example.org > backup-data.enc

此脚本中的“魔术”是使用 shell ' Here Document '(请参阅 EOF 标记)将我的公钥嵌入脚本中,同时通过标准输入将其传递给 gpg 以在执行加密/备份任务之前导入我的密钥。当然,在我的示例中,您必须将所有 ASCII 铠装公钥替换为 '...'。还要确保将“guest@example.org”替换为与您的公钥关联的 ID。通常这是您的电子邮件。

有一百万种方法可以清理这个示例并使其更有用。在每次运行时导入公钥有点荒谬,所以检查密钥是否已经在环中是我开始的地方:)

祝你好运!

当您对一把钥匙给予最终信任时,您就是在将其定义为您自己的钥匙。

信任使得在计算其他密钥的有效性时可以考虑一个有效的密钥。为了有效,您需要有一个到该密钥的信任路径,这是通过对其进行签名来实现的(或者具有从密钥到密钥的签名路径,所有这些都是受信任的)。

这在开始时相当令人困惑,尤其是因为这些术语似乎混淆了。我在这个答案中更详细地解释了信任网络。

如果您知道密钥所有者是谁并检查了这一点,您可以对密钥进行签名(甚至可以将其发送到密钥服务器)。如果您不太确定,您可以使用自己的密钥执行本地签名(永远不会上传/导出)。两者都将确保密钥有效,您无需信任它!