Le messager de tout

Tous les messagers existants ont leurs avantages et leurs inconvénients, mais chacun tire la couverture sur le cÎté en raison d'une incompatibilité avec les autres - et les utilisateurs en souffrent.


XMPP pourrait devenir une norme unique, mais contrairement au courrier électronique, il est apparu relativement tard et n'a pas réussi à gagner suffisamment d'audience pour que les entreprises ne puissent pas déjà le refuser. AprÚs tout, ils ont rapidement réalisé que sans retenir le public dans leur propre écosystÚme, il n'y avait pas grand-chose à gagner. Et d'ailleurs, je dois admettre que XMPP avait suffisamment de lacunes en raison de l'abondance d'extensions, dont beaucoup, malgré leur importance, sont restées à l'état expérimental, et certaines se sont dupliquées complÚtement.


Ayant vĂ©cu dans le «nouveau monde merveilleux» d'une douzaine de messageries instantanĂ©es dans le smartphone, et ayant ressenti toutes les lacunes de cet Ă©tat de fait, nous sommes enfin prĂȘts pour quelque chose de nouveau.


Et oui, nous avons besoin d'une nouvelle norme!


Un excellent Future Messenger satisfait aux exigences suivantes: assurer la fiabilité, la sécurité, grùce au développement ouvert et à la décentralisation, la portabilité (multiplateforme), le multi-protocole (la possibilité de se connecter à d'autres réseaux de communication) et la convivialité.


Pourquoi tout est-il si mauvais?


Mais d'abord, découvrons pourquoi tout le monde ne passe à aucun messager centralisé == déjà populaire, que ce soit une WhatsApp conditionnelle ou, par exemple, Telegram, qui a une audience considérable en Russie.


Bien sĂ»r, la construction centralisĂ©e permet aux propriĂ©taires de gagner plus d'argent, et donc non seulement de payer pour le dĂ©veloppement, mais aussi d'investir des sommes importantes dans la publicitĂ© et mĂȘme la glorification de fonctions pratiquement absentes , telles que la sĂ©curitĂ© des services, par exemple. Cependant, en mĂȘme temps, le propriĂ©taire peut soudainement dĂ©cider de fermer le service, le tracteur pour dĂ©placer le cĂąble du centre de donnĂ©es, ou tout simplement un messager peut ĂȘtre interdit sur le territoire d'un certain pays. Pas nĂ©cessairement pour des raisons politiques, peut-ĂȘtre, et Ă  la demande des titulaires de droits d'auteur conditionnels, il peut y avoir de nombreuses raisons. C'est bien si, malgrĂ© la taille insignifiante du marchĂ©, Telegram continue de travailler en Russie avec un succĂšs variable, mais cela est dĂ» aux comptes personnels du propriĂ©taire, et en cas de blocage du mĂȘme WhatsApp, Facebook a peu de chances d'investir massivement pour contourner les verrous.


Il est difficile de parler immĂ©diatement pour tous les messagers centralisĂ©s, rassemblant sous un seul peigne. Il y a un mal absolu avec un client, un serveur et un protocole propriĂ©taires qui ne fonctionnent que sur quelques-unes des plates-formes les plus populaires et n'ont aucun cryptage. Il y a aussi une bontĂ© relative, par exemple, le messager Signal, qui est entiĂšrement ouvert, mais les serveurs ne prennent pas en charge le mode fĂ©dĂ©rĂ©, c'est pourquoi tout le monde dĂ©pend du serveur central avec toutes les consĂ©quences qui en dĂ©coulent. Ici, la classification doit ĂȘtre effectuĂ©e selon un principe diffĂ©rent, mais cela dĂ©passe le cadre de cet article.


Eh bien, pourquoi ne pas passer Ă  quelque chose de fĂ©dĂ©ral. Par exemple, la mĂȘme matrice. Je ne parlerai pas de HTTP Long Polling, de la faible rĂ©silience du serveur et de la geekiness explicite de l'interface client - toutes ces tĂąches sont rĂ©solubles, bien que non triviales (au niveau mondial, cela ne change rien). J'aime que les dĂ©veloppeurs prennent en compte l'expĂ©rience de XMPP et dĂ©veloppent des spĂ©cifications communes au lieu d'un tas de XEP indĂ©pendants, mais ce n'est qu'un des inconvĂ©nients de XMPP. Un autre problĂšme est l'appareil classique du rĂ©seau fĂ©dĂ©ral, lorsque nous sommes obligĂ©s de choisir un serveur et de faire confiance Ă  son propriĂ©taire pour s'assurer que le serveur fonctionne et ne le fermera pas. Et en cas de nouvelle panne du centre de donnĂ©es, nous serons coupĂ©s du monde, ne pouvant plus communiquer avec le compte prĂ©cĂ©dent sur un autre serveur. MĂȘme si vous crĂ©ez un nouveau compte, et que vous lui transfĂ©rez la liste de vos contacts depuis l'ancien serveur, lors de la communication, vous devrez en quelque sorte confirmer Ă  nouveau que c'est bien vous, et non pas quelqu'un qui vous prĂ©sente.


Dans ce cas, peut-ĂȘtre abandonner complĂštement le serveur? Il existe un certain nombre de messageries instantanĂ©es basĂ©es sur une technologie sans serveur. Un cas particulier ici est le populaire Firechat dans les cercles Ă©troits, qui utilise un rĂ©seau maillĂ© d'appareils wifi et bluetooth pour communiquer avec les utilisateurs. Ce messager fonctionne vraiment bien lorsque tous les utilisateurs sont concentrĂ©s, par exemple, sur la zone. Mais c'est une situation assez spĂ©cifique, et mĂȘme si nous imaginons une situation oĂč chaque habitant de la planĂšte installe une application, cela crĂ©e beaucoup d'autres problĂšmes, des ruptures de rĂ©seau maillĂ© par les signes gĂ©ographiques et la vitesse des Ă©changes de messages avec des utilisateurs distants, Ă  la quantitĂ© de donnĂ©es stockĂ©es nĂ©cessaires sur les appareils. Mais, probablement, ce messager est assommĂ© de la masse totale et dans notre comparaison est superflu. Il est plus expĂ©rimental que centrĂ© sur l'utilisateur.


Il existe Ă©galement des projets tels que Tox essayant d'implĂ©menter un messager p2p. Cette approche vous permet de ne pas vous soucier de la sĂ©curitĂ© du serveur, et il est presque impossible de bloquer un tel messager. Tox a beaucoup de problĂšmes, mais c'est un projet trĂšs intĂ©ressant avec sa propre niche. Cela n'a aucun sens d'Ă©numĂ©rer les inconvĂ©nients spĂ©cifiques de Tox, car le projet se dĂ©veloppe et malgrĂ© le fait que les services p2p sont beaucoup plus difficiles Ă  dĂ©velopper, si vous dĂ©finissez une telle tĂąche, vous pouvez trouver diffĂ©rentes architectures intĂ©ressantes pour construire un tel rĂ©seau: avec ses propres avantages et inconvĂ©nients, diffĂ©rentes exigences pour la largeur du canal Internet et la quantitĂ© d'espace sur l'appareil, avec des super-nƓuds, une connexion simultanĂ©e Ă  partir de diffĂ©rents appareils et mĂȘme la remise de messages hors ligne. Mais la redondance du trafic sera toujours importante par rapport Ă  l'architecture client-serveur et la dĂ©charge accrue de la batterie sur les appareils mobiles en raison de la nĂ©cessitĂ© de maintenir constamment un grand nombre de connexions et de divers calculs.


Ainsi, bien que le p2p soit une technologie intéressante, il se révélera inefficace si, par exemple, l'envoi de vos coordonnées aux sauveteurs, se trouvant quelque part sur un arbre de la taïga avec presque aucune connexion Internet et 1% de charge de batterie.


Comment y remédier?


Par conséquent, je veux introduire une architecture client-serveur hybride qui a pris le meilleur des approches existantes et a évité leurs inconvénients.


Ainsi, pour que notre messager disposant des ressources minimales nĂ©cessaires fonctionne sur les appareils mobiles, nous utiliserons le modĂšle client-serveur, oĂč le maximum d'opĂ©rations informatiques et de ressources exigeantes en trafic sont concentrĂ©es sur les serveurs, et cĂŽtĂ© client, les donnĂ©es sont dĂ©cryptĂ©es et affichĂ©es pour l'utilisateur.


Adressage


Chaque utilisateur reçoit son adresse au format E-Mail, ou XMPP, c'est-Ă -dire pseudo @ domaine. Mais contrairement aux services susmentionnĂ©s, la spĂ©cification d'un domaine ne porte pas le mĂȘme rĂŽle d'adresse important dans cette architecture.


Les domaines sont plus susceptibles d'ĂȘtre utilisĂ©s comme registraires de surnoms pour exclure la possibilitĂ© que tous les surnoms existants puissent ĂȘtre occupĂ©s intentionnellement ou non.


Les domaines coĂ»tent de l'argent sur Internet, ce qui n'empĂȘche pas l'enregistrement de masse, mais rĂ©duit considĂ©rablement sa portĂ©e. Dans les services centralisĂ©s, l'accĂšs se fait souvent via un lien vers un tĂ©lĂ©phone mobile, ce qui n'est pas non plus un facteur exclusif, mais les cartes SIM ne sont pas non plus prises des airs! Et Ă  cet Ă©gard, en passant, je me demande comment ils vont lutter contre cela dans https://toxme.io/ - un service pour Tox qui vous permet d'associer des touches longues Ă  un surnom court. Je ne vois aucune raison pour laquelle ils ne peuvent pas ĂȘtre spammĂ©s avec des milliards de surnoms indĂ©sirables.
En outre, le domaine peut avoir un sens pour divers comptes pour la maison et le travail. Ou pour organiser un réseau d'entreprise interne.


Du point de vue de l'utilisateur, pour écrire à quelqu'un, vous devez connaßtre son identifiant complet ou sa clé publique.


Du point de vue du logiciel serveur, si un utilisateur est demandé pour son empreinte digitale, le serveur recherche dans sa table la connexion qui lui est associée, s'il est demandé immédiatement pour la connexion, respectivement, cette étape est ignorée. Ensuite, la connexion et l'adresse du serveur auquel le compte est actuellement délégué sont effectuées. S'il n'y a pas de telles entrées, il est considéré que le compte indiqué aprÚs @ dans la connexion est responsable du compte.


Profil utilisateur


L'application cliente stocke un profil utilisateur représentant:


  • Connexion utilisateur complĂšte
  • Liste des serveurs de sauvegarde
  • ClĂ© d'utilisateur publique et privĂ©e
  • Informations de profil telles que la liste de contacts, les paramĂštres de chat et le profil utilisateur

Les clés publiques de chaque utilisateur sont réparties entre chacun des serveurs du réseau fédéré. L'utilisateur peut se connecter à n'importe lequel des serveurs, car l'authentification n'utilise pas un hachage de mot de passe stocké dans la base de données du serveur, mais la clé privée d'un utilisateur.


La procĂ©dure d'autorisation est la suivante: le serveur envoie au client un ensemble alĂ©atoire de donnĂ©es chiffrĂ©es avec la clĂ© publique du client, le client dĂ©chiffre avec sa clĂ© privĂ©e et envoie un hachage des donnĂ©es dĂ©chiffrĂ©es au serveur. Si les hachages de donnĂ©es correspondent, le serveur autorisera l'utilisateur. Dans le mĂȘme temps, si l'utilisateur a modifiĂ© pour la derniĂšre fois le serveur auquel la connexion est Ă©tablie, tous les serveurs du rĂ©seau fĂ©dĂ©rĂ© sont informĂ©s du nouvel emplacement de l'utilisateur.


L'absence de la nĂ©cessitĂ© de se souvenir du mot de passe (cependant, le client vous permet de crypter la clĂ© privĂ©e) simplifie Ă  la fois l'interaction avec le messager et crĂ©e le risque de perdre vos clĂ©s. Pour Ă©viter cela, il est recommandĂ© de les dupliquer sur d'autres appareils utilisateurs. Rien n'empĂȘche de discuter sous le mĂȘme compte de plusieurs appareils en mĂȘme temps, la seule limitation est qu'ils doivent tous ĂȘtre connectĂ©s au mĂȘme serveur, sinon l'architecture deviendra trop confuse. Mais ce n'est guĂšre un gros inconvĂ©nient.


Module complémentaire pour les navigateurs


Pour de nombreux produits, le point faible est une application web. Et cette solution, bien sĂ»r, prĂ©sente de nombreux inconvĂ©nients. Un tel chat ne sera pas tĂ©lĂ©chargĂ© pendant que vous ĂȘtes hors ligne, vous devrez alors attendre un tĂ©lĂ©chargement complet, et l'adresse peut ĂȘtre bloquĂ©e, ou le serveur peut se bloquer. Tri manuel des adresses - je ne voudrais pas particuliĂšrement.


Et l'option n'est pas encore exclue qu'un attaquant piratera une application Web et intĂ©grera du code qui fusionnera toutes vos donnĂ©es - mĂȘme aprĂšs que l'autre partie de l'application les ait dĂ©cryptĂ©es pour vous, et que vous ne le sachiez mĂȘme pas.


À cet Ă©gard, je propose d'abandonner l'application Web en tant que telle et de proposer l'installation d'un module complĂ©mentaire pour le navigateur, dans lequel tous ces dĂ©fauts sont par dĂ©finition absents.


De plus, l'absence de nécessité pour les propriétaires des serveurs de configuration du client Web d'abaisser le seuil d'entrée pour la création de leur serveur. Chaque foyer a son propre serveur!


Les transports


Qui a besoin d'un messager avec lequel il n'y a personne avec qui communiquer? Il existe des projets intéressants de messagers inhabituels, mais le problÚme du manque d'audience ne leur permet pas de gagner au moins une certaine popularité. En conséquence, le plus souvent, les messagers avec un large public gagnent encore plus d'audience, et les messagers instantanés avec un petit public le perdent. Et le plus souvent, cette situation ne peut que modifier des investissements importants dans la publicité.
Eh bien, en plus, cet état de fait nécessite l'installation d'un autre messager, lorsque vous avez un besoin urgent de contacter quelqu'un qui n'est pas sur d'autres réseaux.


Par conséquent, le serveur doit prendre en charge le fonctionnement des transports vers des réseaux tiers.
Si l'utilisateur spécifie les données à connecter à ses comptes dans d'autres messageries instantanées, il verra les personnes des réseaux qu'il a connectés dans ses contacts.
La connexion Ă  des rĂ©seaux tiers est Ă©tablie cĂŽtĂ© serveur et, dans le client, les contacts sont affichĂ©s comme les plus ordinaires, avec des diffĂ©rences minimales - par exemple, l'icĂŽne du rĂ©seau d'oĂč l'utilisateur vient est affichĂ©e.


Comme inconvĂ©nient, il devient nĂ©cessaire de faire confiance au serveur avec ses donnĂ©es pour se connecter Ă  des rĂ©seaux tiers. Tout le monde n'est pas prĂȘt Ă  dĂ©lĂ©guer son autoritĂ© Ă  un serveur tiers, vous devez donc encourager la crĂ©ation de vos propres serveurs de toutes les maniĂšres.


Cryptographie


Bien sĂ»r, un pĂ©riphĂ©rique rĂ©seau dĂ©centralisĂ© ne parvient pas Ă  se passer du cryptage de toutes les donnĂ©es transmises, car nous ne pouvons pas ĂȘtre sĂ»rs que mĂȘme dans le serveur qui nous est confiĂ©, une sorte de signet qui fusionne toutes les donnĂ©es n'est pas intĂ©grĂ©e.
Auparavant, il était déjà indiqué que la paire de clés de l'utilisateur est utilisée pour l'autorisation, tous les messages envoyés à d'autres utilisateurs sont également signés avec la clé privée de l'expéditeur et sont cryptés avec la clé publique du destinataire.


Il n'y a rien de nouveau ici, des outils de cryptage GPG standard sont utilisés.
Le problÚme de cryptage dans les groupes n'a pas encore été résolu, mais vous pouvez probablement utiliser le mécanisme utilisé dans Signal.


Ce qui a déjà été fait


Pour le moment, nous avons dĂ©jĂ  créé un serveur en Python utilisant Tornado, qui implĂ©mente les fonctions de base du messager, il y a une version web lĂ©gĂšrement figĂ©e qui devrait ĂȘtre convertie en un ajout pour le navigateur, il y a une bibliothĂšque Ă  Rust, sur la base de laquelle le client fonctionne avec une interface QML.


La connexion au serveur est effectuée à l'aide de WebSockets, dans lesquels les données sont sérialisées par défaut au format binaire de représentation des données CBOR, mais lors de l'établissement d'une connexion WebSockets, il est possible de demander un format différent, par exemple protobuf.


Je considĂšre Ă©galement qu'il est important de noter que le client utilise une division en une liste de chats, triĂ©e par date des derniers messages, largement utilisĂ©e dans les messageries instantanĂ©es modernes, et une liste traditionnelle, avec le tri des contacts en catĂ©gories. Avec l'utilisation active du messager, vous devez interagir avec un grand nombre de chats et il devient difficile de les rechercher dans un ordre de liste en constante Ă©volution. Dans le mĂȘme Telegram rĂ©sout partiellement le problĂšme d'Ă©pingler les chats sĂ©lectionnĂ©s en haut de la liste, mais ce n'est qu'une solution temporaire au problĂšme.


→ Voici les rĂ©fĂ©rentiels qui contiennent nos idĂ©es

Source: https://habr.com/ru/post/fr413437/


All Articles