如何使用 GPG 对信息进行加密和签名

介绍

GPG,或GNU隐私保护程序,是一个公共密钥加密的实现,它允许安全的信息传输,可以用来验证消息的来源是真实的。

我们将使用 Ubuntu 16.04 服务器进行此演示,但也将包括其他发行版的说明。

公钥加密如何运作

许多用户面临的问题是如何安全地通信并验证他们正在谈话的方的身份. 许多试图回答这个问题的方案需要,至少在某个时刻,通过不安全的媒体传输密码或其他识别凭证。

确保只有意图的参与者才能阅读

为了绕过这个问题,GPG依赖于一个被称为公钥加密的安全概念。 这个想法是,你可以将传输的加密和解密阶段分为两个单独的部分。

这将允许一个单向的消息传输,任何人都可以创建和加密,但只有指定用户(具有私钥的用户)才能解密。

因此,在这种情况下,每个方都有自己的私钥和另一个用户的公共密钥。

验证发送者的身份

该系统的另一个好处是,消息的发送者可以用其私钥签名消息,接收者拥有的公共密钥可以用来验证签名实际上是由指定的用户发送的。

设置 GPG 密钥

GPG 默认安装在大多数发行版中。

如果由于任何原因,GPG没有安装,在Ubuntu和Debian上,您可以通过键入更新本地复制索引并安装它:

1sudo apt-get update
2sudo apt-get install gnupg

CentOS上,您可以通过键入以下方式安装 GPG:

1sudo yum install gnupg2

要开始使用 GPG 来加密您的通信,您需要创建一个密钥对。

1gpg --gen-key

这将带你通过几个问题,将配置你的密钥:

  • 请选择您想要的密钥类型: (1) RSA 和 RSA (默认)
  • 您想要的密钥大小是什么? 4096
  • 密钥是否有效? 1y (在 1 年后到期. 如果您刚刚测试,您可能希望第一次使用像3这样的数字创建短寿命密钥)
  • 这是正确的吗? y
  • 真实姓名: 您的真实姓名在这里
  • 电子邮件地址: [email protected]
  • 评论: ** 可选评论将在您的签名中可见 _**
  • 更改(名称,(Comment

在这一点上,gpg将使用产生密钥。 Entropy 描述了系统中存在的不可预测性和不确定性的数量。

这个过程可能需要很长时间,这取决于你的系统是多么活跃和你选择的键大小。 为了更容易地生成额外的,你可以使用一个名为haveged的工具(https://www.digitalocean.com/community/articles/how-to-setup-additional-entropy-for-cloud-servers-using-haveged)。

创建撤销证书

你需要有一种方法来取消你的密钥对,如果有一个安全漏洞,或者如果你失去了你的秘密密钥。

要做到这一点,即便你创建了密钥对,而不是当你需要它时。这个撤销密钥必须提前生成并保存在一个安全、独立的位置,如果你的计算机受到损害或无法操作。

1gpg --output ~/revocation.crt --gen-revoke [email protected]

您将被要求确认撤销密钥的创建,然后被提示理由是因为它正在被撤销. 如果撤销在未来被使用,此信息将被其他用户看到。您可以选择任何可用的选项,但由于这正在提前完成,您将没有具体信息。

在创建撤销证书之前,您将需要输入您的 GPG 密钥的密码,以确认您的身份。

1[secondary_label Output]
2Revocation certificate created.
3
4Please move it to a medium which you can hide away; if Mallory gets
5access to this certificate he can use it to make your key unusable.
6It is smart to print this certificate and store it away, just in case
7your media become unreadable. But have some caution:  The print system of
8your machine might store the data and make it available to others!

您应立即限制生成的证书文件的权限,以防止未经授权的访问:

1chmod 600 ~/revocation.crt

撤销证书必须保持安全,以便其他用户无法撤销您的密钥. 正如消息所述,您应该考虑将该证书备份到其他机器并打印出来,只要您可以正确地保护它。

如何导入其他用户的公共密钥

如果你不能接受你想要沟通的人的其他公共密钥,GPG将是相当无用的。

您可以以多种方式导入某人的公共密钥. 如果您在文本文件中从某人获取了公共密钥,GPG 可以使用以下命令导入它:

1gpg --import name_of_pub_key_file

也有可能,你想要沟通的人已将他们的密钥上传到公共密钥服务器,这些密钥服务器被用来存储来自世界各地的人的公共密钥。

同步其信息与各种其他服务器的流行的密钥服务器是MIT公共密钥服务器. 您可以通过在您的网页浏览器中在这里搜索用户的名称或电子邮件地址:

1https://pgp.mit.edu/

您也可以通过键入以下方式从 GPG 内部搜索关键服务器:

1gpg --keyserver pgp.mit.edu  --search-keys search_parameters

您可以使用此方法以姓名或电子邮件地址搜索,您可以按照提示导入您找到的密钥。

如何验证和签署密钥

虽然您可以自由地分发生成的公共密钥文件,人们可以使用这种方式以安全的方式与您联系,但重要的是能够信任该密钥属于您认为它在最初的公共密钥传输过程中是谁。

验证对方的身份

你怎么知道给你的公钥的人是谁?在某些情况下,这可能是简单的。你可能会坐在你笔记本电脑打开和交换密钥的人旁边。

但是还有许多其他情况,这种个人接触是不可能的. 您可能不会亲自认识对方,或者您可能因物理距离而分离。

幸运的是,而不是验证双方的所有公共密钥,您可以简单地比较这些密钥所产生的指纹,这将为您提供合理的保证,即您都使用相同的公共密钥信息。

您可以通过键入公共密钥的指纹:

1gpg --fingerprint [email protected]
1[secondary_label Output]
2pub 4096R/311B1F84 2013-10-04
3      Key fingerprint = CB9E C70F 2421 AF06 7D72 F980 8287 6A15 311B 1F84
4uid Test User <[email protected]>
5sub 4096R/8822A56A 2013-10-04

这将产生一个更易于管理的数字字符串来比较,您可以将这个字符串与该人本身或其他人进行比较,并且可以访问该人。

标记他们的钥匙

签署密钥告诉您的软件,您信任已提供给您的密钥,并且您已验证它与该人相关联。

要签署您已导入的密钥,只需输入:

1gpg --sign-key [email protected]

当你签署密钥时,这意味着你确认你信任的人是他们声称的人,这可以帮助其他人决定是否信任这个人,如果有人信任你,他们看到你签署了这个人的密钥,他们可能更有可能信任他们的身份。

您应该允许您正在签名的密钥的人通过将签名的密钥发送给他们来利用您的信任关系。

1gpg --output ~/signed.key --export --armor email@example.com

您将不得不再次输入您的密码,然后将显示您签名的公共密钥,发送给他们,以便他们在与他人交互时能够从获得您的批准印记中受益。

当他们收到这个新的,签名的密钥时,他们可以导入它,将您生成的签名信息添加到他们的GPG数据库中。

1gpg --import ~/signed.key

他们现在可以向其他人证明,你相信他们的身份是正确的。

如何让您的公共密钥高度可用

由于公共密钥加密的设计方式,如果未知的人拥有您的公共密钥,就不会发生任何恶意事件。

考虑到这一点,让您的公共密钥公开可用可能是有益的,然后人们可以找到您的信息,以便在您第一次交互时安全地向您发送消息。

你可以向任何人发送你的公共密钥,请求它从GPG系统:

1gpg --output ~/mygpg.key --armor --export your_email@address.com
 1[secondary_label Output]
 2-----BEGIN PGP PUBLIC KEY BLOCK-----
 3Version: GnuPG v1.4.11 (GNU/Linux)
 4
 5mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse
 69oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4
 7EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6
 85VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ
 9JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc
10u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3
11. . .

然后,您可以通过适当的介质将此文件发送给对方。

如果您想将密钥发布到关键服务器,则可以通过大多数服务器网站上可用的表单手动进行发布。

另一个选项是通过GPG界面进行此操作。通过键入来查找您的密钥ID:

1gpg --list-keys [email protected]

下面的输出中突出的一部分是密钥ID(如果您不确定要使用哪一个,请查看左侧列的pub)。

1[secondary_label Output]
2pub 4096R/311B1F84 2013-10-04
3uid Test User <[email protected]>
4sub 4096R/8822A56A 2013-10-04

若要将密钥上传到特定密钥服务器,您可以使用以下语法:

1gpg --send-keys --keyserver pgp.mit.edu key_id

密钥将上传到指定的服务器,之后,它可能会被分发到世界各地的其他关键服务器。

使用 GPG 加密和解密消息

您可以轻松地加密和解密消息,在您与对方共享密钥后。

加密消息

您可以使用GPG的--encrypt旗帜来加密消息,基本语法是:

1gpg --encrypt --sign --armor -r [email protected] name_of_file

这将使用收件人的公共密钥加密消息,用自己的私钥签署它,以确保它来自您,并以文本格式输出消息,而不是原始字节。

如果您想要能够读取加密的消息,您应该将另一个-r接收者添加到自己的电子邮件地址中,因为该消息将用每个人的公共密钥加密,并且只能使用相关的私钥进行解密。

因此,如果它只用对方的公共密钥加密,您将无法再次查看消息,除非您以某种方式获得了他们的私钥。

解密信息

当您收到消息时,只需在消息文件上拨打GPG:

1gpg file_name.asc

软件将根据需要向您转发。

如果不是一个文件,你有消息作为一个原始文本流,你可以复制和粘贴它后键入gpg没有任何论点. 你可以按CTRL-D来表示消息的结束,GPG将为你解密它。

关键维护

您可能需要定期使用的一些程序来管理您的关键数据库。

要列出您从其他人那里获得的可用 GPG 密钥,您可以发出以下命令:

1gpg --list-keys

如果您依靠从公共密钥服务器中提取的信息,您的关键信息可能会变得过时,您不希望依靠被撤销的密钥,因为这意味着您信任可能受到威胁的密钥。

您可以通过发布以下信息来更新关键信息:

1gpg --refresh-keys

这将从关键服务器中获取新的信息。

您可以从特定密钥服务器中提取信息,使用:

1gpg --keyserver key_server --refresh-keys

您可能会收到错误消息,如果您的任何密钥无法在密钥服务器上找到。

结论

正确使用GPG可以帮助您确保与不同的人的通信,这非常有帮助,特别是在处理敏感信息时,而且在处理定期的日常消息时。

由于某些加密通信可以被监控程序标记的方式,建议对一切使用加密,而不仅仅是秘密数据,这将使人们更难知道何时发送重要数据或只是发送友好的问候。

Published At
Categories with 技术
Tagged with
comments powered by Disqus