前言:加密的即时通讯软件

现如今提到加密聊天软件,大家往往就是那么几款,比较火热的有 telegram ,以及在国内也有一些使用者的 signal 。但是遗憾的是,这两款加密聊天软件都已经被 GFW 屏蔽,使用他们通讯必须用 shadowsocks 之类的代理服务才行,这又会增加新的风险。而从 telegram 和 signal 本身而谈,它们的设计也同样问题重重:

telegram 的问题:

  1. 使用手机号注册;
  2. 聊天内容加密的加密协议仅是密码学爱好者的发明,缺乏严格的对抗测试记录。

signal 的加密协议倒是靠谱多了,它的开发者最先提出了 axolotl 协议(后改名为 signal protocol),如今已是相当主流的加密协议,是用于 xmpp 的 omemo 加密协议的基础。

但是 signal 本身同样存在严重问题:

  1. 和 telegram 一样需要手机号注册;
  2. 其运营公司提倡用 signal 取代短信,甚至电话功能(和微信运营者当年的措辞如出一辙),运营目的可疑。

我们在一众即时通讯软件里最推荐使用 xmpp 协议的各种即时通讯软件,它们分散在不同的服务器上,使用 xmpp 协议串联起来,用上 otr 、omemo 等加密协议能让聊天信息分散且无法被监视者解析。

但是要熟练地用好 xmpp 的邦联制特性,需要花时间学习信息技术知识,毕竟现代信息技术、密码学都是严密的科学、精密的武器,想用好它们需要下功夫,我们也建议您在信息技术方面多下点功夫。

但假如您一时间忙于工作,无法拿出足够的空闲时间和精力来认真学习这些技术,却需要立刻掌握一些加密技术来武装自己的话,我们依然推荐您使用这款入门级的加密聊天软件,相信它会成为您走上使用现代信息技术和密码学保护自己的隐私安全的垫脚石。

session 即时通讯

session 是一款自由的、适配多种系统、多种平台的加密即时聊天软件,它正是由 signal 改造而来,且和其他加密聊天软件相比,平衡了上手难度和安全性,有四大优势:

一、注册简单。session 注册极其简单,用户仅需安装好客户端使用便可以随机地取得自己的 session id,之后便可长期使用此 ID,无需繁琐的注册、验证流程。

二、帐号访问安全且不容易受阻断。所有的 session 用户在登录时,都将通过类似于 tor 网络的多节点(洋葱路由)代理服务,连接到深藏幕后的 session 服务节点(不唯一),用户使用 session 等于获得了额外的“梯子”。

三、加密的端到端聊天。session 聊天的文字内容使用已经得到广泛运用的加密协议 signal protocol,加密后的文本几乎无法破解。

四、文件传输功能安全且易用。并非所有的聊天软件都有安全易用的文件传输功能,而 session 的文件传输功能使用了类似 firefox send 的技术,兼顾安全性与易用性。

下面就让我们来了解一下该如何取得 session 的安装包,以及具体的使用操作。

一、下载安装

以下提供两种下载方法:

  1. 通过 session 官网下载。session 在它的官网上提供了下载链接,其中既包括 Android 版和 ios 版等手机客户端安装包,也包括 GNU/Linux版、Macos 版和 Windows 版等电脑版客户端安装包。
  2. 通过 f-droid 下载。只提供自由软件的应用商店 f-droid 中可以下载 session,访问 f-droid 网页版的session 下载页面即可下载。

提示:安卓用户可以下载并常备一个 f-droid,便于随时更新 session ,以及获取各类功能各异且安全可靠的自由软件。

注意(仅对于 ios 用户): 尽管 app store 中包含 session ,但苹果官方对中国大陆用户“锁区”,不“翻墙”,将无法下载安装 session 。

建议(仅对于 ios 用户):如果您不想为安装 session 而专门去找各种“翻墙”代理服务,我们还是建议您卖掉您的 iphone ,改用 android ——不过既然要换手机,不妨索性趁机买个能解锁引导器的,到手后解锁引导器并安装自由的 android 发行版(如 grapheneos、calyxos、lineageos 等)。

二、创建帐号及恢复帐号

现在我们以 session 的 android 客户端为例,来讲解该如何使用 session 。

  1. 当您第一次打开 session 时,您将看到“创建 Session ID”和“继续使用您的Session ID”;

提示:“继续使用您的Session ID”下方的“关联设备”与“继续使用您的Session ID”将跳转到同一页面。

  1. 我们选择“创建 Session ID”,软件将自动帮我们随机生成一个 Session ID,我们点击“继续”,然后为自己设置一个昵称,然后选择“慢速模式”;

提示:“快速模式”需要通过 Google 的通知服务器,而且该功能依赖于私有的函数库,因此已在 f-droid 提供的版本中剔除。

  1. 注册好您的帐号以后,我们建议您立刻跟随提示,保存“恢复口令”。Session ID 的“恢复口令”都由一连串单词组成,是您再次登录或者在其他设备上登录您的 session 帐号的唯一凭证,请务必保存好。

提示:您可以将“恢复口令”复制黏贴到别处保存成文件,如果您不信任手机上的文字编辑程序,您还可以将恢复口令抄写下来。

三、添加好友

现在您可以添加联系人,开始与好友在 session 上的畅聊。

添加联系人的唯一方式就是知道对方的 Session ID。您需要获取好友的 Session ID。您可以选择当面获得,也可以从其他在线渠道取得对方的 Session ID。

但需要注意的是,Session ID 也为身份认证公钥的指纹,是验证 session 好友身份的最重要的凭证。因此如何取得 Session ID 将影响到您与您的好友之间帐号的认证与信任关系:

  1. 对方当面向您提供了 Seession ID 。然后您与对方互相添加了好友,发送了消息。这种取得方式能证明对方使用的 Session ID 是可靠的。
  2. 对方的 Session ID 由其他聊天软件、社交媒体上取得。在这种情况下则需要考虑对方是否为冒名顶替,并设法验证。

提示:您可以选择多种认证方式:由你亲自核对过身份的 session 好友担保;和对方用验证过的加密邮箱、xmpp 信道交叉担保等等。

注意:各种私有聊天软件上的通信,都不能算可信信道,您如果确实需要通过私有软件的信道发送或接收 session ID ,请务必仔细核实您或对方发出或接收的 Session ID ,同时小心您或对方的 Session ID 被私有软件厂商、政府以及其他试图窃取您隐私并伤害您的人窃取并加以利用。如果您不得不使用私有软件传递 Session ID,您可参看本节“附”。

提示:为了方便大家使用“恢复口令”和 Session ID,session 客户端内置了扫码功能,在其他设备上登录您的 session 帐号也可以通过扫描当前设备上的 session 帐号的二维码实现,添加对方好友也是如此。

附:如何通过私有聊天软件、社交媒体传播 Session ID

方法一:使用临时的 Session ID

注意:生成临时 Session ID 前,请务必保存好“恢复口令”!

  1. 重置 session。使用 android 的“应用管理/清除存储空间”功能清除 session 客户端的用户文件,使客户端恢复到安装初始的状态;
  2. 创建一个新的 Session ID 作为临时 Session ID;
  3. 在私有软件上告诉对方此临时的 Session ID;
  4. 等对方添加您为好友后,以其他方式验证身份,比如询问一些只有彼此知道的秘密。
  5. 通过 session 的信道告诉对方,您的长期使用的 Session ID;
  6. 再次重置 session ,使用“恢复口令”恢复长期的 Session ID,原本的临时 Session ID 便可废弃。

提示:在此情形下,您还可以适当采用私有软件信道来作为辅助的验证信道,比如让对方在私有软件信道上发送一些消息,看看您是否能正常接收。

方法二:使用 firefox send

我们可以使用 firefox send 将写有 Session ID 的文件传输给对方。

提示:尽管 mozilla 放弃了 firefox send,但民间的开发者依旧在运维此项目,目前可用的非官方 firefox send 服务器可见:https://gitlab.com/timvisee/send-instances

考虑到国内用户面临的糟糕的软件环境,私有浏览器对 firefox send 的糟糕的支持情况。在发给对方包含您 Session ID 的文件前,您需要验证对方是否可用 firefox send。验证方法如下:

  1. 向对方指定一个 firefox send 服务器;
  2. 要求对方上传任意一个文件到此 firefox send 服务器;
  3. 要求对方得到下载链接后,自主下载此文件;
  4. 如果对方能成功下载此文件,则说明可用您指定的 firefox send 服务器。

在验证对方的 firefox send 可用的情况下,您可以通过 firefox send 将写有您 Session ID 的文件发送给对方。

注意:如果私有通信平台试图拦截,那么对方必然会下载失败——亦即,如果对方下载成功了,说明你成功瞒天过海了。

注意:请务必让对方把 firefox send 的下载链接复制黏贴到浏览器里打开,而不能使用私有通信软件内置的浏览器。

提示:此方法可以和临时 Session ID 配合使用,即用 firefox send 传输包含临时 Session ID 的文件,以提高保密性。

三、文件传输

在基本的文字聊天外,session 的文件传输功能同样值得关注。

session 文件传输的加密方式与传统的文字聊天并不相同,但也十分可靠。session 的文字聊天用的是已经得到广泛运用的 signal protocol,而发文件的加密方式则类似于 firefox send 之类的一次性网盘:对方下载文件后,文件就会在服务器上失效。

其基本流程是:

  1. 选择要上传的文件;
  2. 该文件在本地加密;
  3. 加密后的文件上传到 session 的服务器;
  4. 文件上传完成后将包含加密后文件地址的信息,与加密此文件的密钥同时通过聊天信道传给对方;
  5. 对方 session 的服务器通信下载、解密并取得文件。

注意:加密用的密钥本身直接通过加密的聊天信道传播,在传输的过程中也是加密的。

听起来似乎挺麻烦?步骤挺多?其实不是的,背后的原理解释起来虽然有点麻烦,但这些流程主要由程序自动完成,用户要做的只有选择并上传文件,和确认并下载文件,看着仿佛和其他带文件传输功能的聊天软件差不多。

session 的文件传输功能虽然在使用体验上类似于一般的私有聊天软件的文件传输功能,但它是端到端加密的,从我们发出方的客户端这里加密,到对方接收方手里才会解密,无论传输的过程中流转了多少中间服务器,这份文件都是以密件的形式存在的。如果有谁真的渗透进了这些中间服务器,取得了密文,他也没有密钥,也就谈不上取得这份文件。而密钥更是直接通过采用了 signal protocol 的信道直接传输,它本身在传输的过程中也是加密的。不过比较遗憾的是,目前通过 session 传输的文件大小不能超过 5MB 。

近来有传言政府将大力监控 airdrop ,他们很有可能做得到,因为苹果公司终究只是一个不敢让用户看看它的“核心科技”,反而也在试图窃取用户隐私的商业公司罢了,他们为他们自己的监视留下了后门,这些后门不能保证不被其他势力,比如政府利用。在 QQ、微信上传输文件倒也有可能会加密,但这种加密是用来防“友商”窃取腾讯机密的,不是用来保护用户隐私的。腾讯完完全全知道用户上传了什么,甚至会私自吞掉用户上传的文件。想想 QQ 群里有多少因为“违规”而无法下载的文件吧。

注意:所谓语音聊天,本质上就是把录音发给对方,本质上也就是给对方发一个音频文件。session 语音聊天的加密方式和其他文件传输的加密方式并无本质区别。

四、实时视频通话功能

session 的实时音视频通话功能主要是加密的 rtp (基于 udp )直连,其会话流量完全不通过文字聊天时要走的多节点代理服务,而是您和对方直接利用 signal protocol 和消息信道交换双方的 ip 地址,再与好友开展加密的音视频聊天。目前,session 的视频通话功能尚处于测试阶段,没有特殊要求不建议使用。

五、传输 session 的安装包给好友

考虑到国内互联网的糟糕状况,我们不能保证每一个看到这篇文章的朋友都有能力直接从 session 的官网上下载到安装包。这里我们首先建议还是先下载 f-droid,然后再从 f-droid 里下载 session 。但 f-droid 同样受到了网络干扰,下载软件的状况时好时坏。因此还需要有其他办法传 session 的安装包给我们的朋友。

对于那些对自由软件以及自由的社交媒体(比如 mastodon 、lemmy)有一定了解的朋友,我们想让对方取得 session 的安装包将不会是难事,只要对方使用自由软件,我们和对方都将使用各种各样的自由软件完成传输。

但是对那些不知道且不使用自由软件,长期困在私有软件的怪圈里的朋友来说,我们就没法很好地使用自由软件传给他们安装包。那么我们又该怎么做呢?

线下认识的朋友

我们建议您使用面对面的传输方式将安装包交给对方:

  1. 使用 otg 转接口搭配 u 盘、读卡器,将软件包交给对方。
  2. 使用蓝牙将安装包传给对方(如果您不嫌传输速度慢)。
  3. 使用 f-droid 的“附近”功能将自己已经安装好的 Session 分享给对方。

注意:我们不建议您用私有的聊天软件直接把安装包传给对方,一方面我们不能保证安装包一定不会被私有软件厂商吞掉,一方面我们也不能保证对方得到的安装包没遭到篡改。

注意:我们也不建议您使用私有软件厂商提供的面对面传输服务,例如之前提到的 airdrop,这些面对面传输服务,除了不安全的原因外,还很有可能各个厂商的互不兼容,白白浪费您的尝试时间。

只在线上联系的朋友

我们将无法避免与对方使用私有的聊天软件或社交平台与对方联系。可选的方法有:

  1. 尽可能首先考虑告诉对方下载方法,让对方自主下载安装包。
  2. 如果对方不能自主下载,我们也尽量使用 firefox send 发给对方安装包。
  3. 如果对方无法使用 firefox send ,也可以适当考虑用私有聊天软件的传输文件的方式传给对方安装包。

提示:使用 firefox send 前请先验证对方是否可以使用 firefox send 。

注意:请务必小心直接在私有聊天软件内发送 session 安装包带来的安全风险。

虽然 session 在添加好友方面等方面还有很多不足,但它平衡好了加密和使用门槛,一定能成为您走上加密通信道路的垫脚石。