首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用OMEMO加密向XMPP MultiUserChat中的未知用户发送消息

用OMEMO加密向XMPP MultiUserChat中的未知用户发送消息
EN

Stack Overflow用户
提问于 2018-02-27 09:06:02
回答 1查看 1K关注 0票数 3

我正在尝试构建一个带有OMEMO加密的MUC平台,以便在Android应用程序上使用。我正在使用Ejabberd (v17.11)和Smack库(v4.2.1)。

persistent机房是allow_subscription,用于Muc/Sub支持,用于脱机消息。

当客户以“所有者”的身份启动一个新房间,并从他的名册中添加“成员的名单”时,所有的客户都会加入这个房间,一切看起来都很好。业主可以向小组发送信息,然后发送给每个成员。

但是当一个组成员试图发送一条消息时,如果他不’这个组的所有成员(如果他们不在他的名册中),他就不能发送消息!

我发现,当向小组发送OMEMO消息时,有必要对每个成员的消息分别加密,这就需要得到每个成员的devicelist

在这一步中:

代码语言:javascript
复制
mOmemoManager.encrypt(muc, msgBody);

它试图对所有收件人进行加密,但是获取未知用户的设备列表会导致崩溃。

发送:

代码语言:javascript
复制
<iq to='unknownuser@server.com' id='141' type='get'><query xmlns='http://jabber.org/protocol/disco#info' node='eu.siacs.conversations.axolotl.devicelist'></query></iq>

RECV:

代码语言:javascript
复制
<iq xml:lang='en' to='myuser@server.com/mobile' from='unknownuser@server.com' type='error' id='141'><query node='eu.siacs.conversations.axolotl.devicelist' xmlns='http://jabber.org/protocol/disco#info'/><error code='407' type='auth'><subscription-required xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'/><text xml:lang='en' xmlns='urn:ietf:params:xml:ns:xmpp-stanzas'>Not subscribed</text></error></iq>

Smack的错误:

无法获取unknownuser@server.com的设备列表:. XMPPError:订阅-必需- auth

那我怎么才能解决这个问题?在聊天组中,每个用户都不必见面。当每个人聚在一起的时候,我应该把每个人都加到一个人的名册上吗?

或者这是关于房间的附属关系还是角色?

或者是关于Ejabberd配置的东西?

代码语言:javascript
复制
[{title,<<"groupName">>},  
{allow_query_users,true},  
{allow_private_messages,true},
{allow_private_messages_from_visitors,anyone},
{allow_visitor_status,true},  
{allow_visitor_nickchange,true},  
{public,false},  
{public_list,false},  
{persistent,true},  
{moderated,true},  
{members_by_default,true},  
{members_only,true},  
{allow_user_invites,true},
{anonymous,false},
{logging,false},
{allow_voice_requests,true},
{allow_subscription,true},
{mam,true},
{presence_broadcast,[moderator,participant,visitor]},
{voice_request_min_interval,1800},
{vcard,<<>>},
{captcha_whitelist,[]},
{affiliations,[{{<<"user1">>,<<"server.com">>,<<>>},{member,<<>>}},                 {{<<"user2">>,<<"server.com">>,<<>>},{owner,<<>>}},                 {{<<"user3">>,<<"server.com">>,<<>>},{member,<<>>}}]},
{subject,[]},
{subject_author,<<>>}]
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-03-04 22:47:21

OMEMO要求发送方能够读取收件人OMEMO公共子节点。这对于获取接收方preKey包来构建会话是必要的。

现代实现将OMEMO节点配置为公共的--还有一个ejabberd配置来强制遗留客户端这样做。

因此,OMEMO的大多数客户端实现都将加密功能限制为仅在私有组聊天中可用。在这种情况下,所有联系人都在彼此的名册中,并且可以相互访问OMEMO节点。加密公开可用的组聊天是没有意义的,因为攻击者只需加入聊天就可以读取消息。

如果您想从您的客户端中将您的OMEMO节点配置为公共节点,请查看smack-openpgp确实改变了访问模型。是如何实现的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49004845

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档