2 votes

Envoi de messages à des utilisateurs inconnus dans XMPP MultiUserChat avec le cryptage OMEMO

J'essaie de construire une plateforme MUC avec le cryptage OMEMO pour l'utiliser sur une application Android. J'utilise Ejabberd (v17.11) et la bibliothèque Smack (v4.2.1).

Les chambres MUC sont persistent et ils allow_subscription pour le support Muc/Sub, pour les messages hors ligne.

Lorsqu'un client démarre un nouveau salon en tant que "propriétaire" et ajoute des "membres" de sa liste, tous les clients rejoignent le salon et tout semble bien se passer. Le propriétaire peut envoyer des messages au groupe et ceux-ci sont transmis à tous les membres.

Mais lorsqu'un membre du groupe essaie d'envoyer un message, s'il ne le fait pas, il ne peut pas envoyer de message. savoir tous les membres du groupe (s'ils ne figurent pas dans son fichier), il ne peut pas envoyer de message !

J'ai découvert que, lors de l'envoi d'un message OMEMO au groupe, il est nécessaire de crypter le message séparément pour chaque membre, ce qui nécessite d'obtenir les coordonnées de chaque membre. devicelist ¡!

Sur cette étape :

mOmemoManager.encrypt(muc, msgBody);

Il tente de crypter tous les destinataires, mais la recherche d'une liste d'appareils d'un utilisateur inconnu provoque un plantage.

SENT :

<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 :

<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>

Erreur de Smack :

Impossible d'obtenir la liste des périphériques de unknownuser@server.com : .....
XMPPError : subscription-required - auth

Comment puis-je résoudre ce problème ? Dans les groupes de discussion, tous les utilisateurs n'ont pas besoin de se rencontrer. Dois-je ajouter tout le monde à la liste de tous les utilisateurs lorsqu'ils se réunissent dans un groupe ?

Ou s'agit-il d'une question d'appartenance à une chambre ou de rôle ?

Ou quelque chose à propos de la configuration d'Ejabberd ?

[{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,<<>>}]

1voto

vanitasvitae Points 61

OMEMO exige que l'expéditeur puisse lire le nœud OMEMO pubsub du destinataire. Cela est nécessaire pour récupérer le paquet preKey des destinataires afin de créer une session.

Les implémentations modernes configurent le nœud pubsub d'OMEMO pour qu'il soit public - il existe également un nœud pubsub d'OMEMO. Configuration d'ejabberd pour obliger les anciens clients à le faire.

La plupart des implémentations client d'OMEMO limitent donc la fonction de cryptage aux seuls chats de groupe privés. Dans ce scénario, tous les contacts figurent dans les fichiers de chacun et ont accès aux nœuds OMEMO de chacun. Le cryptage des discussions de groupe accessibles au public n'a aucun sens puisqu'un pirate pourrait simplement se joindre à la discussion pour lire les messages.

Si vous souhaitez configurer vos nœuds pubsub OMEMO pour qu'ils soient publics à partir de votre client, jetez un coup d'œil à la façon dont les nœuds pubsub OMEMO sont configurés. smack-openpgp modifie le modèle d'accès .

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X