什么是XMPP?

简而言之,XMPP(又称为 Jabber)是一种开放的互联网实时通讯协议。很多流行的聊天软件都是 XMPP 的封装应用,比如Google Hangout、Facebook Message、AOL Chat、米聊、人人桌面、微博私信和陌陌等。很多网络游戏的内部聊天用的也是 XMPP 协议。

XMPP是联邦式的。 XMPP和电子邮件相似,用户可以选择不同的服务器,而且不同服务器的用户之间可以通信。你的数据在A服务器上,即使B服务器沦陷,B服也泄露不了太多与你相关的敏感数据。A服务器故障不影响B服务器与C服务器的通讯。这是联邦式的好处。

联邦是去中心化的一种形式。

一般人谈即时聊天应用的时候,认为即时聊天应用是中心化的,典型的例子有QQ、MSN、微信、Telegram、WhatsApp等等,但是除了这些之外,还有去中心化的IM。

去中心化的即时聊天应用可以分为3种。

一种是类似IRC、Rocket Chat、MatterMost这类自托管服务,服务可以运行在不同的服务器上,用户可以用一个服务器上的服务,但是不同服务器间的用户不能直接通信。这类服务相对中心化服务的优点是数据和用户信息可以存放在一个用户选择的服务器上,避免大企业或监控部门窥探用户隐私,适合企业使用。

一种是和邮件类似的联邦式服务,XMPP和Matrix都是联邦式的IM协议。

还有一种是P2P的服务,如Tox和GNU Ring.P2P的服务虽然也有服务器,但它们是只用于帮助用户发现其他用户。一旦用户找到通信的另一方,通信数据直接在通信双方之间传送,不经过服务器。

XMPP通讯协议 同 OTR、OMEMO等加密技术相结合,能够实现安全的秘密聊天。在传统封闭的、有隐私泄露风险的专有软件(微信)和风险集中的、服务器安全成疑的开源软件(Telegram)面前,我们有另一种选择。


xmpp-0.png
上图从左到右依次为:集中式、联邦式、分布式

步骤1:安装 XMPP 客户端

PC 客户端:推荐使用 Pidgin 。Windows 用户可前往 pidgin.im 网站下载最新版安装包

其他操作系统

GNU/Linux 发行版用户可通过包管理 器搜索“pidgin”来安装,也可以从 pidgin.im 下载源码 包编译安装。mas OS 用户推荐使用 Adium,可以从 adium.im 网站下载到。也可以用 Jitsi,可以从 jitsi.org 网站下载到。


Android 客户端 : 推荐使用 Conversations,支持发送图片、语音和文件等多种格式。


iOS 客户端: 可以安装 ChatSecure,从 App Store 上直接搜索安装即可,支持发送图片和语音。

步骤2:注册 XMPP 账户

从公共的 XMPP 服务器上注册

注册方式一:网页注册。 互联网上有很多开放的 XMPP 服务,这里有一个非常全的列表(https://www.jabberes.org/servers/servers_by_proxy_bytestreams.html) 。速度较快的有 jwchat.org、yax.im 和 im.koderoot.net ,其他经过测试的公开 XMPP 服务器可以参见这个 wiki页面(https://beijinglug.club/wiki/doku.php?id=projects:xmpp) 。可以自由选择这些服务器注册。成功注册后就获得了一个形如 abc@xyz.com 的账户。

注册方式二:客户端注册。 以上公开的 XMPP 服务器都允许你在客户端上注册,你只需要在添加账户时勾选“在服 务器上创建此账户”或“我想注册一个新账户”,并在服务器(或“域”)一栏填入服务器地址即可 (比如填写 xyz.com );有的客户端(比如 Conversations)可直接输入你想注册的账户,例如填上 abc@xyz.com 就表示希望在 xyz.com 服务器上注册一个新账户,然后输入希望使用的密码。


注意:很多 XMPP 服务器并不支持密码找回,请记住并妥善保管你的 XMPP 账户密码!


如何从 Pidgin 客户端上注册

安装 Pidgin 。初次运行 Pidgin 。点击“添加”。

xmpp-a.png

在一个完整的 XMPP 地址中,@前面的字符代表用户名,@后面的字符代表 XMPP 服务器的域名。

“协议”选“XMPP”;“用户名”填你的用户名;“域”填 XMPP 服务器的域名,不知道域名请去问管理员;“密码”填你希望使用的密码;可以勾选“记住密码”;一定要勾选“在服务器上创建此新账户”。

xmpp-b.png

如何从 Conversations 客户端上注册

安装 Conversations 。初次运行 Conversations 。点“创建新账户”。

xmpp-1.png

点“使用我自己的服务器”。

xmpp-2.png

“XMPP地址”一栏要填自己完整的地址,完整的地址包含你的用户名和 XMPP 服务器的域名;“密码”一栏输入你希望使用的密码。

xmpp-3.png

步骤3:添加好友

注册成功以后就可以用新账户登录。公共 XMPP 服务器之间可互通聊天消息,账户数据并不互通。所以 XMPP 服务器支持跨服务器加好友和跨服聊天,例如在 abc.xyz 上注册的账 号可以加 xmpp.is 或其他公共服务器的好友聊天。你在哪个服务器注册,就只能在哪个服务器登陆。

添加好友前要先知道对方的 XMPP 地址。在“好友名称”一栏输入对方完整的 XMPP 地址。下图展示了在 Pidgin 上如何添加好友。

xmpp-c.png

添加完好友,开始聊天吧!

其他

加入群聊

还可以用 XMPP 多人聊天(“聊天室”或“讨论组”),只需要在软件 里选择“加入聊天”,然后输入讨论组的账户即可。

下面展示了如何在 Pidgin 上创建聊天室和邀请好友加入群聊

点击“好友”,再点击“加入聊天”

xmpp-g.png

“账号”一栏保持默认;“聊天室”一栏请随意填写;“服务器”一栏保持默认;“昵称”一栏保持默认;“密码”一栏可填可不填。

xmpp-d.png

点击“接受默认值”。

xmpp-e.png

在弹出的聊天室窗口上,点击“对话”,再点击“邀请”。

xmpp-h.png

在“好友”一栏输入对方的完整 XMPP 地址,“消息”一栏可填可不填。

xmpp-f.png

对方应邀进入聊天室后,可以开始群聊。

使用端对端加密聊天保护隐私

OTR 与 OMEMO

OTR(Off The Record)端对端加密为一对一聊天增加了更多的安全 性。OTR 是非对称加密,并具有否定性,即便是密钥丢失,过往的聊天记录也无法解密。类似的端对端加密方式还有 OMEMO。 有些客户端内置了 OTR 加密插件,比如 Adium、Conversations 和 ChatSecure。只要在一对一聊天界面找到形如挂锁的图标(未加密)或“OTR”菜单,然后点选这个图标,并在弹出菜单中选择开始私密聊天(或类似的文字)即可。稍等片刻一旦私密聊天建立,图标会变成闭合的挂锁图标 (已加密), 聊天界面里也可以看到相应的文字提示。Conversations 和 ChatSecure 还支持 OMEMO 加密,开启加密 的方式基本相同,但要注意验证此设备是否是你亲自登录。 Pidgin 需要安装相应的 OTR 插件。GNU/Linux 发行版可以搜索并安装“pidgin-otr”包,Windows 用户 前往 https://otr.cypherpunks.ca 下载并安装 Pidgin 的 OTR 插件。插件安装好以后,在“工具—>插 件”目录下找到并勾选 Off The Record Messaging。然后按“配置插件”按钮,打开对话框,按“生 成”按钮以生成 OTR 密钥和指纹。之后就可以按上面类似的方法开启加密聊天了。 加密聊天建立以后,需要验证对方身份(这一步可选),可以通过保密问题或直接验证指纹的方式。注意:OTR 是客户端对客户端的加密,同一账户的不同客户端,指纹并不相同,因此均需要验证。


发送图片、语言和文件

文件加密传输? 能否发送图片、语音和文件,与客户端的类型有很大关系。据说,Conversations 可以非常好的支持发送语音视频和文件,OTR 加密启用时文件也同时加密传输。ChatSecure 也支持发送加密的图片和语音。PC 端的软件大多只支持文件传送。移动端与 PC 端之间暂时还不能传送加密的图片、语音和文件。

参考资料