文章
技术

用Matrix进行匿名加密的私聊

Matrix是一个强加密、去中心化的即时通信协议,Matrix也有多种开源客户端和服务器实现。Matrix协议,对标的是同为即时通信软件的Telegram,Discord。比起这两者,Matrix无需邮箱和手机号就可以注册,免除个人信息泄露之忧。本文介绍Matrix协议和它的一个客户端Element(原名Riot.im)。下文为了方便起见,统称为Matrix。

Element桌面和移动客户端截图

Element桌面和移动客户端截图

Matrix有很多优点,包括:

  1. 隐私:注册Matrix不需要邮箱和手机号,只需要用户名和密码。使用Matrix无需担心手机号和邮箱泄露的危险。
  2. 安全加密:Matrix私聊和群聊是端到端加密的,即使是服务器的所有者,也无法看到用户的聊天内容。
  3. 开源:Matrix客户端和服务器软件全部开源,任何人都可以审查代码,检查代码中的漏洞。有兴趣的人也可以用开源代码搭建自己的Matrix服务器。
  4. 去中心化:Matrix是联邦式协议,Matrix网络由分布在世界各地,由不同个人和组织运营的服务器组成,因此Matrix协议不容易被单个组织垄断。

Matrix网络组成结构

Matrix网络是联邦式结构,由多个地位平等的服务器连接而成

“联邦式协议”听上去十分晦涩,事实上,电子邮件就是一种联邦式协议,每个电子邮件服务器之间的地位平等。在收发电子邮件时,只要指定一个电子邮件服务器和服务器上的用户,就可以通信。例如example@gmail.com这个电子邮件地址,example是用户名,gmail.com是服务器名。

在Telegram,微信等聊天软件中,添加好友需要指定手机号或者用户名。而Matrix非常像电子邮件,一个matrix账号ID如下:

example@matrix.org

这里example是用户名,matrix.org是服务器名。Matrix添加好友和收发电邮一样,需要填写完整的MatrixID@服务器名。在这里就是example@matrix.org。

安全使用Matrix

1. 选择服务器

电子邮件有很多服务商,例如Gmail,Hotmail,ProtonMail。Matrix作为一种与之类似的联邦式协议,自然也有很多服务器可以选择。Matrix网站上提供了一份服务器列表,可供选择注册:

https://www.hello-matrix.net/public_servers.php

不过,本文推荐使用Matrix官方的服务器matrix.org,matrix官方服务器安全性和稳定性有保证,配置也是最容易的。

2. 网页版客户端+Tor

Matrix协议的主流客户端叫Element(原名Riot.im)。Element有桌面和移动客户端,提供和Telegram、Discord等聊天工具类似的体验,不过这里推荐在Tor浏览器中使用网页版(移动端)。并且账号注册和使用的全程都用网页版在Tor浏览器中完成。

Tor+网页版的优势:

  1. 隐匿IP:Element客户端配置代理比较麻烦。而在Tor浏览器中,不必费力配置客户端的代理,可以做到全程隐匿IP。
  2. 易用性:很多聊天软件网页版会比客户端少些功能。而Element和这些软件不同,Element网页版和桌面客户端的界面完全相同,功能也完全等价。
  3. 隐蔽性:网页版比App的隐蔽性更好,只要使用无痕模式登录,别人就无法发觉Matrix客户端的存在。

Tor+网页版全程匿名,注册不需要邮箱和手机,打开浏览器就能使用。**全部通信高度加密,方便程度又可比论坛私信,可作为私信的加密替代。**推荐用这种方式使用Matrix。

注册和使用

Element的下载页面提供网页版,也可以点以下链接直接进入注册页面。注意全过程应当用Tor浏览器完成。

https://app.element.io/#/register

首次注册如下图:

图1:首次注册

图1:首次注册

选择上面的“Free”可以选择直接在matrix.org服务器上注册(推荐)。选择“Premium”,可以使用Matrix官网提供的主机自己搭建服务器。选择“Advanced”,可以使用第三方服务器。

注册时只要提供用户名和密码即可,Email是可选的,可以不输入。

图2:邮箱

图2:邮箱

接下来会弹出提醒,如果不绑定电子邮箱,若忘记密码则无法回复。由于这里追求匿名,点continue继续。

如果用Tor注册,接下来会有Google reCaptcha验证码,点完验证码之后即完成注册,如图:

图3:注册完成

图3:注册完成的界面

以后要进入Matrix网页版,访问app.element.io就可以直接登录。

创建恢复密钥

Matrix使用端到端加密,加密后的聊天记录又(可能)保存在多个服务器上,为了能查看历史聊天记录,需要创建恢复密钥。

恢复密钥并不复杂,本质上就是给你的账户设置两道密码。登录密码用来登录Matrix账户,恢复密钥用来查看历史消息。当你在新的设备上登录时,Matrix服务器会要求验证第二道密码,没有第二密码(恢复密钥)仍然可以登录,但是无法查看历史消息。

恢复密钥的设置方法如下:

点击左上头像,选择【settings】,在右侧选择【Security & Privacy】,如图。

图4:设置

图4:设置

在左侧选择绿色的【Set up】按钮,弹出如下页面。

图5:恢复密钥选项

图5:恢复密钥选项

这里选择第二项【Enter a Security Phrase】。

接下来需要输入第二道密码,这里设置的密码就用来恢复聊天记录。设置完成后,会显示一个12组每组4个的密钥,如下图,建议把这个密钥备份并保管好。如果上面的第二道密码忘记,可以用这个密钥串解锁聊天记录:

图6:恢复密钥串

图6:恢复密钥串

如果你需要管理这些用户名、密码、密钥串,可以使用KeepassXC等密码管理器。

开始聊天

在Matrix中,知道对方的ID(类似example@matrix.org这格式),点击左边栏上边的“+”号(Start Chat)就可以私聊了。

群聊的方法类似。点击左边栏下方的“+”号(Add Room)就可以创建或加入群聊。选择explore public rooms,可以使用加群连接加入他人群聊。群ID类似于以下格式:

https://matrix.to/#/!xTTMQbujXcFdGQJgAS:matrix.org?via=matrix.org

也可以选择Create new room自行建群。

Matrix的其它用法和主流聊天软件类似,在此不再赘述。

更多Matrix资料可见:

[1] https://matrixim.cc/sfd2017-matrix.pdf,北大Matrix兴趣社团的slides。

[2] https://matrix.org/docs/develop Matrix开发文档,可用于bot,bridge的开发参考。也描述了很多Matrix的内部细节。

菜单
  1. thphd   2047前站长

    暂不确定如何与第三方用户系统整合。

    依赖项是postgres,看样子得开个VM养着。

    还是直接用公用服务器比较科学,然后把自己id贴到2047的签名上

  2. 李舜生  

    https://matrix.org/blog/2019/04/11/we-have-discovered-and-addressed-a-security-breach-updated-2019-04-12

    我不建议用Matrix进行匿名加密的私聊,因为上面的这个前科。

  3. 沉默的广场  

    @李舜生 #118018

    原文摘录:

    TL;DR: An attacker gained access to the servers hosting Matrix.org. The intruder had access to the production databases, potentially giving them access to unencrypted message data, password hashes and access tokens. As a precaution, if you're a matrix.org user you should change your password now.

    The matrix.org homeserver has been rebuilt and is running securely; bridges and other ancillary services (e.g. this blog) will follow as soon as possible. Modular.im homeservers have not been affected by this outage.

    这是一次拖库事件,黑客利用服务器上的漏洞,获得了服务器数据的访问权限。事实上如果采用了tor上网和端到端加密,黑客能获得的信息相当有限。

    这次事件并非matrix协议的缺陷或者运维故意为之,甚至也不是matrix软件的漏洞。原文是这样的:

    We were using Jenkins for continuous integration (automatically testing our software). The version of Jenkins we were using had a vulnerability (CVE-2019-1003000, CVE-2019-1003001, CVE-2019-1003002) which allowed an attacker to hijack credentials (forwarded ssh keys), giving access to our production infrastructure. Thanks to @jaikeysarraf for drawing this to our attention.

    是服务器运维使用的第三方软件的问题。

    这事件反而证明了matrix的安全性,在全程使用tor和端到端加密的情况下,即使服务器不能信任,也是足够安全的。(实际上匿名上网就是基于不信任原则)。

    相反如果是telegram,discord服务器被拖库,或者迫于政府压力交出数据(应该时刻注意这一点),IP地址、电话号码、聊天记录就一览无余了。

  4. Shogun NL
    Shogun   兔子严肃思考了一段时间,随后便揪出了有嫌疑的一小撮

    能不能设置引用别人对话的最大字数?Matrix的群聊体验有点难受,quote别人时是一整段话,若群里的大家都是以这种方式聊天,晚上来的人看到那么长的历史纪录都frustrated了,无心浏览。

  5. 沉默的广场  

    @Tooyames #118202 不能。quote别人应该是用telegram的习惯,改掉这个习惯就好了:)

  6. thphd   2047前站长

    此贴置顶3d。

    欢迎大家加我Matrix账号 @thphd:matrix.org或者加入2047公共讨论群 https://matrix.to/#/#teahall:matrix.org

    现在matrix注册是需要用电子邮件认证的,推荐大家用fake mail generator生成一个随机收件地址完成注册,不要用自己的常用邮件地址。

  7. IE11  

    有些情况下,分布式也有坏处,比如你不知道哪个节点在不在用华为设备。建议参考 https://2047.one/t/20196

  8. 孙先树  

    那么我要提问 请问如何用Matrix搜索单身漂亮的女生并建立联系?

  9. natasha 饭姐
    natasha 回复 孙先树 /p/197387

    matrix帮不了你,请自行tinder

  10. yhm  

    我使用 element 遇到的问题

    matrix 支持聊天框里使用 markdown 写东西。

    但是相比 fluffychat , element 有个坏处就是,如果你要编辑一个已经发布的内容,则它并不是去取得该内容的源码让你编辑,而是根据展示效果尝试反推源码。

    我认为这跟糟糕。譬如,我的一个代码快是这样写的:

    
    *code* : 
    
    ~~~ sh
    echo 嘿嘿
    ~~~
    
    

    用 fluffychat 编辑,就可以编辑原本的代码。

    但是用 element 编辑,我的编辑框里就会变成这样:

    
    _code_ : 
    
    ```sh
    echo 嘿嘿
    ```
    
    

    即便我把这部分代码辛辛苦苦再编辑回原来的样子,发布,再点编辑,它也还是会重新变成上面这个鬼样子!!

    就是说, element 在被点击 编辑 时候的处理逻辑,并不是应该的「编辑原来的源码」而是「根据渲染反推出源码给你编辑」。对我来说,这既不正确、也不优雅。


    另外,从 f-droid 上可以看到, element 增加了一个负特性: 此应用推广或完全依赖于一个非自由的网络服务

    这必定不是在说 matrix 协议或者 matrix.org 服务器,因为 fluffychat 就没有这个(也没有别的任何)负特性(至少目前)。

  11. Anon 回复 yhm /p/199738
    内容已隐藏
    内容已被作者本人或管理员隐藏。 如有疑问,请点击菜单按钮,查看管理日志以了解原因。
  12. linda 回复 Anon /p/199745

    element官方客户端就是这德性,你要享用他的去中心化特性,先从不用官方客户端开始