tag:linuxfr.org,2005:/tags/Signal/publicLinuxFr.org : les contenus étiquetés avec « signal »2024-02-28T13:03:12+01:00/favicon.pngtag:linuxfr.org,2005:Bookmark/79622024-02-20T19:26:33+01:002024-02-20T19:26:33+01:00Signal sans numéro de téléphone<a href="https://signal.org/blog/phone-number-privacy-usernames/">https://signal.org/blog/phone-number-privacy-usernames/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/134949/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/e3ms6vyx/liens/signal-sans-numero-de-telephone#comments">ouvrir dans le navigateur</a>
</p>
E3Ms6vyXhttps://linuxfr.org/nodes/134949/comments.atomtag:linuxfr.org,2005:Post/440382024-01-03T17:06:16+01:002024-01-03T17:06:16+01:00Matrix : Bridge What's app / Signal app<p>Bonjour à tous,</p>
<p>Je regarde pour installer un bridge pour what's app ou signal depuis matrix.</p>
<p>Je suis sous debian Bookworm avec le paquet matrix-synapse.</p>
<p>Vous utilisez déjà un projet de ce type ?</p>
<p>J'ai vu un projet qui m'intéresse mais dans le descriptif, ils disent qu'il faut quand meme installer l'application What's app !<br>
"A WhatsApp client running on a phone (both physical and virtual phones work)."</p>
<p>On ne peut pas se passer de l'installer ?</p>
<p>Voici le projet :<br>
<a href="https://github.com/mautrix/whatsapp">https://github.com/mautrix/whatsapp</a></p>
<p>Merci pour vos retours</p>
<div><a href="https://linuxfr.org/forums/general-cherche-logiciel/posts/matrix-bridge-what-s-app-signal-app.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/134395/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-cherche-logiciel/posts/matrix-bridge-what-s-app-signal-app#comments">ouvrir dans le navigateur</a>
</p>
electro575https://linuxfr.org/nodes/134395/comments.atomtag:linuxfr.org,2005:Bookmark/75162023-11-17T06:19:46+01:002023-11-17T06:19:46+01:00Privacy is Priceless, but Signal is Expensive<a href="https://signal.org/blog/signal-is-expensive/">https://signal.org/blog/signal-is-expensive/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133927/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/xanatos/liens/privacy-is-priceless-but-signal-is-expensive#comments">ouvrir dans le navigateur</a>
</p>
Xanatoshttps://linuxfr.org/nodes/133927/comments.atomtag:linuxfr.org,2005:Bookmark/73482023-10-16T19:05:19+02:002023-10-16T19:05:19+02:00Attaque à Arras : Darmanin vise les messageries et leur chiffrement - numerama<a href="https://www.numerama.com/tech/1533652-attaque-a-arras-darmanin-vise-les-messageries-et-leur-chiffrement.html">https://www.numerama.com/tech/1533652-attaque-a-arras-darmanin-vise-les-messageries-et-leur-chiffrement.html</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133645/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/antistress/liens/attaque-a-arras-darmanin-vise-les-messageries-et-leur-chiffrement-numerama#comments">ouvrir dans le navigateur</a>
</p>
antistresshttps://linuxfr.org/nodes/133645/comments.atomtag:linuxfr.org,2005:Bookmark/72742023-10-02T23:49:52+02:002023-10-02T23:49:52+02:00Affaire du "8 décembre": le droit au chiffrement et à la vie privée en procès (via sebsauvage) -LQDN<a href="https://www.laquadrature.net/2023/10/02/affaire-du-8-decembre-le-droit-au-chiffrement-et-a-la-vie-privee-en-proces/">https://www.laquadrature.net/2023/10/02/affaire-du-8-decembre-le-droit-au-chiffrement-et-a-la-vie-privee-en-proces/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133515/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/antistress/liens/affaire-du-8-decembre-le-droit-au-chiffrement-et-a-la-vie-privee-en-proces-via-sebsauvage-lqdn#comments">ouvrir dans le navigateur</a>
</p>
antistresshttps://linuxfr.org/nodes/133515/comments.atomtag:linuxfr.org,2005:Bookmark/72322023-09-25T15:17:30+02:002023-09-25T15:17:30+02:00Signal annonce le premier pas de son protocole dans la « résistance post-quantique »<a href="https://www.nextinpact.com/lebrief/72500/signal-annonce-premier-pas-son-protocole-dans-resistance-post-quantique">https://www.nextinpact.com/lebrief/72500/signal-annonce-premier-pas-son-protocole-dans-resistance-post-quantique</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/133432/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/colargol/liens/signal-annonce-le-premier-pas-de-son-protocole-dans-la-resistance-post-quantique#comments">ouvrir dans le navigateur</a>
</p>
Colargolhttps://linuxfr.org/nodes/133432/comments.atomtag:linuxfr.org,2005:Bookmark/56962023-01-03T13:13:01+01:002023-01-03T13:13:01+01:00Communiquer avec Signal sans donner son numéro de téléphone (première moitié 2023 probablement)<a href="https://time.com/6238482/signals-president-meredith-whittaker-interview/">https://time.com/6238482/signals-president-meredith-whittaker-interview/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129865/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/e3ms6vyx/liens/communiquer-avec-signal-sans-donner-son-numero-de-telephone-premiere-moitie-2023-probablement#comments">ouvrir dans le navigateur</a>
</p>
E3Ms6vyXhttps://linuxfr.org/nodes/129865/comments.atomtag:linuxfr.org,2005:Post/433622022-12-28T19:31:39+01:002022-12-28T19:31:39+01:00Fournisseur Matrix<p>Bonjour,</p>
<p>Je cherche un fournisseur Matrix permettant d'échanger avec WhatsApp et Signal. J'ai l'impression qu'il y a des <a href="https://www.chatons.org/search/by-service?service_type_target_id=All&field_alternatives_aux_services_target_id=431&field_software_target_id=274&field_is_shared_value=1&title=">options du côté des chatons</a>. Leur <a href="https://wiki.chatons.org/doku.php/services/messagerie_instantanee/matrix">wiki</a> recommande Alsace Réseau Neutre. Si il y a des utilisateurs de Matrix avec passerelle WhatsApp / Signal dans les parages, je suis preneur de recommandations ou d'un retour d'expérience !</p>
<p>Merci</p>
<div><a href="https://linuxfr.org/forums/general-general/posts/fournisseur-matrix.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129802/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/forums/general-general/posts/fournisseur-matrix#comments">ouvrir dans le navigateur</a>
</p>
E3Ms6vyXhttps://linuxfr.org/nodes/129802/comments.atomtag:linuxfr.org,2005:Bookmark/52512022-10-13T10:17:10+02:002022-10-13T10:17:10+02:00Removing SMS support from Signal Android (soon)<a href="https://signal.org/blog/sms-removal-android/">https://signal.org/blog/sms-removal-android/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/129003/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/kna/liens/removing-sms-support-from-signal-android-soon#comments">ouvrir dans le navigateur</a>
</p>
knahttps://linuxfr.org/nodes/129003/comments.atomtag:linuxfr.org,2005:Bookmark/52012022-09-27T13:41:54+02:002022-09-27T13:41:54+02:00Signal demande (à nouveau) à sa communauté de faire tourner des proxys<a href="https://signal.org/blog/run-a-proxy/">https://signal.org/blog/run-a-proxy/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/128880/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/e3ms6vyx/liens/signal-demande-a-nouveau-a-sa-communaute-de-faire-tourner-des-proxys#comments">ouvrir dans le navigateur</a>
</p>
E3Ms6vyXhttps://linuxfr.org/nodes/128880/comments.atomtag:linuxfr.org,2005:Diary/402362022-04-18T11:40:15+02:002022-04-19T19:18:54+02:00Fusionner deux profils signal-desktop pour retrouver ses conversationsLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<h2 class="sommaire">Sommaire</h2>
<ul class="toc">
<li><a href="#toc-g%C3%A9n%C3%A9ralit%C3%A9s-sur-signal">Généralités sur Signal</a></li>
<li><a href="#toc-expos%C3%A9-de-la-situation">Exposé de la situation</a></li>
<li><a href="#toc-ouvrir-la-base-de-donn%C3%A9es">Ouvrir la base de données</a></li>
<li>
<a href="#toc-effectuer-la-fusion">Effectuer la fusion</a><ul>
<li><a href="#toc-cr%C3%A9er-la-copie-de-travail">Créer la copie de travail</a></li>
<li><a href="#toc-suppression-des-messages-communs">Suppression des messages « communs »</a></li>
<li><a href="#toc-insertion-des-messages">Insertion des messages</a></li>
<li><a href="#toc-import-des-conversations">Import des conversations</a></li>
<li><a href="#toc-les-sessions--je-ne-touche-pas">Les sessions : je ne touche pas</a></li>
<li><a href="#toc-modification-du-profil-signal">Modification du profil Signal</a></li>
<li><a href="#toc-bonus--pourquoi-une-base-de-donn%C3%A9es-chiffr%C3%A9e">Bonus : pourquoi une base de données chiffrée ?</a></li>
</ul>
</li>
<li><a href="#toc-conclusion">Conclusion</a></li>
</ul>
<p>Me revoilà pour un journal un peu technique. On part à l’aventure et on va notamment parler de Signal, de SQL, SQLite, de son extension fts5 (vite fait) et de SQLCipher (variante de SQLite capable de chiffrer les bases de données, découverte à l’occasion), et de fusion de deux bases de données Signal pour reconstruire un historique complet et « réparer » un profil Signal un peu moisi.</p>
<h2 id="toc-généralités-sur-signal">Généralités sur Signal</h2>
<p><a href="https://signal.org/">Signal</a> est une application de messagerie instantanée chiffrée de bout en bout utilisant (pour le moment) le numéro de téléphone comme identifiant. Très peu d’état est stocké sur le serveur. En particulier, le carnet de contact et les groupes dont on fait partie n’y sont pas stockés. Il y a un appareil principal et éventuellement des appareils secondaires. L’appareil principal est en général un téléphone sur Android ou iOS, mais on peut s’en sortir autrement avec <a href="https://github.com/AsamK/signal-cli">signal-cli</a> sur n’importe quel ordinateur ou <a href="https://axolotl.chat/">Axolotl</a> sur un appareil GNU/Linux doté d’une carte SIM (il doit pouvoir tourner sans, mais je n’ai pas essayé) – en général un téléphone. Les appareils secondaires sont en général des ordinateurs classiques faisant tourner <a href="https://github.com/signalapp/Signal-Desktop/">Signal-Desktop</a>, mais ça pourrait être signal-cli ou tout autre client alternatif, comme <a href="https://github.com/derricw/siggo">siggo</a>, <a href="https://github.com/isamert/scli">scli</a> ou <a href="https://github.com/jwoglom/signal-curses">signal-curses</a>.</p>
<p>Chaque appareil a sa propre session Signal. Je ne pense pas que vos contacts puissent voir depuis quel appareil vous avez envoyé un message, mais vous pouvez consulter la liste des sessions enregistrées depuis l’application mobile. Sur Signal-Desktop, vous pouvez voir le nom de l’appareil dans les paramètres mais pas le modifier.</p>
<p>Signal-Desktop est une application Electron écrite en React stockant ses données dans une base de données SQLite chiffrée, et dans des fichiers classiques (comme les pièces jointes / les images dans les messages).</p>
<p>Sous GNU/Linux, Signal-Desktop stocke toutes ses données dans le dossier <code>.config/Signal</code> de votre répertoire personnel. Copier ce dossier sur un autre ordinateur qui a une version identique ou plus récente de Signal-Desktop va marcher, mais ne vous avisez pas à continuer à utiliser l’original parce que ça va mal se passer : les deux Signal-Desktop vont sans arrêt se déconnecter mutuellement. Ne me demandez pas comment je sais. Je suppose que les messages pourraient n’arriver qu’à l’un ou qu’à l’autre, de façon aléatoire. Signal fait la supposition que vous ne faites pas ça.</p>
<p>Les anciens messages ne sont pas renvoyés à un appareil nouvellement appairé, ou à une nouvelle session principale (réinstallation de l’application mobile / changement de téléphone portable sans restaurer les données). Ça permet d’empêcher quelqu’un qui réussirait à détourner (ou qui a hérité de) votre numéro de téléphone d’avoir accès à vos anciens messages. C’est aussi un des deux états de fait qui ont impliqué cette investigation. De même, si vous rejoignez un groupe, vous n’avez pas accès aux messages anciens. Pratique et pas pratique à la fois, selon ce que vous voulez faire (si vous organisez un évènement avec un groupe Signal éphémère, vous devez sans cesse répéter les infos essentielles dès que de nouvelles personnes rejoignent le groupe. Si vous intégrez quelqu’un dans un groupe de longue durée, vous ne voulez probablement pas que cette personne ait accès aux anciens échanges). Ces non-réexpéditions sont des choix fonctionnels qui facilitent également probablement l’implémentation.</p>
<h2 id="toc-exposé-de-la-situation">Exposé de la situation</h2>
<p>J’utilise Signal-Desktop sur deux ordinateurs. Appelons-les ordi A et ordi B. J’ai appairé ordi B un poil plus tard que ordi A, donc il n’a pas les premiers messages sur ordi B. J’ai toujours souhaité avoir tous mes messages sur les deux ordis, mais pas assez pour me pencher sur le problème : en pratique, je n’ai pas réellement besoin de mes messages de l’année dernière sur ordi B, si besoin je peux utiliser ordi A pour les consulter.</p>
<p>Cependant, récemment, pour une raison inconnue, ma session Signal sur ordi A a s’est retrouvée dans un état incohérent. J’ai perdu des messages récents dessus, et j’ai observé des dysfonctionnements variés. Ce weekend, je me suis alors penché sur la question…</p>
<p><strong>Attention :</strong> je décris des étapes pas garanties. Je ne suis pas familier avec le fonctionnement précis de Signal-Desktop. Je vous invite pas à reproduire ces étapes. Elles pourraient détruire vos messages, ou vous donner l’impression qu’elles marchent mais en fait causer des problèmes plus ou moins subtils plus tard, y compris des problèmes de réceptions de messages. L’intérêt de ce journal est pour moi de garder trace de mes étapes, et pour vous de lire une session d’investigations et de peut-être découvrir certaines techniques. Si vous tentez de reproduire ces choses, vous le faites à vos risques et périls en toute connaissance de cause.</p>
<p>Malgré les risques, je me suis quand même lancé dans l’aventure. Je pars du principe que dans le pire des cas :</p>
<ul>
<li>je devrais toujours pouvoir recevoir mes messages à l’aide de l’application mobile (<a href="https://github.com/nanu-c/axolotl">Axolotl</a>), non touchée par ces bidouilles</li>
<li>je garde une copie des fichiers de travail (le dossier de configuration de Signal-Desktop des deux ordinateurs), que je peux toujours consulter avec Signal-Desktop <strong>hors connexion</strong> en les copiant là où il s’attend à les trouver</li>
<li>au pire, on désinstalle tout et on recommence de zéro</li>
<li>dans tous les cas, ma session sur l’ordi A est un peu niquée alors je n’ai pas grand-chose à perdre au final…</li>
</ul>
<h2 id="toc-ouvrir-la-base-de-données">Ouvrir la base de données</h2>
<p>Bref, assez parlé, mettons les mains dans le cambouis. En inspectant le dossier <code>.config/Signal</code>, on tombe rapidement sur le fichier <code>sql/db.sqlite</code>, on se doute vite que c’est une base de données SQLite. il y a aussi les dossiers <code>attachments.noindex</code> et <code>avatars.noindex</code> qui contiennent des données binaires liées aux messages ou au profil tel que les images.</p>
<p>Premier réflexe : ouverture du fichier avec <a href="https://sqlitebrowser.org/">SQLite Browser</a>. Et là on se rend compte tout de suite que ça demande une clé de déchiffrement.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f732e6a616b73652e66722f323032322d30342d31382d73716c69746562726f777365726369706865722e706e67/2022-04-18-sqlitebrowsercipher.png" alt="SQLite Browser demande une clé de déchiffrement" title="Source : https://s.jakse.fr/2022-04-18-sqlitebrowsercipher.png"></p>
<p>Un petit tour sur internet nous informe que la clé à utiliser est stockée dans le fichier <code>.config/Signal/config.json</code> :</p>
<pre><code class="json"><span class="p">{</span>
<span class="nt">"key"</span><span class="p">:</span> <span class="s2">"abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890"</span><span class="p">,</span>
<span class="nt">"mediaPermissions"</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
<span class="nt">"mediaCameraPermissions"</span><span class="p">:</span> <span class="kc">true</span>
<span class="p">}</span></code></pre>
<p>Et on finit par comprendre qu’il faut utiliser l’option « Clé de chiffrement » et la préfixer par <code>0x</code> pour ouvrir la base. En ouvrant la base, on se rend compte que les données messages ne s’affichent pas. L’interface les affiche en rouge et prétend que les valeurs sont en cours de chargement, mais on se rend compte en regardant les logs que l’interface essaie d’utiliser la fonction <code>json_extract</code> et n’y arrive pas. Je n’ai pas creusé, j’ai continué mes investigations avec <a href="https://sqliteman.dev/">SqliteMan</a> qui y arrivait sur une version non chiffrée de la base.</p>
<p><img src="//img.linuxfr.org/img/68747470733a2f2f732e6a616b73652e66722f323032322d30342d31382d73716c69746562726f777365726a736f6e657874726163746572726f722e706e67/2022-04-18-sqlitebrowserjsonextracterror.png" alt="SQLite Browser ne trouve pas la fonction `json_extract`" title="Source : https://s.jakse.fr/2022-04-18-sqlitebrowserjsonextracterror.png"></p>
<p><code>sqlite3</code> n’est pas capable d’ouvrir une base chiffrée, il faudra pour cela utiliser <a href="https://www.zetetic.net/sqlcipher/">SQLCipher</a>, que je découvre pour l’occasion. Après de longues recherches, je comprends qu’il faut préfixer la clé par <code>x</code> pour ouvrir la base de données avec SQLCipher. On peut utiliser SQLCipher pour manipuler les bases de données chiffrées ou leur retirer le chiffrement.</p>
<pre><code>SQLite version 3.37.2 2022-01-06 13:25:41 (SQLCipher 4.5.1 community)
Enter ".help" for usage hints.
$ cp ~/.config/Signal/sql/db.sqlite ordiA.sqlite
$ sqlcipher ordiB.sqlite
sqlite> pragma key = "x'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890'";
ok
sqlite> select count(*) from messages;
11000
</code></pre>
<p>Si la clé n’est pas bonne, vous obtiendrez le message suivant au moment de faire des requêtes SQL :</p>
<pre><code>Error: in prepare, file is not a database (26)
</code></pre>
<p>Vous pouvez également vous attacher à une base chiffrée de cette manière :</p>
<pre><code>sqlite> attach database 'ordiB.sqlite' as ordiB key = "x'9876543210fedcba0987654321fedcba0987654321fedcba0987654321fedcba'";
sqlite> select count(*) from ordiB.messages;
</code></pre>
<p>Pour ouvrir ou vous attacher à des bases de données non chiffrées, simplement laisser <code>key</code> vide :</p>
<pre><code>pragma key = "";
…
sqlite> attach database 'ordiB.sqlite' as ordiB key = "";
</code></pre>
<p>On peut changer la clé de chiffrement de la base de données ouverte en utilisant <code>pragma rekey = "XXX";</code> après <code>pragma key</code>, mais on en a pas besoin. On peut sauvegarder une version non chiffrée de cette manière :</p>
<pre><code>$ cp ~/.config/Signal/sql/db.sqlite ordiA.sqlite
SQLite version 3.37.2 2022-01-06 13:25:41 (SQLCipher 4.5.1 community)
Enter ".help" for usage hints.
sqlite> pragma key = "x'abcdef1234567890abcdef1234567890abcdef1234567890abcdef1234567890'";
ok
sqlite> attach database 'ordiA.nonchiffre.sqlite' as plaintext key = '';
sqlite> select sqlcipher_export('plaintext');
</code></pre>
<p>(ou en utilisant <code>pragma rekey = ''</code> mais je ne me souviens plus d’avoir essayé). Voilà, vous savez utiliser SQLCipher aussi bien que moi).</p>
<p>La base de donnée de Signal a pas mal de tables. Après inspection, celles qui nous intéressent plus particulièrement sont :</p>
<ul>
<li>
<code>messages</code> : elle contient tous les messages reçus (et envoyés ?), au sens large (changements de statut, mises à jour de groupes, accusés de réceptions / de lecture, etc). Dans le protocole Signal, tout changement d’état passe par des messages et tout semble stocké dans cette table, vous pouvez probablement rejouer précisément toute l’histoire avec cette table (à vérifier, c’est juste une intuition). Je pars du principe que le serveur Signal fait une diffusion basique des messages à chaque session enregistrée et que toutes ces sessions reçoivent exactement les mêmes messages, ou en tout cas des messages équivalents. Avec possiblement quelques messages spécifiques pour chaque session. Je n’ai pas vérifié cette hypothèse, et d’ailleurs j’ai pu observer des petites différences d’ordre dans les messages entre la session de l’ordi A et de l’ordi B, alors elle n’est pas forcément très vraie mais partons là-dessus quand même, c’est probablement une approximation acceptable. Mais du coup, pour la fusion, il ne suffit possiblement pas de se contenter de récupérer les messages d’ordi A pas présent dans ordi B et de les insérer au bon endroit (peut-être que ça marche, mais je n’ai pas essayé).</li>
<li>
<code>conversations</code> : elle contient vos conversations privées ou de groupe.</li>
<li>
<code>reactions</code> : depuis la <a href="https://github.com/signalapp/Signal-Desktop/blob/b066d04817a0f2a8cbbac8714aa574a380451047/ts/sql/migrations/index.ts#L1483">révision 29</a> de la base de données, elle contient les réactions aux messages, et la <a href="https://github.com/signalapp/Signal-Desktop/blob/b066d04817a0f2a8cbbac8714aa574a380451047/ts/sql/migrations/index.ts#L1781">révision 37</a> ajoute la référence au message de cette réaction (les réactions, sur Signal, sont des messages comme les autres, comme on peut d’ailleurs le constater dans Axolotl, qui ne gère pas encore les réactions).</li>
<li>
<code>sessions</code> contient les données de sessions avec les correspondants, par conversation. Je n’ai pas trop creusé son fonctionnement.</li>
</ul>
<h2 id="toc-effectuer-la-fusion">Effectuer la fusion</h2>
<p>Avant tout, fermez Signal sur ordi A et sur ordi B. Vous ne voulez pas recevoir de messages pendant la manipulation pour éviter d’interférer ou créer des incohérences.</p>
<p>Pour fusionner les deux profils pour avoir un profil complet sur l’ordi A, on s’assure d’avoir ouvert les deux bases de données (ordi A et ordi B) avec la même dernière version de signal-desktop. Signal-desktop fait des migrations et si les bases de données ne sont pas à la même version, ça va être la merde. Ensuite, voici l’idée générale :</p>
<h3 id="toc-créer-la-copie-de-travail">Créer la copie de travail</h3>
<p>On fait une copie de la base de données d’ordi A, vers <code>fusion.sqlite</code> par exemple, et on ouvre cette copie avec <code>sqlcipher</code>.</p>
<h3 id="toc-suppression-des-messages-communs">Suppression des messages « communs »</h3>
<p>On repère l’identifiant du premier message reçu par ordi B dans ordi A avec SqliteMan et on le supprime ainsi que tous les suivants:</p>
<pre><code class="sql"><span class="k">delete</span> <span class="k">from</span> <span class="n">messages</span> <span class="k">where</span> <span class="n">rowid</span> <span class="o">></span> <span class="mi">263</span><span class="p">;</span></code></pre>
<p>(même chose pour la table <code>reactions</code>, l’étape 2 aussi)</p>
<h3 id="toc-insertion-des-messages">Insertion des messages</h3>
<p>On insère les messages de l’autre base :</p>
<pre><code class="sql"><span class="k">insert</span> <span class="k">into</span> <span class="n">messages</span> <span class="k">select</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ordiB</span><span class="p">.</span><span class="n">messages</span><span class="p">;</span></code></pre>
<p>En réalité, ça ne marche pas. Il a fallu indiquer les champs /explicitement. Pour avoir la liste des champs :</p>
<pre><code class="sql"><span class="n">pragma</span> <span class="n">table_info</span><span class="p">(</span><span class="n">messages</span><span class="p">)</span></code></pre>
<pre><code>0|rowid|INTEGER|0||1
1|id|STRING|0||0
2|json|TEXT|0||0
3|readStatus|INTEGER|0||0
4|expires_at|INTEGER|0||0
5|sent_at|INTEGER|0||0
6|schemaVersion|INTEGER|0||0
7|conversationId|STRING|0||0
8|received_at|INTEGER|0||0
9|source|STRING|0||0
10|deprecatedSourceDevice|STRING|0||0
11|hasAttachments|INTEGER|0||0
12|hasFileAttachments|INTEGER|0||0
13|hasVisualMediaAttachments|INTEGER|0||0
14|expireTimer|INTEGER|0||0
15|expirationStartTimestamp|INTEGER|0||0
16|type|STRING|0||0
17|body|TEXT|0||0
18|messageTimer|INTEGER|0||0
19|messageTimerStart|INTEGER|0||0
20|messageTimerExpiresAt|INTEGER|0||0
21|isErased|INTEGER|0||0
22|isViewOnce|INTEGER|0||0
23|sourceUuid|TEXT|0||0
24|serverGuid|STRING|0||0
25|sourceDevice|INTEGER|0||0
26|storyId|STRING|0||0
27|isChangeCreatedByUs|INTEGER|1|0|0
</code></pre>
<p>En collant dans Kate, sélection multiple sur les 10 premières lignes, espace pour aligner tous les numéros à droite, sélection multiple sur la première colonne pour la supprimer, remplacement expression régulière <code>\|.+</code> par <code>,</code> CTRL+A pour tout sélectionner, CTRL+J pour joindre toutes les lignes, on obtient une liste de champs séparés par des virgules. Requête SQL :</p>
<pre><code class="sql"><span class="k">insert</span> <span class="k">into</span> <span class="n">messages</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">json</span><span class="p">,</span> <span class="n">readStatus</span><span class="p">,</span> <span class="n">expires_at</span><span class="p">,</span> <span class="n">sent_at</span><span class="p">,</span> <span class="n">schemaVersion</span><span class="p">,</span> <span class="n">conversationId</span><span class="p">,</span> <span class="n">received_at</span><span class="p">,</span> <span class="k">source</span><span class="p">,</span> <span class="n">deprecatedSourceDevice</span><span class="p">,</span> <span class="n">hasAttachments</span><span class="p">,</span> <span class="n">hasFileAttachments</span><span class="p">,</span> <span class="n">hasVisualMediaAttachments</span><span class="p">,</span> <span class="n">expireTimer</span><span class="p">,</span> <span class="n">expirationStartTimestamp</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="n">messageTimer</span><span class="p">,</span> <span class="n">messageTimerStart</span><span class="p">,</span> <span class="n">messageTimerExpiresAt</span><span class="p">,</span> <span class="n">isErased</span><span class="p">,</span> <span class="n">isViewOnce</span><span class="p">,</span> <span class="n">sourceUuid</span><span class="p">,</span> <span class="n">serverGuid</span><span class="p">,</span> <span class="n">sourceDevice</span><span class="p">,</span> <span class="n">storyId</span><span class="p">,</span> <span class="n">isChangeCreatedByUs</span><span class="p">)</span> <span class="k">select</span> <span class="n">id</span><span class="p">,</span> <span class="n">json</span><span class="p">,</span> <span class="n">readStatus</span><span class="p">,</span> <span class="n">expires_at</span><span class="p">,</span> <span class="n">sent_at</span><span class="p">,</span> <span class="n">schemaVersion</span><span class="p">,</span> <span class="n">conversationId</span><span class="p">,</span> <span class="n">received_at</span><span class="p">,</span> <span class="k">source</span><span class="p">,</span> <span class="n">deprecatedSourceDevice</span><span class="p">,</span> <span class="n">hasAttachments</span><span class="p">,</span> <span class="n">hasFileAttachments</span><span class="p">,</span> <span class="n">hasVisualMediaAttachments</span><span class="p">,</span> <span class="n">expireTimer</span><span class="p">,</span> <span class="n">expirationStartTimestamp</span><span class="p">,</span> <span class="k">type</span><span class="p">,</span> <span class="n">body</span><span class="p">,</span> <span class="n">messageTimer</span><span class="p">,</span> <span class="n">messageTimerStart</span><span class="p">,</span> <span class="n">messageTimerExpiresAt</span><span class="p">,</span> <span class="n">isErased</span><span class="p">,</span> <span class="n">isViewOnce</span><span class="p">,</span> <span class="n">sourceUuid</span><span class="p">,</span> <span class="n">serverGuid</span><span class="p">,</span> <span class="n">sourceDevice</span><span class="p">,</span> <span class="n">storyId</span><span class="p">,</span> <span class="n">isChangeCreatedByUs</span> <span class="k">from</span> <span class="n">ordiB</span><span class="p">.</span><span class="n">messages</span><span class="p">;</span></code></pre>
<p>Mais avant ça, il faut traiter la table <code>messages_fts</code> et ses copines <code>messages_fts_config</code>, <code>messages_fts_content</code>, <code>messages_fts_data</code>, <code>messages_fts_docsize</code>, <code>messages_fts_idx</code>. Ces tables contiennent le contenu des messages, et il faut sûrement faire attention à maintenir la cohérence. Bon, spoiler (divulgâcheur) : il s’agit d’une table virtuelle <code>fts5</code> créée à l’aide de <a href="https://www.sqlite.org/fts5.html">l’extension SQLite <code>fts5</code></a>, qui fournit de la recherche complète de texte (<em>full text search</em>).</p>
<p>Ces tables <a href="https://github.com/signalapp/Signal-Desktop/blob/b066d04817a0f2a8cbbac8714aa574a380451047/ts/sql/migrations/index.ts#L333">sont créées</a> avec :</p>
<pre><code class="sql"><span class="k">create</span> <span class="n">virtual</span> <span class="k">table</span> <span class="n">messages_fts</span> <span class="k">using</span> <span class="n">fts5</span><span class="p">(</span><span class="n">id</span> <span class="n">unindexed</span><span class="p">,</span> <span class="n">body</span><span class="p">);</span></code></pre>
<p>Avant d’insérer les nouveaux messages, on supprime cette table virtuelle :</p>
<pre><code class="sql"><span class="k">drop</span> <span class="k">table</span> <span class="n">messages_fts</span><span class="p">;</span></code></pre>
<p>Et après <a href="https://github.com/signalapp/Signal-Desktop/blob/b066d04817a0f2a8cbbac8714aa574a380451047/ts/sql/migrations/index.ts#L341">l’insertion</a> :</p>
<pre><code class="sql"><span class="k">insert</span> <span class="k">into</span> <span class="n">messages_fts</span><span class="p">(</span><span class="n">id</span><span class="p">,</span> <span class="n">body</span><span class="p">)</span> <span class="k">select</span> <span class="n">id</span><span class="p">,</span> <span class="n">body</span> <span class="k">from</span> <span class="n">messages_fts</span><span class="p">;</span></code></pre>
<p>Petite digression : malheureusement, la version de SQLCipher dans les dépôts d’openSUSE n’est pas compilée avec l’extension fts5. J’ai donc été amené à compiler SQLCipher moi-même. Ça se fait bien, la bibliothèque n’a pas de dépendances qui ne seraient pas déjà présentes dans un système GNU/Linux standard :</p>
<pre><code class="sh">./configure --enable-fts5 --enable-tempstore<span class="o">=</span>yes <span class="nv">CFLAGS</span><span class="o">=</span><span class="s2">"-DSQLITE_HAS_CODEC"</span> <span class="nv">LDFLAGS</span><span class="o">=</span><span class="s2">"-lcrypto"</span>
make
sudo make install
rehash <span class="c1"># pour les utilisateurs de zsh</span></code></pre>
<h3 id="toc-import-des-conversations">Import des conversations</h3>
<p>Il faut importer les <code>conversations</code> qui sont dans ordiB et pas dans ordiA. Chez moi, c’est juste une conversation. Mais plus gênant, les identifiants de conversations (dans le champ <code>id</code>), qui sont des UUID, ne sont pas les mêmes dans les deux bases de données. On peut créer une table des correspondances. Pour les conversations privées, le numéro de la personne est dans le champ <a href="https://en.wikipedia.org/wiki/E.164"><code>e164</code></a>, qui est nul dans le cas des groupes. Pour les groupes, l’identifiant du groupe est dans le champ <code>groupId</code>, qui est nul dans le cas des discussions privées. On pourra faire la correspondance de cette manière :</p>
<pre><code class="sql"><span class="k">select</span>
<span class="n">cA</span><span class="p">.</span><span class="n">id</span> <span class="k">as</span> <span class="n">conversationIdA</span><span class="p">,</span>
<span class="n">cB</span><span class="p">.</span><span class="n">id</span> <span class="k">as</span> <span class="n">conversationIdB</span>
<span class="k">from</span> <span class="n">conversations</span> <span class="n">cA</span> <span class="k">inner</span> <span class="k">join</span> <span class="n">ordiB</span><span class="p">.</span><span class="n">conversations</span> <span class="n">cB</span> <span class="k">on</span> <span class="p">(</span>
<span class="n">cA</span><span class="p">.</span><span class="n">e164</span> <span class="o">=</span> <span class="n">cB</span><span class="p">.</span><span class="n">e164</span> <span class="k">or</span>
<span class="n">cA</span><span class="p">.</span><span class="n">groupId</span> <span class="o">=</span> <span class="n">cB</span><span class="p">.</span><span class="n">groupId</span>
<span class="p">);</span></code></pre>
<p>Ça se passe bien avec les valeurs nulles, qui sont ignorés par les tests d’égalité dans la condition de jointure.</p>
<p>Avec un peu d’édition de texte, pour chaque <code>conversationIdA</code>, on exécute la ligne suivante :</p>
<pre><code class="sql"><span class="k">delete</span> <span class="k">from</span> <span class="n">conversations</span> <span class="k">where</span> <span class="n">id</span> <span class="o">=</span> <span class="s1">'conversationIdA'</span><span class="p">;</span></code></pre>
<p>Ensuite, on peut importer toutes les conversations :</p>
<pre><code class="sql"><span class="k">insert</span> <span class="k">into</span> <span class="n">conversations</span> <span class="k">select</span> <span class="o">*</span> <span class="k">from</span> <span class="n">ordiB</span><span class="p">.</span><span class="n">conversations</span><span class="p">;</span></code></pre>
<p>Ensuite, il faut remplacer les identifiants de conversations des tables <code>messages</code>, <code>reactions</code> et <code>sessions</code>. À l’aide de la requête de correspondance, à coup d’édition multi ligne dans Kate, on peut produire des requêtes du type :</p>
<pre><code class="sql"><span class="k">update</span> <span class="n">messages</span> <span class="k">set</span> <span class="n">conversationId</span><span class="o">=</span><span class="s1">'conversationIdB'</span> <span class="k">where</span> <span class="n">conversationId</span><span class="o">=</span><span class="s1">'conversationIdA'</span>
<span class="k">update</span> <span class="n">reactions</span> <span class="k">set</span> <span class="n">conversationId</span><span class="o">=</span><span class="s1">'conversationIdB'</span> <span class="k">where</span> <span class="n">conversationId</span><span class="o">=</span><span class="s1">'conversationIdA'</span>
<span class="k">update</span> <span class="n">sessions</span> <span class="k">set</span> <span class="n">conversationId</span><span class="o">=</span><span class="s1">'conversationIdB'</span> <span class="k">where</span> <span class="n">conversationId</span><span class="o">=</span><span class="s1">'conversationIdA'</span></code></pre>
<h3 id="toc-les-sessions--je-ne-touche-pas">Les sessions : je ne touche pas</h3>
<p>Pour la table <code>sessions</code>, je n’ai pas trop cherché ce qu’il faudrait faire. Il faut peut-être éventuellement importer les sessions des conversations qui existaient dans ordiB et pas dans ordiA mais plutôt laisser les autres telles quelles.</p>
<h3 id="toc-modification-du-profil-signal">Modification du profil Signal</h3>
<p>On n’a plus qu’à faire une sauvegarde du profil Signal, à remplacer la base de données et à importer les attachements :</p>
<pre><code class="sh">cp -r ~/.config/Signal<span class="o">{</span>,.bak<span class="o">}</span>
cp fusion.sqlite ~/.config/Signal/sql/db.sqlite
rsync -avp configOrdiB/Signal/attachements.noindex/ ~/.config/Signal/attachements.noindex/
rsync -avp configOrdiB/Signal/avatars.noindex/ ~/.config/Signal/avatars.noindex/</code></pre>
<p>On teste les modifications en coupant votre connexion internet et en lançant signal-desktop, hors ligne donc. Comme ça, on peut voir si on obtient les résultats attendus sans risquer de tout pourrir en recevant des messages dans un état incohérent et se compliquer la vie, voire jamais pouvoir récupérer correctement ces messages.</p>
<h3 id="toc-bonus--pourquoi-une-base-de-données-chiffrée">Bonus : pourquoi une base de données chiffrée ?</h3>
<p>On peut se demander pourquoi la base de données Signal est chiffrée alors que la clé de déchiffrement est stockée en clair juste à côté.</p>
<p>Evan Hahn, un développeur de Signal, <a href="https://github.com/signalapp/Signal-Desktop/issues/5245#issuecomment-843234191">affirme</a> :</p>
<blockquote>
<p>We use SQLCipher for two reasons:</p>
<ol>
<li>To encrypt the data at rest. Some users don't have full disk encryption, and this can (theoretically) help them.</li>
<li>SQLCipher, unlike "vanilla" SQLite, deletes data from disk. If, for example, a message expires, we can ensure it's actually deleted instead of marking it deleted but not actually deleting it.</li>
</ol>
</blockquote>
<p>Je ne suis pas super convaincu par la première raison (ça aiderait les gens qui n’ont pas de chiffrage sur leur ordinateur). À la limite, ça peut peut-être aider pour contrer les outils d’indexation un peu zélés qui iraient indexer le contenu des bases de données. La deuxième raison me parait plus convaincante : SQLCipher fournirait plus de garanties lors de la suppression de données. La position actuelle de l’équipe de développement semble être d’inviter les gens inquiets à utiliser du chiffrement au niveau de la partition et d’utiliser l’écran de verrouillage. Des gens ne sont pas satisfaits par cette réponse parce que les données seraient accessibles à un processus malicieux même en cas de chiffrement de la partition quand le système est démarré. M’est d’avis qu’il faudrait probablement que Signal demande un mot de passe au démarrage pour résoudre de problème ou que les systèmes d’exploitations fournissent des systèmes d’isolation un peu poussés entre applications, et que l’équipe de développement de Signal ne veut pas se risquer à implémenter des mécanismes de sécurité un peu hasardeux et elle a de toute façon d’autres priorités.</p>
<h2 id="toc-conclusion">Conclusion</h2>
<p>Avec beaucoup de précautions, en s’y reprenant à plusieurs reprises, avec des recherches internet, un peu d’intuition et de lecture du code de Signal (en particulier le code des migrations SQL), j’ai fini par réussir la fusion. En tout cas, à première vue (seul le futur permettra de dire si effectivement ça s’est vraiment bien passé). J’ai retrouvé toutes mes conversations, y compris les premiers messages et les messages qui manquaient sur l’ordi A sur l’ordi A, et la conversation qui n’était jamais apparue sur l’ordi A pour une raison inconnue. J’ai manifestement pu envoyer et recevoir des messages. Et ce, sans changement de clé de session ou sans avoir à enregistrer un nouvel appareil avec l’application mobile.</p>
<p>Encore une fois, je ne recommande pas de se lancer dans cette bidouille : c’est un peu risqué et ça prend du temps peut-être mieux dépenser ailleurs. Malgré tout, j’ai appris des choses et je suis content de partager l’aventure, et si ça peut servir à quelqu’un aussi ou plus fou que moi avec la conservation des historiques, ou pour quelqu’un qui s’intéresserait à SQLCipher ou au fonctionnement de Signal, ou même à une manière partir en exploration dans ce genre de situation, tant mieux.</p>
<p>Certaines étapes auraient pu être « rendues propres » par exemple en générant des lignes SQL avec des outils Unix ou des scripts quelconques, mais j’ai justement pris le parti de ne pas le faire. Ce n’est pas comme ça que j’ai procédé, j’y suis plutôt allé à la bourrin avec un éditeur de texte et j’ai dû coup décidé de détailler un peu cette partie. C’est justement un endroit où je me suis demandé comment être efficace, comment faire une boucle en SQLite, ouh là là il faut faire des triggers récursifs, « allez viens en vrai on va être super efficace avec l’éditeur de texte ». C’est pour moi une partie importante de comment je suis effectivement efficace quand je suis en mode résolution de problèmes, donc autant le partager comme ça. Les scripts seraient à écrire s’il y avait à faire cette manipulation souvent, mais quand ce n’est pas le cas, ce n’est pas toujours la méthode la plus rapide et des méthodes plus artisanales / intuitives conviennent parfois mieux et c’est important de le noter et d’avoir ça dans sa boite à outils. Pour exécuter des scripts, il aurait de toute façon fallu que je colle les données dans des fichiers texte, et donc j’aurais probablement utilisé un éditeur de texte, et du coup à ce stade autant utiliser les outils fournis par celui-ci. Faire les choses manuellement une fois peut de toute façon rendre l’écriture de scripts plus rapide : on sait que le résultat fonctionne, et on peut en avoir une meilleure intuition.</p>
<div><a href="https://linuxfr.org/users/raphj/journaux/fusionner-deux-profils-signal-desktop-pour-retrouver-ses-conversations.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/127503/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/raphj/journaux/fusionner-deux-profils-signal-desktop-pour-retrouver-ses-conversations#comments">ouvrir dans le navigateur</a>
</p>
raphjhttps://linuxfr.org/nodes/127503/comments.atomtag:linuxfr.org,2005:Diary/399712021-10-26T20:27:13+02:002021-10-26T20:27:13+02:00Comme une impression de déjà vu…Licence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Element, anciennement connu sous le nom Riot, est un client libre de messagerie et de salon de discussion supportant initialement le protocole ouvert Matrix.</p>
<p>La société derrière Element vient d’annoncer une offre contenant des passerelles (bridges) vers les protocoles Signal, Whatsapp et Telegram.</p>
<p><a href="https://element.io/blog/element-one-all-of-matrix-whatsapp-signal-and-telegram-in-one-place/">https://element.io/blog/element-one-all-of-matrix-whatsapp-signal-and-telegram-in-one-place/</a></p>
<p>Notons que ces passerelles sont libres et qu’il est possible de les faire tourner sur son propre serveur. L’offre s’adresse à ceux qui n’ont ni le temps ni l’envie mais sont prêts à débourser 5$ par mois.</p>
<p>Tout cela est très bien mais j’ai comme une étrange sensation de déjà vu.</p>
<p>Et pour cause, il y’a 20 ans de cela et jusqu’en 2012, j’ai administré un serveur XMPP qui contenait des… passerelles vers les autres protocoles de messagerie instantanée (ICQ, MSN, AIM…).</p>
<p>Du coup, je suis véritablement perplexe car j’ai l’impression que, dans ce domaine, rien n’a du coup fondamentalement changé. Les solutions propriétaires majoritaires ont succédé aux solutions propriétaires majoritaires, les solutions libres plus exotiques ont succédé aux solutions libres plus exotiques avec des passerelles vers les solutions majoritaires.</p>
<p>De IRC à Slack, de MSN à Whatsapp, de XMPP à Matrix, tout semble tellement similaire. (si on excepte que, désormais, 99% de la population utilise ces outils depuis un ordinateur dans sa poche, connecté partout et tout le temps).</p>
<p>Alors, à votre avis. Qu’est-ce qui ne change pas ? Qu’est-ce qui est complètement différent ? Qu’est-ce qui va rester ? Qu’est-ce qui va changer ?</p>
<div><a href="https://linuxfr.org/users/ploum/journaux/comme-une-impression-de-deja-vu.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/125807/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/ploum/journaux/comme-une-impression-de-deja-vu#comments">ouvrir dans le navigateur</a>
</p>
ploumhttps://linuxfr.org/nodes/125807/comments.atomtag:linuxfr.org,2005:Bookmark/30372021-05-05T13:37:13+02:002021-05-05T13:37:13+02:00Facebook bloque une campagne de pubs de Signal sur Instagram<a href="https://signal.org/blog/the-instagram-ads-you-will-never-see/">https://signal.org/blog/the-instagram-ads-you-will-never-see/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/124180/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/jona/liens/facebook-bloque-une-campagne-de-pubs-de-signal-sur-instagram#comments">ouvrir dans le navigateur</a>
</p>
Jonahttps://linuxfr.org/nodes/124180/comments.atomtag:linuxfr.org,2005:Bookmark/29842021-04-21T20:07:22+02:002021-04-21T20:07:22+02:00 Exploiting vulnerabilities in Cellebrite UFED and Physical Analyzer from an app's perspective<a href="https://signal.org/blog/cellebrite-vulnerabilities/">https://signal.org/blog/cellebrite-vulnerabilities/</a> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/124046/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/anonyme/liens/exploiting-vulnerabilities-in-cellebrite-ufed-and-physical-analyzer-from-an-app-s-perspective#comments">ouvrir dans le navigateur</a>
</p>
Anonymehttps://linuxfr.org/nodes/124046/comments.atomtag:linuxfr.org,2005:Diary/397072021-04-10T19:16:49+02:002021-04-10T19:16:49+02:00Signal envoie des signaux inquiétantsLicence CC By‑SA http://creativecommons.org/licenses/by-sa/4.0/deed.fr<p>Bonjour nal,</p>
<p>On a beaucoup entendu parler de <a href="https://fr.wikipedia.org/wiki/Signal_(application)">Signal</a> au début de cette année, en particulier depuis une mise à jour des conditions d'utilisation de <a href="https://fr.wikipedia.org/wiki/WhatsApp">WhatsApp</a> (une application concurrente très utilisée). Un journal en parlait <a href="//linuxfr.org/users/computingfroggy/journaux/signal-la-bonne-alternative-a-whatsapp">en janvier</a>, et de mémoire aussi quelques autres mais que je n'ai pas pris la peine d'aller rechercher.</p>
<p>Il se trouve qu'au début de cette semaine, <a href="https://www.signal.org/blog/help-us-test-payments-in-signal/">une annonce sur le blog de Signal</a> est venue nous apprendre qu'ils sont en train d'intégrer à cette application de messagerie un système de paiement, basé sur une crypto-monnaie du nom de <a href="https://www.mobilecoin.com/">MobileCoin</a>.</p>
<p>Les réactions sont variées. Certains pensent que c'est simplement une décision logique pour rester dans la course, car la plupart des applications de messagerie compétitrices de Signal intègrent un système de paiement. D'autres ne sont pas complètement hostiles à cette nouveauté, mais questionnent la pertinence d'intégrer le système de paiement à l'application de messagerie : cela force en effet celles et ceux qui n'ont pas l'usage de ce système (ou ne veulent pas s'en servir) à avoir son code et potentiellement ses bugs et failles dans la même application, rendant la messagerie potentiellement moins sécurisée, alors que pour l'éditeur de Signal il serait possible de maintenir deux applications distinctes. Enfin, d'autres encore sont très inquiets et pensent que cela signe la fin de l'indépendance de Signal, avec divers soupçons comme :</p>
<ul>
<li>un système de paiement est sujet à plus de législations qu'une messagerie, donc si les deux sont dans la même application, cela pourrait rendre la partie messagerie chiffrée plus vulnérable à des tentatives de contraindre des utilisateurs à révéler leurs messages ;</li>
<li>la crypto-monnaie en question pourrait être un moyen de créer de la valeur artificiellement par spéculation, au profit de ses créateurs et sur le dos des utilisateurs (certains pensent que ce projet d'intégration avec Signal présente un conflit d'intérêts pour le CEO de Signal Messenger LLC, car il est aussi impliqué dans le développement de MobileCoin).</li>
</ul>
<p>Morceaux choisis parmi les réactions inquiètes que j'ai pu lire (en anglais) :</p>
<ul>
<li><a href="https://www.stephendiehl.com/blog/signal.html">Et tu, Signal?</a></li>
<li><a href="https://www.schneier.com/blog/archives/2021/04/wtf-signal-adds-cryptocurrency-support.html">Signal Adds Cryptocurrency Support</a></li>
</ul>
<p>Et toi nal, qu'en penses-tu ?</p>
<div><a href="https://linuxfr.org/users/guillawme/journaux/signal-envoie-des-signaux-inquietants.epub">Télécharger ce contenu au format EPUB</a></div> <p>
<strong>Commentaires :</strong>
<a href="//linuxfr.org/nodes/123919/comments.atom">voir le flux Atom</a>
<a href="https://linuxfr.org/users/guillawme/journaux/signal-envoie-des-signaux-inquietants#comments">ouvrir dans le navigateur</a>
</p>
Guillawmehttps://linuxfr.org/nodes/123919/comments.atom