如何在Ubuntu12.04VPS上使用GPG加密和签名消息

来自菜鸟教程
跳转至:导航、​搜索

状态: 已弃用

本文介绍了不再受支持的 Ubuntu 版本。 如果您当前正在运行运行 Ubuntu 12.04 的服务器,我们强烈建议您升级或迁移到受支持的 Ubuntu 版本:

原因: Ubuntu 12.04 已于 2017 年 4 月 28 日终止生命周期 (EOL) and no longer receives security patches or updates. This guide is no longer maintained.

请参阅: 本指南可能仍可用作参考,但可能不适用于其他 Ubuntu 版本。 如果可用,我们强烈建议使用为您正在使用的 Ubuntu 版本编写的指南。 您可以使用页面顶部的搜索功能来查找更新的版本。


介绍


GPG 或 GNU Privacy Guard 是一种公钥加密实现。 这允许在各方之间安全地传输信息,并可用于验证消息的来源是否真实。

在本指南中,我们将讨论 GPG 的工作原理以及如何实现它。 我们将使用 Ubuntu 12.04 VPS 进行此演示,但这些工具可用于任何现代 Linux 发行版。

公钥加密的工作原理


许多用户面临的一个问题是如何安全地进行通信并验证他们正在与之交谈的一方的身份。 许多试图回答这个问题的方案至少在某些时候需要通过不安全的介质传输密码或其他识别凭证。

确保只有目标方可以阅读


为了解决这个问题,GPG 依赖于一种称为公钥加密的安全概念。 这个想法是您可以将传输的加密和解密阶段分成两个单独的部分。 这样,只要您保护解密部分,您就可以自由分发加密部分。

这将允许任何人都可以创建和加密的单向消息传输,但只能由指定的用户(具有私有解密密钥的用户)解密。 如果双方都创建了公钥/私钥对并相互提供了他们的公钥加密密钥,那么他们就可以相互加密消息。

所以在这种情况下,每一方都有自己的私钥和其他用户的公钥。

验证发件人的身份


该系统的另一个好处是消息的发送者可以用他们的私钥“签名”消息。 接收者拥有的公钥可用于验证签名实际上是由指定用户发送的。

这可以防止第三方“欺骗”某人的身份。 它还有助于确保消息被完整传输,没有损坏或文件损坏。

设置 GPG 密钥


GPG 应该默认安装在 Ubuntu 12.04 上。 如果不是,您可以使用以下方式安装它:

sudo apt-get install gnupg

要开始使用 GPG 加密您的通信,您需要创建一个密钥对。 您可以通过发出以下命令来执行此操作:

gpg --gen-key

这将引导您完成一些配置密钥的问题。

  • 请选择您想要的密钥类型:(1) RSA 和 RSA(默认)
  • 你想要什么尺寸的钥匙? 4096
  • 密钥有效吗? 0
  • 它是否正确? y
  • 真实姓名:这里是你的真实姓名
  • 电子邮件地址:your_email@address.com
  • 评论:将在您的签名中可见的可选评论
  • 更改 (N)ame、©omment、(E)mail 或 (O)kay/(Q)uit? O
  • 输入密码: 在此处输入安全密码(大小写、数字、符号)

此时,它将需要使用熵生成密钥。 这基本上是一个描述系统中存在的不可预测性数量的术语。 GPG 使用这个熵来生成一组随机的密钥。

最好在运行时打开一个新终端并 ssh 进入 VPS。 安装一些软件,做一些工作,尽可能地使用机器,让它产生所需的熵。

此过程可能需要很长时间,具体取决于您可以使系统处于多活跃状态。 这里有一篇关于how to generate additional entropy with haveged的文章,可能有用。

创建吊销证书


您需要有一种方法使您的密钥对失效,以防出现安全漏洞,或者您丢失了您的密钥。 使用 GPG 软件有一种简单的方法可以做到这一点。

这应该在您制作密钥对后立即完成,而不是在您需要时完成。 此吊销密钥必须提前生成并保存在安全、独立的位置,以防您的计算机受到威胁或无法操作。 类型:

 gpg --gen-revoke your_email  @地址 .com

您将被询问其被撤销的原因。 您可以选择任何可用的选项,但由于这是提前完成的,因此您不会知道具体细节。

然后,您将被要求提供评论,最后确认选择。

之后,将在屏幕上生成吊销证书。 将其复制并粘贴到安全位置,或打印以供以后使用:

Revocation certificate created.

Please move it to a medium which you can hide away; if Mallory gets
access to this certificate he can use it to make your key unusable.
It is smart to print this certificate and store it away, just in case
your media become unreadable.  But have some caution:  The print system of
your machine might store the data and make it available to others!
-----BEGIN PGP PUBLIC KEY BLOCK-----
Version: GnuPG v1.4.11 (GNU/Linux)
Comment: A revocation certificate should follow

iQIfBCABAgAJBQJSTxNSAh0AAAoJEIKHahUxGx+E15EP/1BL2pCTqSG9IYbz4CMN
bCW9HgeNpb24BK9u6fAuyH8aieLVD7It80LnSg/+PgG9t4KlzUky5sOoo54Qc3rD
H+JClu4oaRpq25vWd7+Vb2oOwwd/27Y1KRt6TODwK61z20XkGPU2NJ/ATPn9yIR9
4B10QxqqQSpQeB7rr2+Ahsyl5jefswwXmduDziZlZqf+g4lv8lZlJ8C3+GKv06fB
FJwE6XO4Y69LNAeL+tzSE9y5lARKVMfqor/wS7lNBdFzo3BE0w68HN6iD+nDbo8r
xCdQ9E2ui9os/5yf9Y3Uzky1GTLmBhTqPnl8AOyHHLTqqOT47arpwRXXDeNd4B7C
DiE0p1yevG6uZGfhVAkisNfi4VrprTx73NGwyahCc3gO/5e2GnKokCde/NhOknci
Wl4oSL/7a3Wx8h/XKeNvkiurInuZugFnZVKbW5kvIbHDWJOanEQnLJp3Q2tvebrr
BBHyiVeQiEwOpFRvBuZW3znifoGrIc7KMmuEUPvA243xFcRTO3G1D1X9B3TTSlc/
o8jOlv6y2pcdBfp4aUkFtunE4GfXmIfCF5Vn3TkCyBV/Y2aW/fpA3Y+nUy5hPhSt
tprTYmxyjzSvaIw5tjsgylMZ48+qp/Awe34UWL9AWk3DvmydAerAxLdiK/80KJp0
88qdrRRgEuw3qfBJbNZ7oM/o
=isbs
-----END PGP PUBLIC KEY BLOCK-----

如何导入其他用户的公钥


如果您不能接受您希望与之交流的人的其他公钥,那么 GPG 将毫无用处。

您可以通过多种方式导入某人的公钥。 如果你在文本文件中从某人那里获得了公钥,GPG 可以使用以下命令导入它:

gpg --import name_of_pub_key_file

您希望与之通信的人也有可能已将其密钥上传到公钥服务器。 这些密钥服务器用于存放来自世界各地的人们的公钥。

将其信息与各种其他服务器同步的流行密钥服务器是 MIT 公钥服务器。 您可以在 Web 浏览器中按姓名或电子邮件地址搜索人员:

http://pgp.mit.edu/

您还可以通过键入以下内容从 GPG 中搜索密钥服务器:

 gpg --keyserver  pgp.mit.edu  --search -keys 搜索参数

如何验证和签署密钥


虽然您可以自由分发您生成的公钥文件,并且人们可以使用它以加密方式与您联系,但在初始公钥传输中仍然存在信任问题。

验证其他人的身份


你怎么知道给你公钥的人就是他们所说的那个人? 在某些情况下,这可能很简单。 您可能正坐在您的笔记本电脑打开和交换钥匙的人旁边。 这应该是一种非常安全的方式来识别您正在接收正确、合法的密钥。

但还有许多其他情况下无法进行此类个人接触。 您可能不认识对方,也可能因为物理距离而分开。 如果您不想通过不安全的渠道进行通信,那么验证公钥可能会出现问题。

幸运的是,您无需验证双方的全部公钥,只需比较从这些密钥派生的“指纹”即可。 这将为您提供一个合理的保证,即你们都使用相同的公钥信息。

您可以通过键入以下内容获取公钥的指纹:

 gpg --fingerprint your_email  @地址 .com
 pub 4096R/311B1F84 2013-10-04 密钥指纹 = CB9E C70F 2421 AF06 7D72 F980 8287 6A15 311B 1F84 uid 测试用户  @地址 .com> 子 4096R/8822A56A 2013-10-04

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

签署他们的钥匙


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

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

 gpg --sign-key电子邮件 @例子 .com

签署密钥后,这意味着您确认您相信此人就是他/她声称的那个人。 这可以帮助其他人决定是否也信任那个人。 如果有人信任您,并且他们看到您已经签署了此人的密钥,那么他们可能也更有可能信任他们的身份。

您应该通过将签名密钥发回给您正在签署其密钥的人,让他们利用您信任关系的优势。 您可以通过键入以下内容来执行此操作:

 gpg --export --armor电子邮件 @例子 .com

您必须再次输入密码。 之后,他们的公钥,由你签名,将在屏幕上吐出。 把这个发给他们,这样他们就可以在与他人互动时从获得你的“认可印章”中受益。

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

gpg --import 文件名

如何使您的公钥高度可用


如果未知的人拥有您的公钥,则不会发生任何恶意行为。

正因为如此,让您的公钥易于使用可能是有益的。 从第一次通信开始,人们就可以轻松找到您的信息以向您发送安全消息。

您可以通过从 GPG 系统请求您的公钥来向任何人发送您的公钥:

 gpg --armor --export your_email  @地址 .com
-----BEGIN PGP PUBLIC KEY BLOCK----- 版本:GnuPG v1.4.11 (GNU/Linux)
mQINBFJPCuABEACiog/sInjg0O2SqgmG1T8n9FroSTdN74uGsRMHHAOuAmGLsTse 9oxeLQpN+r75Ko39RVE88dRcW710fPY0+fjSXBKhpN+raRMUKJp4AX9BJd00YA/4 EpD+8cDK4DuLlLdn1x0q41VUsznXrnMpQedRmAL9f9bL6pbLTJhaKeorTokTvdn6 5VT3pb2o+jr6NETaUxd99ZG/osPar9tNThVLIIzG1nDabcTFbMB+w7wOJuhXyTLQ JBU9xmavTM71PfV6Pkh4j1pfWImXc1D8dS+jcvKeXInBfm2XZsfOCesk12YnK3Nc u1Xe1lxzSt7Cegum4S/YuxmYoh462oGZ7FA4Cr2lvAPVpO9zmgQ8JITXiqYg2wB3 . . . 

然后,您可以复制并粘贴此内容或将其发送到适当的媒体中。

如果您想将您的密钥发布到密钥服务器,您可以通过大多数服务器站点上可用的表单手动完成。

另一种选择是通过 GPG 接口执行此操作。

通过键入以下内容查找您的密钥 ID:

 gpg --list-keys your_email  @地址 .com

突出显示的部分是您的密钥 ID。 这是一种引用内部软件密钥的简短方法。

 pub 4096R/ 311B1F84 2013-10-04 uid 测试用户  @地址 .com> 子 4096R/8822A56A 2013-10-04

要将您的密钥上传到某个密钥服务器,您可以使用以下语法:

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

使用 GPG 加密和解密消息


与对方配置密钥后,您可以轻松地加密和解密消息。

加密消息


您可以使用 GPG 的“–encrypt”标志来加密消息。 基本语法是:

 gpg --encrypt --sign --armor -r person  @电子邮件 .com name_of_file

这些参数基本上加密了电子邮件,用您的私钥对其进行签名以保证它来自您,并以文本格式而不是原始字节生成消息。

如果您希望能够阅读邮件,您还应该使用您自己的电子邮件地址添加第二个“-r”收件人。 这是因为消息将使用每个人的公钥加密,并且只能使用关联的私钥解密。

因此,如果它只是用对方的公钥加密,你将无法再次查看该消息,除非你以某种方式获得了他们的私钥。 将您自己添加为第二个收件人会分别对邮件进行两次加密,每个收件人一次。

解密消息


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

gpg 文件名

软件会根据需要提示您。

如果您将消息作为原始文本流,您可以在输入 gpg 后复制并粘贴它,无需任何参数。 您可以按“CTRL-D”表示消息结束,GPG 将为您解密。

密钥维护


您可能需要定期使用许多过程来管理您的密钥数据库。

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

gpg --list-keys

如果您依赖从公钥服务器提取的信息,您的密钥信息可能会过时。 您不想依赖已撤销的密钥,因为这意味着您信任可能被泄露的密钥。

您可以通过发出以下命令来更新密钥信息:

gpg --refresh-keys

这将从密钥服务器获取新信息。

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

gpg --keyserver key_server --refresh-keys

结论


正确使用 GPG 可以帮助您保护与不同人的通信。 这非常有帮助,尤其是在处理敏感信息时,而且在处理日常消息时也是如此。

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

GPG 加密仅在双方都使用良好的安全实践并对其其他安全实践保持警惕时才有用。 如果您希望有可能进行加密安全通信,请让您经常与之交流的人了解这些做法的重要性。

贾斯汀·艾林伍德