端到端加密(E2EE)详解
2020年2月中旬,WhatsApp在其博客上宣布,现在全球有超过20亿人在积极使用这个消息应用。将这个数字乘以每个用户发送的信息数量--这意味着每天有大量的文本、照片、视频、语音信息、文件、状态更新和电话通过公共网络发送!这将是一个巨大的数字。
想象一下,你的数据落入坏人之手,让每个人都能看到,没有隐私或安全。这可能会造成什么样的伤害?幸运的是,有端到端加密(E2EE)--"一个公共密钥加密系统,确保你的信息、文本、甚至文件的内容不会被任何人理解,除了他们的目标收件人"
直到最近,端到端加密提供了必要的安全保障,以防止你的信息在传输过程中被读取--也就是说,黑客、政府、甚至为你的通信提供便利的公司都无法读取你的信息。令人不安的是,这一点在EARN IT立法法案下受到威胁,该法案旨在拔除加密系统。
在这篇文章中,我将深入探讨E2EE是如何工作的,以及为什么我们必须保留它。在我们开始讨论端到端加密之前,让我们花些时间来了解一下加密的基本原理。
传递一个秘密信息
假设你在一个教室里,想给你的朋友Bob发送一条秘密信息,但你需要事先通过你的朋友传递信息。在这个例子中,你和中间人被称为网络节点,它们是一个再分配点或一个通信终端。
图片来源:ssd.eff.org
正如你可能已经猜到的,你非常担心你的朋友会偷看你的秘密信息。因此,你用经典的凯撒/移位密码对信息进行了加密--"在这种密码中,明文中的每个字母都被字母表中某个固定的位置所取代"。在这个例子中,你和鲍勃选择3作为你们的密钥。
图片来源:ssd.eff.org
当有一把钥匙来加密和解密数据时,它被称为对称加密;它是最古老的加密形式,可以追溯到数千年前。
单一密钥系统
图片来源。Hackernoon
如今,存在两种类型的对称密钥加密算法--区块密码 或流密码。它们之间的根本区别在于其有效的数据大小操作。流密码通常对单个字节的数据进行操作;而块密码则对固定长度的数据(即数据块)进行操作。
cheapsslshop提到的现代对称密钥加密算法的例子包括Blowfish、AES、DES、Camellia和Serpent等块密码,或FISH、RC4、QUAD、Py和SNOW等流密码。
使用对称密钥加密有一个明显的缺点;你和鲍勃都需要事先决定一个密钥来进行通信。这就提出了一个挑战。你和Bob怎样才能安全地私下交流而不让你的朋友或其他任何人知道你的密钥,特别是在不可能直接交流的情况下?
双钥匙系统
图片来源。Hackernoon
公钥密码学(也被称为非对称密码学)解决了对称加密的固有问题。基于数学公式的加密算法产生了单向函数,产生了两个密钥--用于加密的公钥和用于解密的私钥。公钥可以自由分发,但只有预定的接收者才持有私钥。
在实践中,几乎所有形式的网络通信和数据存储都在一定程度上使用公钥加密技术来保证真实性和不可抵赖性。尽管非对称加密是一个相对较新的领域(与对称加密相比),但它已经创造了一个陈旧的互联网标准,包括传输层安全(TLS)、S/MIME、PGP和GPG。
cheapsslshop提到的一些现代非对称密钥加密算法包括RSA、WELGamal、PGP、椭圆曲线技术、SSH和其他许多算法。
现在,你和Bob对公钥加密法了解不多;但是你和Bob决心在艺术课上通过朋友分享一个秘密密钥。你和Bob设计了一个计划,使用油漆。
用油漆进行Diffie-Hellman密钥交换(OTR)的一般概述

图片来源。公钥密码学简介
Diffie-Hellman密钥交换允许双方创建一个共享的秘密,可用于在不安全的网络上进行秘密通信。上面的插图用颜色作比喻来解释密钥交换的概念。
该程序首先让双方商定一些不需要保密的随机起始颜色。在图中,Alice和Bob都选择了黄色。之后,鲍勃和爱丽丝分别选择一种不被共享的秘密颜色。在这个例子中,它是红色和茶色。
现在,最重要的部分是--爱丽丝和鲍勃必须将他们自己的秘密颜色与他们相互共享的颜色混合在一起。这就产生了橙黄色(爱丽丝)和浅蓝色(鲍勃)的颜料,通过公共网络共享。
最后,这两种颜色的混合物再与他们自己的秘密颜色混合。最终产生的颜色对双方来说应该是完全一样的(黄褐色)。
这种秘密交换背后的美妙之处在于,它可以防止第三方监听并获得共同的秘密颜色,即使他们知道共同的颜色(黄色)和第一种混合颜色(橙褐色和浅蓝色)。在现实中,数字被用来代替颜色;然而Diffie-Hellman方法被确定为 "破解 "的计算成本很高。"即使对现代超级计算机来说,也不可能在实际时间内计算出来"。
现在共同的密钥可以用来创建PGP(Pretty Good Privacy)加密信息的密钥对。
Diffie-Hellman已经成为TLS(即HTTPS)的首选密钥交换算法,因为它具有前向保密属性,这意味着获得对通信系统的最终访问并不能使感兴趣的一方解密之前记录的对话。之前流行的密钥交换算法(RSA)不支持前向保密性,从通信系统中获得RSA私钥确实允许以前记录的对话被解密。
在回顾中
我们回顾了对称加密,它使用一个密钥加密技术来加密数据和解密数据。对称加密的主要缺陷是它不能在不安全的网络上建立唯一的密钥。
我们还回顾了非对称加密,它通过使用公共密钥进行加密和使用私人密钥进行解密来解决这个问题。我解释了Diffie-Hellman是如何在双方之间建立共享秘密的一种可能的算法,而这又可以用于对称或非对称加密。
最后,E2EE是一个重要的通信系统,在广阔的互联网上为我们的设备提供了必要的安全保障。它帮助我们确保我们的私人信息保持隐私。
等等...我忘了最重要的部分。我们怎样才能建立它?在这里,你去!
现在让我们用PGP建立我们的密钥
虽然现代版本的Diffie-Hellman密钥交换不用于(PGP)Pretty Good Privacy,但它仍然使用另一种叫做RSA的算法创建复杂的密钥对。在这个简短的指南中,我将告诉你如何用GNU/Linux生成PGP密钥。
PGP是一个流行的加密标准,用于建立端到端的加密。GNU Privacy Guard是一个免费软件,是OpenPGP标准的一部分。简而言之,公钥可以用这个工具生成和交换。
步骤1
首先更新你的软件包。然后在你的Ubuntu 18.04机器上安装和配置GnuPG。
$ sudo apt update && sudo apt upgrade
$ sudo apt install gnupg
一旦你完成了GnuPG的安装,你就可以准备生成你的密钥对了。
第二步
让我们深入了解一下。你要做的第一件事是执行下面的命令,它将引导你完成密钥生成过程。
$ gpg --full-gen-key
Please select what kind of key you want:
(1) RSA and RSA (default)
(2) DSA and Elgamal
(3) DSA (sign only)
(4) RSA (sign only)
Your selection?
你要选择使用RSA的默认选项(1)。RSA是一种用于加密和解密信息的算法,使用的公钥和私钥与Diffie-Hellman的密钥交换没有太大区别。
RSA keys may be between 1024 and 4096 bits long.
What key size do you want? (3072)
你会被提示你的密钥长度。在这种情况下,我们希望选择4096比特,因为现在大多数人都使用它。
之后,你将指定密钥的有效时间。这允许钥匙在一定时间后不能使用。如果你想让它无限期地活动,则键入0。
Please specify how long the key should be valid.
0 = key does not expire
<n> = key expires in n days
<n>w = key expires in n weeks
<n>m = key expires in n months
<n>y = key expires in n years Key is valid for? (0)
第三步
在这一步,你将被提示添加你的用户ID,包括你的姓名、电子邮件地址、评论,最后是你的口令。
GnuPG needs to construct a user ID to identify your key.
Real name: **** *****
Email address: **********@gmail.com
Comment: New key
You selected this USER-ID:
"**** **** (New key) <***********@gmail.com>"
最后一步是你将需要输入一个口令。当你需要对你的密钥进行任何修改或解密信息时,该口令将允许你解锁秘密密钥!

祝贺你!你已经创建了你的密钥!
gpg: key 8FD4B01CB5FE9756 marked as ultimately trusted
gpg: directory '/root/.gnupg/openpgp-revocs.d' created
gpg: revocation certificate stored as '/root/.gnupg/openpgp-revocs.d/4F9F86C428484360A346BE1E8FD4B01CB5FE9756.rev'
public and secret key created and signed.
pub rsa4096 2020-04-17 [SC]
4F9F86C428484360A346BE1E8FD4B01CB5FE9756
uid **** ****** (New key) <*********@gmail.com>
sub rsa4096 2020-04-17 [E]
接下来是什么?
在这个阶段,我们可以使用GPA(Gnu Privacy Assistant)工具来查看和使用我们的密钥
$ sudo apt install gpa
$ gpa
你应该看到类似于上图的东西。
一旦你打开了GNU隐私助理的密钥管理器,你可以选择最近创建的密钥,然后点击导出密钥。将您的钥匙保存在您的目录中任何您想保存的地方。双击最近导出的密钥来查看其内容。
:-----BEGIN PGP PUBLIC KEY BLOCK-----
iQI2BCABCgAgFiEET5+GxChIQ2CjRr4ej9SwHLX+l1YFAl6aIVACHQAACgkQj9Sw
HLX+l1YlHQ/+I4CrsdBY6DfRza8WJwe4YoL18n4ZTE8IBPF000yZGUs8sODZ+bqR
BTbNbDdBJCTaF55dooNUorh9PtcdLOwX7YEKITr9/NI13G4FEIauk1Ss3oH1d32s
xd4ZZhiT6tiKtQyRw30H2fyEesQIvnUzs6PxB6v0QYhwb1KzSrzmv0B3+4LvmC9J
XS9ARYy5S/g3SJsxBPmqbxdxIuH50eIIbSPZtF0BwDpCWmXJ1JrdymrvvB058u7Z
1ML8R5S0SGbqy3kzQVjig2QdRd6aN97n/h1lneIeyOXsNN6tyhPKm82AzFNYYnpk
dVgkGt03WM7x+nvtkY61tduT3Pe3et6YZw2jUnCxQJlNL60wDci0ulxZzTHnUSdj
yXlwqEZ0UnZVQxahQh5epVnA7EiNbYm1JYtH47eVuefiI2t56GrnWnLoy6S/zHzV
xTcDVvfDj4aqvYTrTNMS1ce7dxkbdh9G81mPwI8AlbEjN2UGLWN/3wOVlajUukV1
/x5xVaS5gP8meaeCY5661OLKw5a3e3VxUBFfLR0R3qzMzenmJs8ctBqo1Wt8VdIh
gItU1AGwrgOK37x1fgikWUWXzPBs38z/KCrifBSh31gFhRZykXzjeGzbWHrPpN/G
rhA4oMIXlqGGcZD7Y7vV/uT7AsCEQ8kzkYIoWlf4a9+Kj96MBkv6sik=
=faSA
-----END PGP PUBLIC KEY BLOCK-----
我们现在已经完成了钥匙的部分。接下来,我们想通过互联网与某人交换信息。首先,我们需要看看谁在说话?把你的公钥发给你的朋友,并要求他们为你做同样的事情。接下来,把他们的钥匙保存在某个地方,然后按导入钥匙键来导入它。现在你们已经交换了公钥,我们可以开始加密信息了。
要导入他们的公钥,你只需要按GNU隐私助理管理器上的导入钥匙按钮。
现在是时候编写您的秘密信息了。去按剪贴板图标,打开GNU剪贴板。这个窗口将弹出。

白色的空间允许您写任何您希望保密的内容。当你写完你的信息后,你可以去按加密缓冲区的文本,它看起来像一个信封,前面有一个蓝色的钥匙。请确保选择与你交谈的人的公钥。为了增加安全性,你也可以用你的密钥签署加密的信息。
-----BEGIN PGP MESSAGE----- Version: GnuPG v2
xTcDVvfDj4aqvYTrTNMS1ce7dxkbdh9G81mPwI8AlbEjN2UGLWN/3wOVlajUukV1
/x5xVaS5gP8meaeCY5661OLKw5a3e3VxUBFfLR0R3qzMzenmJs8ctBqo1Wt8VdIh
gItU1AGwrgOK37x1fgikWUWXzPBs38z/KCrifBSh31gFhRZykXzjeGzbWHrPpN/G
rhA4oMIXlqGGcZD7Y7vV/uT7AsCEQ8kzkYIoWlf4a9+Kj96MBkv6sik= iQI2BCABCgAgFiEET5+GxChIQ2CjRr4ej9SwHLX+l1YFAl6aIVACHQAACgkQj9Sw
HiQI2BCABCgAgFiEET5+GxChIQ2CjRr4ej9SwHLX+l1YFAl6aIVACHQAACgkQj9Sw
HLX+l1YlHQ/+I4CrsdBY6DfRza8WJwe4YoL18n4ZTE8IBPF000yZGUs8sODZ+bqR
BTbNbDdBJCTaF55dooNUorh9PtcdLOwX7YEKITr9/NI13G4FEIauk1Ss3oH1d32s
xd4ZZhiT6tiKtQyRw30H2fyEesQIvnUzs6PxB6v0QYhwb1KzSrzmv0B3+4LvmC9J
XS9ARYy5S/g3SJsxBPmqbxdxIuH50eIIbSPZtF0BwDpCWmXJ1JrdymrvvB058u7Z
1ML8R5S0SGbqy3kzQVjig2QdRd6aN97n/h1lneIeyOXsNN6tyhPKm82AzFNYYnpk
dVgkGt03WM7x+nvtkY61tduT3Pe3et6YZw2jUnCxQJlNL60wDci0ulxZzTHnUSdj
-----END PGP MESSAGE-----
它看起来将与上面类似。现在你可以用你喜欢的方式发送它,通过电子邮件或文本。Voila!你已经做了端对端加密!
注意,一旦你或你的朋友收到加密的信息,他们要做的就是把信息粘贴到剪贴板上,然后按解密缓冲区的文字来解密它。
结论
端对端加密是一个有价值的工具,它允许互联网用户在公共网络上安全、私密地发送他们的信息。我建议你对你使用的电子邮件和消息平台以及他们如何发送你的数据进行自己的研究。如果他们使用端到端加密,那么就算他们是一个好的服务提供商,因为他们重视你的隐私。