现在我明白为什么几乎没有人加密他们的邮件了



电子邮件加密是一个困难而痛苦的过程。最近,我本人意识到了多少。我的一个朋友在信息安全领域非常先进,给我发送了她的PGP公钥,并要求我切换到加密。不,她不是来自美国国家安全局(NSA)或中央情报局(CIA),而是一个关心自己隐私的普通人。我以前从未发送过加密的信件,但我想:“为什么不呢?”多年来,我一直想学习这一点,但是没有人可以与它交换加密的信件。

我首先在Linux机器上安装GnuPG。

GnuPG与PGP相似,因为它使用公共和私有密钥进行加密和解密,但是它带有开放源代码,并且具有许多Linux发行版。 PGP的另一个开源版本是OpenPGP。

可以从官方网站下载名为Gpg4win的Windows GnuPG 。我选择了一种加密和解密消息的通用方法,该方法不与任何电子邮件提供程序绑定,因为我不想将自己限制为仅加密一个提供程序的能力。此外,确保即使是邮件提供者也无法访问您的信件的唯一方法是自己加密它们。我在How-To Geek上找到了最全面的GnuPG指南

我使用以下命令导入了朋友的公钥:

gpg --import her_public_key_file.key

该命令her_public_key_file.key将替换为实际的公钥文件。然后,我检查了她的密钥是否已成功导入:

gpg --list-keys

出现这样的消息:

pub 2048R/FFE7947D 2019-10-11 [expires: 2021-10-10]
uid her_email@her_email_provider.com
sub 2048R/AB48FEC2 2019-10-11

这意味着GnuPG将其公钥识别为有效并将其保存以备将来使用。

然后签署了她的公钥:

gpg --sign-key her_email_address@email_provider.com

签名公共密钥告诉GnuPG您信任此密钥,也就是说,它确实是来自此人的。必须解密每个公用密钥,然后才能解密来自该公用密钥所有者的消息。我认为,这一步骤没有任何意义。如果您认为密钥不是来自正确的人,为什么还要导入密钥?

然后,我尝试生成密钥:

gpg --output ~/temp.key --armor --export My Name 

好了,执行了这样的命令后,弹出一条错误消息,提示找到新行的结尾。我认为这可能是由于我的姓名以及姓名和电子邮件地址之间的空格所致,所以我尝试了多种格式。经过大约一个小时的尝试和许多不成功的尝试,其中有些看起来很成功,但没有成功,我终于找到了正确的命令:

gpg --gen-key

上面的命令会问您一系列问题。首先,我选择了选项“ 1”,然后选择了2048位密钥长度的选项。设置无限的密钥有效期。我没有在名称字段中指出姓氏,但是那里也支持空格:您可以同时指定名称和姓氏。然后输入他的电子邮件地址。注释字段留为空白。最后,他介绍了一个长密码短语。密码短语只是密码的同义词。我把它写下来不会丢失。实际上,我将其放入使用Truecrypt加密的文件中。如果在硬盘上重新安装GnuPG并重新导入密钥,则以后需要使用密码来加密消息。并且不要忘记自己备份密钥!

创建密钥后,我们检查结果:

gpg --list-keys

该命令产生如下内容:

pub 2048R/FFE7947D 2019-10-11 [expires: 2021-10-10]
uid her_email@her_email_provider.com
sub 2048R/AB48FEC2 2019-10-11


pub 2048R/3A785D3F 2020-02-22
uid My Name
sub 2048R/A7B384FE 2020-02-22

我运行了两次密钥生成,因为我不确定此结果是否意味着有一对公共/私有密钥或只有一个密钥。不知何故,我最终意识到我已经创建了两个密钥对,因此我删除了第二对。

然后,我尝试将公钥导出到文件中。必须将公共密钥发送给您向其发送加密字母的每个人,以便可以对其进行解密。我不确定我使用了哪个命令,但是它生成了一个以开头的文本文件-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1我把这封信寄给了我的朋友,她用一条加密的消息回答了我。

我试图message.asc用她的信解密该文件

gpg --decrypt message.asc > plain.txt

但是GnuPG给出了一条错误消息,指出找不到密钥:

gpg: encrypted with RSA key, ID XXXXXXXX
gpg: decryption failed: secret key not available

但是我看到了我的秘密钥匙。我什至可以导出它。我知道他是!我能说什么,有时程序员会写出非常糟糕的错误消息。此时,我已经开始感到有些不适。

我不知道我做错了什么。我唯一能想到的就是我无法正确创建密钥。要么,要么我导出了错误的公钥。所以我决定从头再来。我使用以下命令删除了密钥对,生成了一个新的密钥对,并将我的公共密钥导出到文件中:

gpg --output ~/my_public_gpg_key.key --armor --export My Name my-email@my-email-povider.com

然后,他向朋友发送了新的公共密钥。该参数--armor告诉GnuPG以文本形式创建公钥文件。文件名- my_public_gpg_key.key

她再次加密了她的信息并将其发送给我。当我尝试解密它时,我再次看到相同的错误消息:

gpg: encrypted with RSA key, ID XXXXXXXX
gpg: decryption failed: secret key not available

这次,我注意到密钥标识符与我的旧公共密钥匹配,而不是新的。我确定她错了,并要求她用新钥匙再试一次。然后,为确保我没有记错,我决定检查我使用的密钥确实是我的新密钥。我发送的新密钥甚至都不是我的公共密钥之一!始于她的公钥-----BEGIN PGP PUBLIC KEY BLOCK----- Version: GnuPG v1!不知何故,我将她的钥匙和附加钥匙一起出口了Version: GnuPG v1!我知道这一点是因为我仍然有她寄给我的带有她钥匙的文件,文件开头是-----BEGIN PGP PUBLIC KEY BLOCK-----。不在那里Version: GnuPG v1!她的公钥与我发送给她的公钥匹配。

我使用上面的相同命令重新导出了我的公钥。这次,在通过电子邮件将其发送给她之前,我检查了它是否真的是我的钥匙。从Internet GnuPG参考资料中,我了解到,如果人们使用不同版本的GnuPG,可能会出现一条有关缺少密钥的消息。通过电子邮件发送新密钥时,我向她提到了这一点。

几周后,我收到了一封回复信。到这个时候,我已经决定她投降了。在接下来的几周里,我的计算机出现了一些问题,因此有必要重新格式化硬盘。因此,我不得不重新安装GnuPG,重新导入我的密钥并重新导入其公共密钥。幸运的是,我做了备份!然后,我用此命令加密的另一封信回答了她的最后一封信:

gpg --encrypt --sign --armor -r her-email@her-email-provider.com --passphrase my-pass-phrase my-msg.txt

当然,这不是我的真实密码,我将其替换为my-pass-phrase,将未加密的消息替换为my-msg.txt。生成了密文,其文件名为my-msg.tx.gpg。我自己找不到有关如何解密自己的密文的任何信息,因此我不得不将其发送给她,不知道自己是否正确加密了它。我只知道他似乎是正确的身材。几周后,我从她那收到了一封关于另一主题的新加密信。只有到那时,我才有信心我终于达到了可以通过加密电子邮件成功进行通信的地步。从头到尾的整个过程花了一个多月的时间!我仍在尝试自动执行GnuPG命令,这样我就可以使用它们而不必考虑我在做什么。

从这一经验中,我意识到加密的电子邮件虽然很有趣,但却不太实用。除非您是NSA监督的Edward Snowden,否则您不可能证明创建和使用加密邮件的努力是合理的。而且,如果您不是拥有重要机密的爱德华·斯诺登,那么任何人都不太可能会花精力在加密与您的通信上。

就像我使用GnuPG一样,加密和解密电子邮件太繁琐了。由于我已经为此付出了很多努力,因此我将继续使用它与我的在线朋友进行交流。但是我不建议普通人使用GnuPG来加密电子邮件,如果可以避免的话。我了解到,特定邮件提供商(例如Protonmail)在市场上有更简单的解决方案,但是大多数人都不想更改提供商以使用它们。我们都需要一种更简单的方法来发送和接收加密的邮件,而无需更改邮件提供商。GnuPG不是解决方案。如果您知道一种更简单的邮件加密方法,请考虑发表评论。


All Articles