同其他网络协议一样,电子邮件被发明时,也是以明文在网络上传输的。与其他协议不同的是,虽然电子邮件也已经有了相关的加密协议,但是由于电子邮件依赖于个人的特点,这些加密协议并没有得到广泛的使用。
对于明文传输邮件带来的安全问题,各大邮件服务商并没有选择加密邮件本身,而是加密了邮件的传输过程,使之无法被中间人窃听。对于邮件服务商自己来说,邮件是明文的。
"安全性"一项显示为TLS加密,只是加密了传输的过程
除此之外,一些邮件服务商还提供了“加密邮件”服务——给邮件设置一个密码,输入密码才能打开。然而这种“加密”仍然是在邮件服务器上完成的,对于提高邮件的加密性没有任何帮助。这种“加密邮件”充其量只能称作“加了密码的邮件”。
QQ邮箱的加密邮件只是给邮件加密码
QQ邮箱的加密就是把原文变成一个加密的压缩文件
基于PKI的电子邮件加密——S/MIME
对邮件本身的加密和解密应该由用户自己来进行,安全多用途网际邮件扩充协议(S/MIME)就是这样一种加密协议。
在S/MIME中,接收者将自己的S/MIME证书告知发送者,其中包含了接收者的公钥。发送者通过验证根证书来确认真实性后,使用公钥加密邮件。接收者使用私钥解密。
在这个过程中,邮件服务商不参与邮件的加密与解密过程,只负责进行邮件的传输,也无法对邮件进行解密。
但是由于S/MIME依赖PKI来验证证书的真实性,所以必须向CA机构申请邮件证书才可以使用。
巴伐利亚啤酒馆:公钥基础设施
zhuanlan.zhihu.com图标
基于信任网络的电子邮件加密——PGP
由于PGP使用信任网络来信任证书,用PGP加密电子邮件可以免去证书验证的限制。
巴伐利亚啤酒馆:信任网络,PGP,GPG
zhuanlan.zhihu.com图标
Gmail和ProtonMail安全吗?
Gmail支持S/MIME加密,ProtonMail支持PGP加密,很多人认为这两家邮箱的加密都足够安全。但是他们支持的方式显然有问题:加密电子邮件的初衷就是避免邮件服务商知道邮件的内容,而Gmail对S/MIME加密的支持方式是让用户上传自己的S/MIME证书,
当您向联系人发送邮件时,如果该收件人与某一公钥关联,Gmail 会自动加密邮件。
也就是说,用户实际上还是把邮件内容交给了Gmail进行加密,而不是用户自己进行了加密。
Gmail要求用户上传公钥甚至私钥
更奇怪的是,Gmail甚至要求用户上传私钥——解密也是由Gmail完成的,Gmail自然也就可以把邮件的内容看得一清二楚。
ProtonMail的做法就更加大包大揽了——至少Gmail的证书还是让用户自己生成的(当然,这可能是因为申请S/MIME证书是个麻烦事),而ProtonMail则自己帮用户生成了密钥。更加令人不解的是,ProtonMail只允许用户下载自己的公钥,而不能下载自己的私钥——也就是说,只有ProtonMail能够解密邮件;如果用户自己想要解密别人发到他ProtonMail邮箱的邮件,由于没有自己的私钥,是无法解密邮件的。
Protonmail只能下载公钥
ProtonMail的另一个缺点是不支持跨域的PGP邮件,而ProtonMail的对外的“加密”邮件和QQ邮箱差不多,也是“加了密码的邮件”,而且还必须要到ProtonMail的网站上输入密码才能解密,从一点上来说甚至还不如QQ邮箱,至少QQ邮箱是真的把加了密码后的信息附在邮件里发到了收件人那里。
当然,这并不是说现在使用Gmail或者ProtonMail就是不安全的,只不过这种安全性是始终依赖于邮件提供商的。只有依赖自己的安全才是最为可靠的,即使使用QQ邮箱,我们也有办法保证自己的安全。
谷歌参加了棱镜计划,而邮件是棱镜计划的目标之一
使用Mailvelope在网页端加密电子邮件
只有把邮件服务商排除在加密和机密的过程外,才能避免邮件服务商看到邮件的原文,对电子邮件进行真正的加密。
使用浏览器插件Mailvelope在网页端上加密自己的电子邮件就是这样一种方法。
Mailvelope
Mailvelope是Chrome和Firefox的扩展插件,在这两个浏览器的插件商店里都可以找到。
Mailvelope - Firefox 附加组件
addons.mozilla.org图标
https://chrome.google.com/webstore/detail/mailvelope/
chrome.google.com
插件安装完成之后,点击Mailvelope的插件图标进入设置页面。
Mailvelope的密钥管理页面
如果已经有了密钥,可以通过导入密钥将其导入。如果没有密钥,要先生成密钥。
生成Mailvelope需要输入一个密钥名,该密钥对应的电子邮箱(只有送往这个邮箱的邮件才会被该密钥加密),以及密码。(其实密码不是必须的,但是Mailvelope生成密钥时要求必须输入密码)
Mailvelope生成密钥
最后一项是“上传公钥到Mailvelope密钥服务器”,其实用处不大,毕竟没人会信任从服务器上下载的密钥。
发送加密电子邮件
安装Mailvekope后,在网页端写邮件的时候,右上角会出现一个按钮
Mailvelope加密按钮
点击后会打开邮件加密窗口,如果拥有关联了这封邮件的收件人的公钥,收件邮箱就会显示为绿色。可以使用自己的密钥为邮件签名。(不过邮件签名对于网页端没什么用)
Mailvelope加密窗口
点击加密,就会回到写邮件的界面,但是内容都变成了密文。
邮件内容变成了密文
这说明邮件内容已经完成加密,可以发送了。
接收者解密电子邮件
打开一个加密的邮件,加密的内容上会出现一把锁,此时鼠标指上去会出现一把钥匙。
这是个QQ邮箱
如果你拥有加密这封邮件所用的公钥对应的私钥,输入密钥的密码之后就可以解密这封邮件。
解密后的信息
添加网站支持
Mailvelope默认支持网站数量有限,QQ邮箱和Outlook都不在其默认支持列表上,需要在插件设置中将这些网站的邮箱域名手动添加到选项->List of Email Providerh中来启用支持。
添加对QQ邮箱的域名支持
在邮件客户端加密电子邮件
除了在网页端,邮件客户端也可以进行电子邮件的加密。在这里介绍Thunderbird客户端上的电子邮件加密。
Thunderbird是Mozilla开发的一款邮件客户端,支持使用Enigmail插件进行PGP加密。
Enigmail的密钥管理
Enigmail和Mailvelope的密钥是可以通用的。(所有PGP密钥都可以通用)
在Enigmail上创建密钥可以不用密码。只能为已经使用Thunderbird登陆的邮箱创建密钥。
Enigmail创建密钥
对于使用哪个密钥来加密邮件可以通过收件人规则来设置——加密使用的密钥所对应的邮箱可以不与收件人的邮箱相同。
收件人规则
在写邮件的窗口中可以用Enigmail进行加密和签名,加密所使用的密钥由收件人规则决定,签名使用发件人的密钥。
在Thunderbird中写加密邮件
收到加密邮件时,如果有对应的私钥,就会自动进行解密。如果有对方的公钥,可以对签名进行验证。
收件人解密邮件
点击右上角的锁图标可以查看安全信息
包括签名信息,算法和加密信息
from https://zhuanlan.zhihu.com/p/34632920
http://web.archive.org/web/20210609102501/https://zhuanlan.zhihu.com/p/34632920
No comments:
Post a Comment