系统将要求您从菜单中选择加密类型。除非您有充分的理由不这样做,否则请键入1并按Enter键。
您必须选择加密密钥的位长。按Enter键接受默认值。
您需要指定密钥应该持续多长时间。如果您正在测试系统,请输入一个较短的持续时间,如5天,表示5天。如果您要保留此密钥,请输入一个较长的期限,如1年。密钥将持续12个月,因此需要在一年后更新。用Y确认您的选择。
您必须输入您的姓名和电子邮件地址。如果愿意,您可以添加评论。
系统将提示您输入密码。无论何时使用密钥,您都将需要密码,因此请确保您知道它是什么。
输入密码后,单击确定按钮。您将在使用gpg时看到此窗口,因此请务必记住您的密码短语。
将生成密钥,并且您将返回到命令提示符。
生成吊销证书
如果您的私钥为其他人所知,您将需要取消旧密钥与您的身份的关联,以便您可以生成新密钥。为此,您需要一个吊销证书。我们现在就这么做,然后把它存放在安全的地方。
--output选项后面必须跟您要创建的证书的文件名。gen-revoke选项使gpg生成吊销证书。您必须提供生成密钥时使用的电子邮件地址。
gpg --output ~/revocation.crt --gen-revoke dave-geek@protonmail.com
系统将要求您确认是否要生成证书。按Y并按Enter。系统将询问您生成证书的原因。因为我们提前做了这件事,所以我们不能确定。按1作为似是而非的猜测,然后按Enter键。
如果愿意,您可以输入描述。按两次Enter键结束描述。
系统将要求您确认设置,然后按Y并按Enter。
将生成证书。您将看到一条消息,强调保护此证书安全的必要性。
上面提到一个叫马洛里的人。长期以来,密码学讨论一直使用鲍勃和爱丽丝作为交流的两个人,还有其他的配角。伊芙是个窃听者,马洛里是个恶意攻击者。我们需要知道的就是我们必须保证证书的安全。
至少,让我们从证书中删除除我们之外的所有权限。
chmod 600 ~/revocation.crt
让我们检查一下ls,看看现在的权限是什么:
ls -l
太好了。除了文件所有者我们之外,任何人都不能对证书执行任何操作。
导入其他人的公钥
要加密另一个人可以解密的消息,我们必须拥有他们的公钥。
如果在文件中向您提供了它们的密钥,您可以使用以下命令将其导入。在本例中,密钥文件名为“Mary-geek.key”。
gpg --import mary-geek.key
将导入密钥,并向您显示与该密钥相关联的名称和电子邮件地址。很明显,这应该和你收到的人相符。
您需要密钥的人也有可能已将其密钥上载到公钥服务器。这些服务器存储来自世界各地的人们的公钥。密钥服务器定期彼此同步,以便密钥普遍可用。
麻省理工学院公钥服务器是一种流行的密钥服务器,并且定期同步,因此在那里的搜索应该是成功的。如果有人最近才上传密钥,可能需要几天时间才会出现。
--keyserver选项后面必须跟您要搜索的密钥服务器的名称。--search-key选项后面必须跟您要搜索的人员的姓名或他们的电子邮件地址。*我们将使用电子邮件地址:
gpg --keyserver pgp.mit.edu --search-keys mary-geek@protonmail.com
系统会为您列出匹配项并进行编号。要导入一个,请键入号码,然后按Enter键。在本例中,只有一个匹配项,因此我们键入1并按Enter键。
将导入密钥,并向我们显示与该密钥相关联的名称和电子邮件地址。
验证和签名密钥
如果您的公钥文件是由您认识的人递给您的,您可以放心地说它属于该人。如果您是从公钥服务器下载的,您可能会觉得需要验证密钥是否属于预期的人。
指纹选项使gpg创建一个由10组四个十六进制字符组成的短序列。你可以让那个人把他们钥匙的指纹发给你。
然后,您可以使用--指纹选项生成相同的十六进制字符指纹序列,并对它们进行比较。如果他们匹配,你就知道钥匙属于那个人。
gpg --fingerprint mary-geek@protonmail.com
生成指纹。
当您确信密钥是真实的并且归应该与其关联的人所有时,您可以为他们的密钥签名。
如果您不这样做,您仍然可以使用它来加密和解密来自或发送给此人的消息。但GPG每次都会询问您是否希望继续,因为密钥未签名。我们将使用名称恰当的--sign-key选项并提供此人的电子邮件地址,以便gpg知道要签署哪个密钥。
gpg --sign-key mary-geek@protonmail.com
您将看到有关密钥和人员的信息,并将被要求验证您是否真的想要签署密钥。按Y键并按Enter键以签署密钥。
如何共享您的公钥
要将您的密钥作为文件共享,我们需要将其从gpg本地密钥存储导出。为此,我们将使用--export选项,后面必须跟您用来生成密钥的电子邮件地址。--output选项后面必须跟您希望将密钥导出到的文件的名称。armor选项告诉gpg生成ASCII ARM输出,而不是二进制文件。
gpg --output ~/dave-geek.key --armor --export dave-geek@protonmail.com
我们可以用较少的资源查看密钥文件内部。
less dave-geek.key
钥匙在它所有的荣耀中展现出来:
您还可以在公钥服务器上共享您的公钥。send-key选项将密钥发送到keyserver。--keyserver选项后面必须跟有公钥服务器的网址。要标识要发送的密钥,必须在命令行上提供密钥的指纹。注意四个字符的集合之间没有空格。
(您可以使用--指纹选项查看密钥的指纹。)
gpg --send-keys --keyserver pgp.mit.edu 31A4E3BE6C022830A804DA0EE9E4D6D0F64EEED4
您将得到密钥已发送的确认信息。
正在加密文件
我们终于准备好加密文件并将其发送给Mary。该文件名为Raven.txt。
ENCRYPT选项告诉gpg加密文件,--sign选项告诉gpg使用您的详细信息对文件签名。armor选项告诉gpg创建一个ASCII文件。r(收件人)选项后面必须跟您要向其发送文件的人的电子邮件地址。
gpg --encrypt --sign --armor -r mary-geek@protonmail.com
创建的文件与原始文件同名,但在文件名后附加了“.asc”。“让我们来看看它的内部。
less Raven.txt.asc
该文件完全无法辨认,只有拥有您的公钥和Mary的私钥的人才能解密。唯一同时拥有这两项的人应该是玛丽。
我们现在可以将文件发送给Mary,确信没有其他人可以解密它。
正在解密文件
玛丽已经回信了。它位于一个名为coded.asc的加密文件中。我们可以很容易地使用--deccrypt选项对其进行解密。我们将把输出重定向到另一个名为Pla.txt的文件中。
请注意,我们不必告诉gpg该文件来自谁。它可以从文件的加密内容中找出这一点。
gpg --decrypt coded.asc > plain.txt
我们来看一下Pla.txt文件:
less plain.txt
该文件已为我们成功解密。
刷新密钥
您可以定期要求gpg对照公钥服务器检查它拥有的密钥,并刷新任何已更改的密钥。您可以每隔几个月执行一次此操作,或者在收到新联系人的密钥时执行此操作。
REFRESH-KEYS选项使gpg执行检查。--keyserver选项后面必须跟您选择的密钥服务器。一旦在公钥服务器之间同步了密钥,您选择哪一个就无关紧要了。
gpg --keyserver pgp.mit.edu --refresh-keys
GPG的响应是列出它检查的密钥,并让您知道是否有更改和更新的密钥。
隐私是一个热门话题
这些天来,隐私从来都不会远离新闻。无论您出于什么原因想要保护您的信息安全和隐私,gpg都提供了一种简单的方法来对您的文件和通信进行难以置信的高度加密。
还有其他使用gpg的方法。你可以得到一个叫Enigmail的雷鸟插件。它直接连接到您的GPG配置中,允许您加密来自Thunderbird内部的电子邮件消息。