Matrix-用于安全、分散通信的开放式网络

2020-08-22 12:04:02

在那里,给任何人发消息或打电话就像给他们发电子邮件一样简单。

...这里有一个简单的标准HTTP API,用于在Web上共享实时数据。

Matrix是一个开源项目,它发布了用于安全、分散、实时通信的Matrix开放标准及其Apache许可的参考实现。

由非营利性的Matrix.org基金会维护,我们的目标是创建一个像网络本身一样独立、充满活力和不断发展的开放平台……。而是为了交流。

截至2019年6月,Matrix已过测试期,协议完全适合生产使用。

Matrix为您提供简单的HTTP API和SDK(iOS、Android、Web)来创建聊天室、直接聊天和聊天机器人,并提供端到端加密、文件传输、同步对话历史记录、格式化消息、阅读回执等功能。

对话在参与对话的所有服务器上复制,这意味着没有单点控制或故障。您可以联系到全球超过900万用户的Matrix生态系统中的任何其他用户,甚至包括那些通过网桥在其他网络上的用户。

了解更多

Matrix通过OLM和Megolm加密棘轮提供最先进的端到端加密。这样可以确保只有预期的收件人才能解密您的邮件,同时如果会话中添加了任何意外的设备,则会发出警告。

Matrix的加密基于Signal普及的双棘轮算法,但扩展到支持对包含数千台设备的房间进行加密。OLM和Megolm被指定为开放标准,实现在Apache许可下发布,由NCC Group独立审核。

了解更多。

随着WebRTC的出现,开发人员获得了交换高质量语音和视频呼叫的能力-但没有实际路由呼叫的标准方法。

矩阵是WebRTC缺少的信令层。如果您正在将VoIP构建到您的应用程序中,或者想要将您现有的VoIP应用程序展示给更广泛的受众,那么构建Matrix的SDK和桥接器应该是轻而易举的事。

了解更多。

Matrix之所以得名,是因为它能够将现有平台连接成一个全球开放的通信矩阵。网桥是Matrix的核心,并且设计得尽可能易于编写,Matrix提供了将网络链接在一起的最高公分母语言。

核心Matrix团队维护连接Slake、IRC、XMPP和Gitter的桥梁,同时更广泛的Matrix社区为Telegram、Discord、WhatsApp、Facebook、Hangout、Signal等提供桥梁。

了解更多。

通过构建连接到尽可能多的物联网孤岛的桥梁,可以在Matrix网络上安全地发布数据。基于Matrix构建的物联网解决方案是统一的,而不是锁定到特定供应商,甚至可以通过超低带宽传输(100bps或更低)直接从设备发布或使用Matrix数据。

与此同时,AR和VR供应商正在重现我们在即时通讯领域看到的孤岛,而不是共同努力建立一个开放的生态系统。矩阵可以作为AR和VR中通信和世界数据的统一层。

Matrix实际上是一个分散的会话存储,而不是一个消息传递协议。当您在Matrix中发送消息时,它将在其用户参与给定会话的所有服务器上复制-类似于在Git存储库之间复制提交的方式。在跨越多台服务器的Matrix会话中没有单点控制或故障:与Matrix中其他位置的人通信的行为与他们平分对会话的所有权。即使您的服务器脱机,对话也可以在其他地方不间断地继续,直到它返回。

这意味着每台服务器对其用户数据拥有完全自主的主权-任何人都可以选择或运行自己的服务器,并参与更广泛的Matrix网络。这就是Matrix如何实现对通信的民主化控制。

默认情况下,Matrix使用简单的HTTPS+JSONAPI作为其基准传输,但也支持更复杂的传输,如WebSockets或通过CoAP+Noise的超低带宽Matrix。

这里有三个Matrix主服务器,每个都连接了一个客户端。客户端都参与同一矩阵房间,该房间跨三个参与的服务器进行同步。

Alice的主服务器将JSON添加到其历史图表中,将其链接到图表中最近未链接的对象。然后,服务器对包括父对象签名的JSON进行签名,以计算历史的防篡改签名。

然后,服务器通过HTTPS将签名的JSON发送到参与房间的任何其他服务器。CURL-XPOST-H';授权:X矩阵来源=alice.com,...';-d';{";ts";:1413414391521,";Origin";:";alice.com";,";目的地";:";bob.com";,";PDU";:[{";event_id";:$YUwRidLecu:Alice.com";,";Content";:{";Body";:";hello world";,";m.text";:";m.text";},...";PDU_TYPE";:";m.room.message";,";签名";:{"。:{";ed25519:AUTO";:";jZXTAH/7EZ...";},";发件人";:";@alice:alice.com";}]}';https://matrix.bob.com:8448/_matrix/federation/v1/send/916d...。

目的地服务器对消息执行一系列检查:如果这些检查通过,则将JSON添加到目的地服务器图表中。

目标客户端收到带有长期GET请求的Alice消息。(客户端可以根据需要自由实现比轮询更有效的传输)。Curl";https://matrix.bob.com/_matrix/client/v2/SYNC?ACCESS_TOKEN=ACCESS_TOKEN";{";NEXT_BATCH";:";s72595_4483_1934";,";房间";:[{";Room_id";:";!KrLWMLDnZAyTapqLWW:alice.com";,";events"。:[{";event_id";:";$YUwRidLecu:Alice.com";,";type";:";m.room.message";,";content";:{";body";:";I is a fish";,";msgtype";:";m.text";ORIGIN_SERVER_TS";:1417731086797,";发件人";:";@alice:alice.com";}],},}]}。

Bob向Alice的消息发送响应,他的服务器将他的消息添加到他的房间历史记录副本中,并将其链接到图表中最近未链接的对象-Alice的最后一条消息。

同时,查理也用鲍勃的信息回应了爱丽丝的信息赛跑。爱丽丝、鲍勃和查理的家庭服务器在这一点上对邮件历史都有不同的看法-但Matrix就是为了处理这种不一致而设计的。

鲍勃的寄信人将他的邮件转发给爱丽丝和查理的服务器,他们接受邮件。在这一点上,爱丽丝和鲍勃是同步的,但查理的房间历史记录是分开的-消息2和3都是消息1的后续消息。这不是问题;查理的客户将被告知鲍勃的消息,并且可以随意处理。

查理的家庭服务器也通过转发他的消息,在这一点上,所有3个服务器再次对历史有了一致的看法(包括鲍勃和查理之间的比赛)。在这一点上,所有3个服务器再次对历史有了一致的看法(包括鲍勃和查理之间的比赛)。所有三个客户端都看到了所有这三条消息,并且房间历史记录现在在参与的服务器之间重新同步。

随后,爱丽丝发送了另一条消息-她的家庭服务器将其添加到她的历史记录中,并将其链接到图表中最近未链接的对象:鲍勃和查理的消息。这有效地融合了历史上的分裂,并断言了房间的完整性(或者至少是她对房间的看法)。

然后,Alice的消息被转发到其他参与的服务器,这些服务器接受该消息,并使用相同的规则更新自己的历史记录,从而确保分布式房间历史记录的最终一致性和完整性。