利用OpenPGP实现邮件端到端加密
简介
什么是OpenPGP?
OpenPGP是一种以安全的“端到端”方式对数据(例如电子邮件)进行加密和/或签名的方法。这意味着,邮件在您的计算机上使用收件人的公钥进行加密,电子邮件服务器不知道邮件的内容。然后,邮件的收件人使用其私钥在自己的计算机上解密邮件。
我们不是来探讨技术原理的,所以说,本文不会深入涉及密码学概念,实用是本文的目的。邮件本身就是实用的东西,我们每天都在用QQ、163发文件,存资料,然而我们邮件的内容是否是安全的呢?邮件的内容是否会受到
或泄露?有没有大他者正watching
you?不搞清楚这些问题,总感觉安全感受到侵犯。可惜国内公司一向不重视用户隐私权,在他们眼里,“中国用户愿意用隐私换‘便利’”,窥视用户数据好像成了一件里所应当的事情。口头上的承诺是廉价的,只有技术上的保证是有力的。
OpenPGP推出十多年了,然而在国内未得到重视,未被广泛使用,向普通用户介绍这一工具,从而维护通信自由与秘密的权利,这就是我写下本文的目的。
邮箱客户端
以下是使用OpenPGP加密邮件的必要条件:
1.一个支持IMAP/POP3和SMTP的邮箱账户
2.支持PGP的邮箱客户端
3.双方都有可用的PGP密钥
4.知道对方的公钥
注册邮箱用第三方客户端登陆邮箱账户不在本文讨论范围。由于端到端加密的特性,我们可以不考虑邮件服务器的安全性了。
根据官网介绍,Windows平台上支持OpenPGP的邮箱客户端有Claws Mail、eM Client、EverDesk、The Bat!等,我则推荐选用Mozilla开发的Thunderbird,它功能强大,开源,可扩展性强,用户较多。Linux/Max平台上的客户端则大多支持OpenPGP标准。安卓可用K-9 Mail,顺便提一句,前两天Thunderbird好像接手了K-9 Mail的开发。
网上一些年代比较久远的教程还涉及PGPDesktop、Enigmail插件等,而Thunderbird早已原生自带了一个简洁易用的OpenPGP密钥管理器,不必另行安装,方便很多。
官网:https://www.thunderbird.net/zh-CN/
创建个人密钥
生成密钥
通过右上角菜单键,打开“账户设置”标签页,进入“端到端加密”设置页,点“添加密钥”为账户创建OpenPGP密钥
如果已有密钥,导入到新客户端则选第二项,验证并导入私钥。
有效期可以设置的长一点,不必频繁换。据估计,按照目前的算力,破解RSA-3072需要二十年,破解EdDSA密钥则更久,况且也没人会闲的搞你去。密钥类型,ECC体积小,运算快,RSA则兼容性更好。
如图,成功生成了OpenPGP密钥
备份密钥
设置密码,之后就得到了一个私钥备份。要留存好这个私钥,更换电脑了需要导入它。公钥则不必备份,因为公钥是私钥的一部分,通过私钥可以推算出公钥,反过来则不行。
导出公钥,并发布到公共服务器
前面提到,要给人写邮件,必须知道对方的公钥,那现在换位思考,如果别人要给你写邮件的话,也需要知道你的公钥。
如果写邮件之前都手动交换密钥当然可以,但未免有点麻烦,PGP Key Server则解决了这个问题。KeyServer是一个数据库,用户把各自的公钥上传上去,别人要给你写邮件只需到KeyServer上查询你的公钥即可。
KeyServer服务器 :
https://keys.openpgp.org/ (推荐)
http://keyserver.pgp.com/
https://keyserver.ubuntu.com/
http://pgp.mit.edu/
……
访问 https://keys.openpgp.org/upload ,上传刚刚导出的公钥(文件名里带pub的)
点”Send Verification Email“,发送验证邮件,然后登录邮箱,访问链接验证。完事。
邮件收发
获取公钥
要给别人发邮件,需要对方的公钥。如果对方也使用OpenPGP,并在KeyServer公布了公钥,我们就可以在网上检索到。
点Thunderbird右上角菜单-工具,打开OpenPGP密钥管理器,点密钥服务器-在网上寻找密钥,查询到后接受并导入。(Protonmail等加密邮箱也支持OpenPGP,也能搜到,给Proton邮箱发件记得附带公钥)
发邮件
启用加密。加密确保内容私密,签名可确保内容完整,不签也行。主题加密就是标题也加密。对方给你发件也需要你的公钥,如果对方知道你的公钥可不附带。
成功收到邮件。必须用支持OpenPGP的客户端,否则收到被加密的附件。客户端必须导入了你的OpenPGP私钥,才能正确解密。
(原发布于:2022-06-17 zhihu )
1 |
|
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!