Complex2-Liu | 老爹 yinyang

One cannot turn back the hands of time.

如果努力的话, 也许, 生命比想象中要顽强.

Matrix 聊天协议简介

我致力于寻找一款能支持 LaTeX 的聊天软件, 所以像微信, QQ 这样的垃圾自然不能胜任. 在过去的一年, 我使用 Gitter, 他支持 KaTeX, 但有一些小毛病比如不等号 $\ne$ 的渲染效果十分奇怪. 最近重新登录 Gitter, 我发现它已经迁移到 Element 这款基于 Matrix 聊天协议 的客户端 (client) 去了.

Element 的 Web 端有两个版本, app 版本 https://app.element.io 和 develop 版本 https://develop.element.io . Gitter 使用的是 app 版本, 这个版本并不支持 LaTeX 渲染1, 所以我打算注册一个 Element 这边的原生 account, 使用他的 develop 版本, 正式进入 Matrix 生态圈.

Matrix 协议是什么?

Matrix 是一种聊天协议 (protocol), 他的特点可以说是老生常谈了:

我们先来看看像 Wechat, Telegram2 这样的聊天 APP 他们的痛点是什么? 他们的痛点在于, Wechat Account 只能和 Wechat Account 聊天, Telegram Account 只能和 Telegram Account 聊天. 而 Matrix 协议他更类似于 Email, 所有 Account 之间地位平等, 你在 Gmail 注册的邮箱, 可以给 Yahoo 的邮箱甚至是 QQ 邮箱互相发邮件.

第二个痛点在于, 现在很多聊天软件的注册, 轻的要求你提供一个邮箱账号, 重的甚至要提供手机号来完成 OTP 登录. 为什么要这么麻烦, 我个人非常讨厌使用手机 OTP 登录. Matrix 协议就很好的解决了这个问题, 注册一个基于 Matrix 协议的 Account 就类似于你注册一个 Email Account 一样, 不需要提供手机号.

这里的介绍只是冰山一角, 目前我们也只需要用到这么多, 更具体的描述去看他的官网.

Matrix Account 的注册

前面说了 Matrix 就像 Email 一样, 所以他有服务器端也有客户端, 所谓的 server-client architecture.

客户端

你在 Gmail 这个服务端注册了一个 Account [email protected], 你不一定非要通过 Gmail 的 Web 客户端去登录, 你可以使用诸如 Thunderbird 这样的客户端去登录, 你不会被局限于使用哪个指定的客户端.

说实话我很想使用基于终端的 client, 不过这样的话就不能照顾到 LaTeX 渲染了. 一般情况下推荐使用 Element, 他就是由创作 Matrix 协议的团队创作出来的, 从某种程度上来说他算是一种「官方」的客户端. 我不想下载那些 APP 客户端, 所以我就使用他的 Web 客户端.

服务器端

Matrix 协议官方提供的服务器端是 matrix.org (类似于 gmail.com). 我们前往 Element 官网的注册页面 来完成注册, 当然你也可以去其他服务器端注册 (类似于 Email 中的 Yahoo), 你甚至可以自己 host 一个服务端 (类似于自建邮箱).

Create Account

We host our account on matrix.org.

Username 注册以后是唯一的, 以后无法更改. 以 [email protected] 为例, 他的 username 就是 example, 以后无法更改.

虽然 Matrix 协议本身不依赖于一个 email address, 但是你在 matrix.org 这个服务器注册一个 account, 他要求你一定要提供一个 email address 用于密码重置或者登录 (这只是选择性的).

Remove Email

注册成功以后, 你可以把 email address 和你的 Matrix Account 解除绑定. 解除绑定之后, 就只能通过 username + password 来完成登录, 而不能再通过 email address + password 来完成登录.

Start Conversation

解除绑定之后, 其他人无法再通过 email address 来 start a conversation with you, 只能通过你的 Matrix ID @complex2math:matrix.org 来 discover you.

End-to-end Encryption (E2EE)

Matrix 协议非常的安全非常的 privacy, 所有的通讯都是 E2EE 的. 为了实现这一点, 我们需要有一个 Security Key.

Security Key 1

前往 Settings -> Security & Privacy, 然后点击 Set up.

Security Key 2

推荐选择第一个选项 Generate a Security Key, 而不是 Enter a Security Phrase. 之后你会得到一个形如

EsTe aPXB y2Q6 ishD B7jB Dju9 u1SA xNYH xxxQ rtU4 8kmX d1F5

长达 48 位随机生成的字符串. 这就是你的 Security Key, 请务必将它妥善保存. 推荐将他保存到某个本地文件里, 使用 pass 这样的 password manager 来保存管理.

之后我们 sign out, 然后重新 sign in, 你会看到一个提示说 Verify this device, 点击 Verify with Security Key, 粘贴我们前面得到的 48 位的字符串, 便完成了验证过程.

Security Key 3

如果你遗失了你的 Security Key, 无法完成验证. 你可以点击 Reset All 来完成重置, 但代价是你将无法看到所有以前和朋友之间的加密聊天记录. 并且你的朋友会收到提示, 说你最近 reset 了 Security Key, 所以你的 identity 会受到质疑.

LaTeX Support

Develop 版本里可以实现 LaTeX 渲染

LaTeX Support

前往 Settings -> Labs, 然后 enable Render LaTeX maths in messages.

登录之后除非你主动 sign out, 否则都会有 Cache, 以后直接浏览器输入链接 https://develop.element.io 就会自动登入. 如果你主动 sign out 出去然后重新 sign in, 你要重新 enable LaTeX 渲染.

其他功能

Element 客户端还有很多其他功能, 比如什么 bridge, 聊天的时候 verify 互相之间的 identity. 这些都是后话, 以后有时间再更新.


  1. 虽然 Telegram 主打加密, 号称自己很 privacy, 但 Youtube 上很多极其注重 privacy 的人说他并不 privacy, 维基百科的条目也说 Telegram 会受到政府的监控. ↩︎