手把手教你使用端到端加密聊天:综述

手把手教你使用端到端加密聊天:综述

看起来有些标题党,因为这其实是一篇面向小白的GnuPG教程,可我要是这么写的话也不会有人愿意看。不过还好,这意味着你不但可以将它用于聊天加密,也可以用于网盘内容加密,或者加密文件传输。

对于聊天而言,这主要是面向中国大陆用户的教程,国外是有现成的端到端加密即时通信APP可用的。

众所周知,为了确保能够进行安全审查,建立在中国大陆地区的即时通信服务(例如QQ、微信等)需要能至少保存不少于六个月的聊天记录,所以如果你想传递一些私密的信息、文件时,通过这些渠道就不太安全了,即使你相信GOV、相信腾讯,但且不说消息漫游功能会帮你同步到所有登录的设备上,万一后台查询接口被别有用心的人利用了,所有数据都有可能被公之于众,要是你了解过社工库,应该知道这些信息泄露都是广泛存在且不可逆的。

那么有没有什么解决方案呢?在这里我们将介绍GnuPG(GPG)的用法,这是一个应用广泛开源隐私保护程序,但因为现有网络上的使用资料普遍较为复杂,对大部分人来说门槛较高,使得它普及程度不高。为此我们不妨舍弃部分不必要的安全性和匿名性,这篇教程将会教你在主流系统平台上使用GnuPG保护你的通信安全(包括聊天、传文件等),即使你一点也没有听说过GPG,一点也不了解密码学,也可以帮助你快速上手。

前言

这一部分我首先将说明为什么在即时通信软件上传输私密信息需要加密,以及端到端加密是什么,最后向你介绍GPG软件的由来。

即时通信服务的隐私问题

目前中国大陆主流的即时通信服务就是QQ和微信了,这两种聊天软件是否安全呢?

其实大部分情况下是安全的,首先我们看一下他们的运作方式,首先你发送的消息在你的本地进行加密,然后发送至服务器,但数据到达服务端之后将会完全解密,并由服务器进行相应的处理,再次加密后到达接收者的设备上。

那么这是否表明任何消息,你的银行卡账号密码,你的个人私密照片等都可以通过他们进行传递呢?

当然不是,我列举出了以下可能的信息泄露方式:

数据库泄露

我前面说过,根据法律法规要求,任何在中国大陆提供即时通讯的服务商,必须要能够存储至少六个月的聊天记录以供查阅。我们当然有理由相信腾讯等大厂的数据安全性,但去年十一月(2021年11月)传出了腾讯数据库泄露,多家国企和政府机关关闭微信办公的事情,虽然后面被腾讯官方辟谣。

网传腾讯数据库泄露

但紧接着十二月又爆出深圳大学以泄密为由解散大量微信群聊,这一点我向深圳同学证实确实属实。

深圳大学解散微信群

有没有泄密事实上我一个普通人无从得知,但是无风不起浪,做好自我保护才是最重要的。

中间人攻击

QQ和微信使用的都是TLS加密方式,如果你不清楚什么叫TLS和中间人攻击,也没必要去查。
中间人攻击在网络上其实不好实现,但如果你电脑上安装了审查软件那就是另一回事了。什么叫审查软件呢?比如你公司帮你安装的网络管理软件,抑或是你不小心中的木马,再者比如走在大街上突然被安装的监控中心APP,都属于审查软件的范畴。审查软件可以帮你在本地解开TLS连接,然后审查完毕有问题自动帮你拦截,没问题后又原封不动地发回去,是不是很智能呀。

监管机构

广告商

在微信和QQ随便聊点什么,然后朋友圈、淘宝立马帮你推荐对应广告,这种事情想必很多人都遇到过吧。问个小问题,如果他们没有向广告商喂数据,那么广告商是派了狗崽队跟着你才知道你要干啥吗?

什么是端到端加密?

端到端加密(End-to-end Encryption, E2EE),是一种只有参与通信的用户之间可以解密内容的通信方式。前面我举过例子,当你使用QQ和微信时,虽然你的消息到达腾讯服务器前会经过加密,但是腾讯服务器最终还是会将它解开,因为腾讯服务器上事实上保存了解开你的加密信息所需的密钥。而端到端加密就不同了,当你使用端到端加密时,需要在本地先生成密钥,然后和目标用户交换,此时腾讯服务器上是不会保存你的密钥的(事实上大多数E2EE系统采用非对称加密,腾讯是可以看到你的公钥的,但是公钥只能用于加密不能解密,关于这个问题我们稍后再讨论),也就是说你的加密信息只能被你的消息接收者解开。

什么以及为什么是GPG

GPG全名GNU Privacy Guard,是一个密码学软件。你可以用它来干什么呢?首先可以生成并管理密钥,在基于端到端加密的通信系统中,你的密钥就是你的身份(这与数字签名有关,我们将在后续内容进行讨论);其次可以用来加密以及解密数据;最后可以用来签名内容。

之所以选择GPG,是因为他是OpenPGP协议的一个开源实现,你可以自由地使用它,甚至可以审查和修改他的代码。经过了长时间的检验,他事实上是很安全的。并且它在主流平台上都有对应的软件,可以方便地使用。

GPG的使用方式

各平台的GPG使用方式几乎是一样的,所以我们先看看整体使用流程,然后再详细看不同平台上软件的使用方法。

整体使用流程

当你第一次打开GPG相关软件,第一件事便是生成密钥对,同时程序会要求你输入一些名称和邮件,这里推荐使用昵称即可,邮件如果你想用于电子邮件加密,可以填写一个真实邮箱,否则随便填就行。然后程序就开始生成密钥,这里密钥其实和密码意思差不多,只不过不需要你自己输入,程序会帮你生成。

而且注意,我说的是密钥对,这意味着一次性将会生成两个密钥,一个被称为公钥(Public Key),另一个被称为私钥(Private Key)。顾名思义,公钥是可以公开的,而私钥则需要你保管好,必要时私钥可以设置密码保护或者放入外部智能卡(文章拾遗部分会简单提到)以便安全。

此时公钥就可以通过微信或者QQ发送给你需要通信的人,然后把私钥保管好,为了安全甚至可以导出到不再使用的U盘备份。

对方收到公钥时,程序会提示是否需要认证(Confirm)密钥,这是为了防止公钥被中途掉包,对方会在程序时看见一个被称为指纹(Fingerprint)的字符串,同时你会发现你的密钥上也有这个字符串,并且由于不同的密钥对应的指纹也不相同,此时你只需要打个电话,或者线下交流告诉他你的字符串,他进行核对,完全一致则代表公钥没有被掉包。

那么为什么会有两个密钥的,当你使用加密功能时,需要用到对方的公钥,然后当对方收到加密消息需要解密时用到的则是自己的私钥。私钥事实上也代表着一个人的身份,这是由于私钥还能进行数字签名,数字签名可以确保消息确实是你发出去的而不是其他人,并且在通过网络传送过程中没有被篡改,而只要对方有你的公钥,就可以进行验证。

看起来很乱?其实很简单,既然私钥是你不想公开的,那便是你用来签名的,并且可以解密消息。而公钥既然都公开了,那当然是方便别人检验你签名,或者用来加密给你的消息的。

不同平台的GPG客户端使用

了解了GPG的整体工作流程后,下面就是不同平台上具体软件的使用方法,这个部分包含移动端(Android、iOS)、PC端(Windows、Linux、Mac):
手把手教你使用端到端加密聊天:Android篇
手把手教你使用端到端加密聊天:iOS篇
未完待续……

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注