如何使用 gpg 加密、签名和解密文件?

信息安全 linux gnupg
2021-08-15 07:01:46

gpg用来加密和解密文件。以下是我从这个问题中参考的步骤:

# Sender
gpg --encrypt --recipient recipient@gmail.com --output confidential.pgp confidential.txt
gpg -–sign –-local-user sender@gmail.com --output signed.pgp confidential.pgp

# Recipient
gpg --decrypt –output confidential.pgp signed.pgp 
gpg --decrypt –output confidential.txt confidential.gpg

它有效,但是如果必须在接收端强制进行签名验证,这是加密、签名和解密文件正确方法吗?特别是,解密两次似乎有点奇怪。可以这样在做指令?

我尝试--sign直接在加密命令中使用,但它只是警告和解密不满足强制签名要求的文件。这是官方手册,但它并没有谈到一步完成所有事情。

# Sender
gpg -–sign –-local-user sender@gmail.com --encrypt --recipient recipient@gmail.com --output signed.pgp confidential.txt

# Recipient
gpg --decrypt –output confidential.txt signed.pgp

更新 1

经过一番研究,我发现了一个非常相关的问题,似乎表明gnupg --sign --encrypt先有迹象,然后encrypts是文件。因此decrypt无论如何我们都必须查看文档。它可以选择输出状态,使用--status-fd它可以使用简单的脚本检查签名是否正常。所以代码看起来像:

# Sender
gpg -–sign –-local-user sender@gmail.com --encrypt --recipient recipient@gmail.com --output signed.pgp confidential.txt

# Recipient
gpg --decrypt --status-fd –output confidential.txt signed.pgp | verify

其中verify是检查状态寄存器并在需要时中止的 shell 脚本。

1个回答

您正在尝试使用技术来解决人员问题

这通常不是一个好主意。

让我更深入地解释一下。您(发件人)生成一条消息,然后对其进行加密,然后对加密的消息进行签名。这类似于写一封信,把它放进一个盒子里,锁上盒子,然后在盒子上签名。

您希望消息的收件人验证您的签名,然后对其进行解密并阅读您的消息。这类似于他们寻找签名,验证它是否正确,然后打开盒子然后阅读信件。

这两种情况下的问题是你无法控制其他人的行为方式。他们可能很懒惰,总是打开他们找到的任何盒子,就像他们可以解密他们找到的任何东西而不检查是谁发送的一样。

人的问题...

之前,我说过这是一个“人的问题”。我的意思是您希望收件人验证签名,以便他们不信任他们不应该信任的东西。有些人就是不在乎,而且很难解决这个问题。“让某人关心”是非常困难的,人类心理也没有真正的帮助。

例如,当用户做某事时,他们这样做是出于特定原因。如果计算机问他们“你真的想这样做吗?” 然后,他们只需单击他们需要单击的任何按钮即可使该消息消失。许多安全警告都是如此,不幸的是,在技术方面您无能为力。

...需要一个人的解决方案。

但是你能做的就是教育用户。向他们解释什么是签名,为什么它很重要以及为什么他们应该关心。如果你让他们关心的理由是因为它是强制性的,正如你所说,那么这应该是一个足够好的理由。

想象一下你的老板今天会进来说“看,如果有警告而你忽略它,你可能会被解雇”,那么我有很大的动机不点击那个警告。这是一个以人为本的解决方案,即使它是负面强化。

以可用性为代价的安全是以安全为代价的

一个比我聪明得多,但我不记得名字的人曾经说过。出于所有意图和目的,这是真的。您想使用签名来提高安全性,这对您的用户来说应该是无忧无虑的。签名应该自动验证,用户甚至不必考虑它。

如果你告诉用户“Commandfoo做了你需要做的事情。Commandbar需要在之前运行foo,它做了一些你不关心的事情”,猜猜有多少用户会实际运行bar,然后foo几乎没有。

相反,部署一个自动运行的脚本bar,检查签名是否有效,然后运行foo