• Sq chevron_right

      A prelude of some news

      Blue · news.macaw.me / squawk · Monday, 6 November - 16:08

    I kept it quiet yesterday, but it was a big day for me. For the first time ever I was able to send and receive an #omemo encrypted message with my messenger #squawk. It's not really a big deal in general but it's a huge event for me.

    Now to the sack of salt: the actual encryption is happening in #qxmpp library, and it does quite an exotic #omemo2 for now, with absolutely no support of more common types, so, as far as I know the only other messenger that would support this kind of encryption now is #kaidan (that's what I have tested with). Also, for now I don't aim at enabling #omemo for chats, because I don't even know how, but may be that's gonna be my next struggle.

    My work is really far from over: there are buckets of stuff to be done yet. Like key management, trust management, fallbacks, encrypted message display, lots of refactoring, lots of testing, but, hopefully, in a couple of months or so I might be able to release it.

    For the first time I see the light in the end of this tunnel.

    • chevron_right

      Movim 0.22 - Kowal

      Timothée Jaussoin · pubsub.movim.eu / Movim · Sunday, 25 June, 2023 - 16:02 edit · 3 minutes · 15 visibility

    Only a few months after Movim 0.21 - Whipple we are releasing Movim 0.22, codename Kowal.

    This version was more focused on stabilization, cleanup and refactoring but also introduces a couple of new exciting features. It requires PHP8.1+ to work properly.

    Let's dive in!

    Blog privacy toggle

    Already introduced in a previous blog post this new feature allow you to change your blog privacy level between "public" and "subscribers only".

    Global OMEMO toggle

    After some feedback from the community a global #OMEMO toggle was introduced in the settings. OMEMO is therefore disabled by default from this version.

    This decision is especially linked with the current encryption implementation that relies on libsignal-protocol-javascript that is deprecated by their authors. The performances of this library are not that great, especially on mobile devices, which caused lots of accessibility issues for some Movim newcomers.

    For now, no serious alternative are available, if you know one do not hesitate to tell us about it.

    Fixes and improvement around audio-video calls

    Several small tickets (#1212, #1213, #1214) linked to the the audio-video call integration and compatibility with other clients were fixed.

    Missed and refused call events are also now tracked properly and displayed in your contacts conversations.

    Cleaner URLs

    The ? was (finally) removed in front of all the URLs! While being way cleaner it also fixes some issues when #Movim URLs were shared around, especially on some other social-networks. Don't worry about retro-compatibility, existing URLs are redirected to the new format.

    Rewrite of the XEP-0077: In-Band Registration related code

    Movim is supporting XEP-0077 for close than 10 years now and this code was never really refactored since then. All the #XMPP code, and related user flow, were cleaned and upgraded to the latest Movim standard, fixing a few issues in the meantime!

    New Chat bubble design and interaction

    Kowal introduce a totally new way of interacting with the chat bubbles.

    While keeping the small actions icons on desktop it is now possible to simply click (or tap) on the bubbles to open a sub-menu which presents all the actions available.

    This menu allows you to react, retract, reply and copy the message content in one click/tap. Easy!

    The new chat message menu

    Under the hood... or not

    An important refactoring was done to simplify and factorize redundant items in the UI. This brought some big code cleanup, both on the front part (what is taking care of what you see) of Movim but also in the core and XMPP layers. The code was modernized and ported to PHP8.1+ in many places as well.

    Several Pubsub related issues were fixed improving the compatibility with existing XMPP servers such as Prosody or ejabberd (see the related ticket). Movim now detect Pubsub nodes misconfiguration and reconfigure them properly to respect the privacy and settings specified in all the Pubsub related implemented XEPs that it supports.

    This refactoring also brought some small UI improvements such as a new design for the contact status bubbles and a totally new way to handle Contacts and Communities avatars. We are strongly advising you to configure the Picture Proxy Cache on your Web Server when upgrading to greatly improve the page load time.

    Two important security fixes

    CVE-2023-2848 fixes a security issues that allows under certain circumstances to open a #Websocket to Movim from a different domain. It was fixed in this commit.

    CVE-2023-2849 is not directly linked with Movim itself but the related server configuration.

    When the domain that host upload files is the same as where Movim is hosted it is possible to upload a malicious Javascript file and execute it in the Movim sandbox. The attack surface is really minimal but we advise you to ensure that such case cannot happen on your instance. To do so you can use different domains between the two services or force the browser to handle all the uploaded files as attachments and not inline elements using a simple HTTP header:

        add_header Content-Disposition attachment;
    

    What's next?

    The multi-part audio and video-conference feature that was planned for the 0.22 is pushed back to the 0.23. The amount of work planned for that is quite big, therefore it was more relevant to move all the code cleanup and refactoring plans in Kowal and have this milestone before jumping into this new exciting feature set !

    As always, if you find issues or want to share some feedback you have on the project, you can find how to contact us on our official website and our Github.

    That's all folks!

    • chevron_right

      The W Pattern Forex Trading Guide For Beginner

      Alla Traders · Wednesday, 28 December, 2022 - 15:46 edit · 1 minute

    The double bottom or W pattern is the most prevalent chart pattern used in trading. In fact, this pattern is so common that it may be taken as irrefutable evidence by itself that price action is not as totally random as many say. The double bottom pattern is one of the very few that perfectly depicts the market’s direction changing. At the bottom of a downtrend, the double bottom forms itself, offering potential long entries for buyers.

    What Is A Double Bottom (W Pattern)?

    The double bottom pattern is a technical pattern that can be used to identify a likely reversal in the Forex market. The double bottom emerges after an extended move down and can be utilized to discover purchasing opportunities on the way up. Because of the two-touched low and the change in trend direction from downtrend to uptrend, the pattern resembles the letter “W.”

    see the complete blog here Alla Traders

    #forex #stock #crypto #trading #trader #features #thinkpad #postgresql #fediverse #database #apps #zimbabwe #gaming #profanity #xmpp #pipcu #sdr #wow #discussion #chirurgie #tools #ev #rf #instantmessaging #comics #alternativesto #ubuntu #lu #howto #apple #hololive #députés #ecology #chocolat #ft8 #piquetsyndical #8chan #siri #écologie #endurance #how #discord #platforms #dior #rcs #squat #1 #hydroxychloroquine #election #gif #laptops #omemo #hacking #fedora #ethot #compression #potpourri #kaamelott #meme #jitsi #freebsd #feminisme #gajim #animals #sendgnomemoney #métaverse #wordle #fastned #autopilot #cinéma #evolution #ukraine #jabber #sponsor #dessin #rando #africa #entraineur #google #zooarchaeology #community #technology #reddit #movim #ajax #calendar #moderation #snapchat #formation #review #quake #im #attentat #policy #advertising #prosody #abstention #azure #webserver #france #camping #amazon #openwebrx #maps #sncf #lci #darktable #littérature #keyboards #rendement #twitch #eu #projecteur #vieprivée #jpg #dinosaures #hardware #drawing #tyrannosaure #jappix #tgv #pcb #patents #médaille #poezio #animation

    • chevron_right

      Jabber/XMPP Client Kaidan Progress

      debacle · pubsub.movim.eu / berlin-xmpp-meetup · Tuesday, 11 October, 2022 - 18:40

    Jabber/XMPP Client Kaidan Progress

    Topic: Kaidan with OMEMO 2 Encrypted File Sharing, Message Reactions, Chat Markers, Chat State Notifications and Trust Messages

    When? Wednesday, 2022-10-12 18:00 CEST (always 2ⁿᵈ Wednesday of every month)

    Where? In xHain hack+makespace, Grünberger Str. 16, 10243 Berlin

    No live stream and no recording this time, sorry.

    See you there or in our virtual room xmpp:berlin-meetup@conference.conversations.im?join

    #jabber #xmpp #community #xhain #freesoftware #berlin #meetup #federation #kaidan #omemo #omemo2

    • chevron_right

      End to end encryption in Movim - OMEMO is (finally) there!

      Timothée Jaussoin · pubsub.movim.eu / Movim · Wednesday, 15 December, 2021 - 22:01 edit · 7 minutes · 3 visibility

    A few days ago I finally closed the OMEMO encryption ticket on Github. Opened in 2015 it had many twists and turns along the years but I finally found a proper way of integrating it in Movim.

    In this article I'll explain why adding #E2EE (End to End Encryption) was not as easy as with the other #XMPP clients (and more generaly all the chat clients that are using a similar encryption protocol) and how I addressed the issue.

    But before going in the details I'd like to thanks the NLNet Fundation for its financial support in this project. With their help I was able to free-up some time to work on the problem and propose a proper architecture (detailled bellow) for it.

    NLNet Foundation logo

    The result of this work will be released with the upcoming 0.20 version of #Movim. There is still some quirks and whims about it but the base is there and works pretty well.

    End to End encryption in XMPP, a quick overview

    The introduction of Signal in 2015 brought a small revolution into the encryption protocols in the IM ecosystem. The Double Ratchet Algorythm (see the dedicated technical documentation on the Signal website) allowed users to exchange messages between different clients in an “end to end encrypted” way (only user devices themselves know how to encrypt and decrypt messages) with some technical improvements (not detailed here) that made the new protocol a “must have” for all the others IM solutions.

    Today the Double Ratchet Algorithm is used in applications such as WhatsApp or Matrix.

    In the XMPP ecosystem it was primarily pushed by Daniel Gultsch in the Conversations.im client and standardized along the way in the OMEMO XMPP Extension XEP-0384: OMEMO Encryption. Throughout the years many XMPP clients implemented OMEMO, their status can be tracked on the following website Are we OMEMO yet?.

    The OMEMO architecture

    Without going too deep into the technical details the general idea about OMEMO is to generate some keys on each of the user's devices and publish the public ones on their account server.

    Using the keys published on the XMPP user's servers, anyone can then start an encrypted session at any time (the servers are always available) and start to send messages to the desired contact without having to wait.

    Publishing keys and building sessions with OMEMO

    If one of the user's contacts wants to start an encrypted discussion they will first start to get those keys, then build sessions with their secret one and encrypt a message using the freshly built sessions.

    If a user receives a new encrypted message and doesn't have an encryption session to that device, their device will then retrieve the contact keys, build the encryption sessions and start decrypting messages.

    This can be done automatically if the contact trusts blindly the key used or in a more “trusted” way by accepting manually each keys to build the encryption sessions on.

    All the existing XMPP clients are using this simple architecture. XMPP servers are storing their users' #OMEMO public keys and the users are connecting directly using their different devices to build their encrypted sessions.

    The Movim particularity

    But Movim is kind of special. The XMPP connection is actually not maintained on user devices but by the Movim server (built in PHP and running behind a web server such as Apache or nginx, see Movim General architecture on the Wiki). Movim is then processing everything server side, saving the information (articles, contacts and messages) in a SQL Database (PostgreSQL or MySQL) and then showing the result to the Movim users through a lightweight website.

    If a user is connecting on the same Movim instance through several browsers using the same XMPP account all the browsers are then “merged” into one unique XMPP session (called "resource") and all the browsers are synchronized in real time by the Movim server. This is pretty useful to save memory and to prevent Movim to maintain several XMPP connections at the same time for a unique user. This also allows quick disconnection/reconnections, the users can close and reopen their tabs without having to reload the whole XMPP state when they come back after a while (Movim is closing the XMPP session after a day of inactivity).

    End to end encryption actually requires to encrypt and decrypt messages on the user device, this brings several issues:

    • For Movim, the user device is actually a “dumb” browser that only display the messages pre-processed by the Movim server, there is no logic whatsoever browser side
    • A user can use simultaneously several browsers with the same XMPP connection on the same Movim instance
    • All the message processing logic is done server side

    This unique architecture requires a very unique way of adressing the E2EE situation. Hopefully OMEMO offers all the tools needed to handle those cases.

    Split the logic

    The OMEMO extension is actually talking about devices, for a large majority of the XMPP clients a device is connected through a unique XMPP session (one device equal one current XMPP resource in those cases).

    Publishing keys with Movim

    The fact that Movim is sharing a unique session (resource) with several devices (browsers) is actually not an issue in the end. Each browser will then be considered as a unique device on its own, with its own key and its own OMEMO encrypted sessions.

    Building encrypted sessions with Movim

    This brings some interesing results. When a user is connected using the same XMPP account using two different browsers on the same Movim server (also called instance, or pod), an encrypted message sent by the browser Firefox will then directly be decrypted by the browser Chrome without even having to travel through the XMPP network.

    The term “browser” is also defining more than actual browsers (like Firefox, Chrome or Opera). Since we can have private navigation or containers (in Firefox) each time it is seen as a different “browser” on the Movim side (because each context is separated, with a different cookie and different local data).

    So the global idea is to continue to handle the messages server side, push the encrypted message object to the browser, and then implement only the key handling and message encryption-decryption flow browser side. When doing this implementation I actually looked at the Converse.js and JSXC OMEMO implementations, the Movim implementation is really close to the one done on those two clients (I am also re-using the libsignal JavaScript implementation).

    This architecture actually works for the current version of OMEMO (0.3.0) where only the body is encrypted. The upcoming versions are looking to encrypt a larger part of the XML stanza. This will be way more difficult to handle for Movim, as it will require to decrypt messages browser side and then implement a second parser, this time in JavaScript (everything is parsed in PHP using libxml at the moment).

    if (textarea.dataset.encryptedstate == 'yes') {
        // Try to encrypt the message
        let omemo = ChatOmemo.encrypt(jid, text, Boolean(textarea.dataset.muc));
        if (omemo) {
            omemo.then(omemoheader => {
                ...
                xhr = Chat_ajaxHttpDaemonSendMessage(jid, tempId, muc, null, replyMid, mucReceipts, omemoheader);
                ...
            });
        }
    } else {
        xhr = Chat_ajaxHttpDaemonSendMessage(jid, text, muc, null, replyMid, mucReceipts);
        ...
    }
    

    This little JavaScript Movim code extract presents the differences in handling encrypted and unencrypted messages. The text variable is containing the clear text version of the message. When the body is encrypted it is then calling the same method as for a clear text message.

    This method is actually a wrapper generated by the RPC (Remote Procedure Call) Movim server core. Once this function is called an Ajax called is made and the rest of the flow is handled server side. The encrypted body, and generated OMEMO headers passed will be injected in a freshly generated XMPP XML <message>.

    Keep the messages in the local database

    With the separation of the logic it was then required to keep a copy of the decrypted messages browser side.

    To do that an IndexedDB database is used. This database is quite simple and only contains a key-value store, where the key is the message id (the same as the one in the Movim server SQL server databse) and the value the plaintext message.

    • When a message is decrypted the plaintext body is then stored in this database.
    • When the user sends an encrypted message, the original text is also saved in this database.
    • If a message cannot be decrypted, the message key is still saved in the browser database with a false value. This prevents Movim to try to decrypt several times a message, knowing that the decryption will fail each time in the end.

    Using this database, when a chat is loaded, all the messages are then sent chronologically from the server, passed trough a little bit of code that will lookup the state of all messages and then decrypt the ones that are not decrypted yet, the already decrypted messages are then shown, or an error is displayed for those that cannot be decrypted.

    To sum up

    In this article I tried to present you what limitations I faced when trying to implement end to end encryption within Movim and what architectural and technical solutions were used to address them.

    The current solution seems to fit and bring all the desired features to Movim without too much downsides. The feature can now be considered as done and will be released soon. And as always, lots of small fixes and adjustments will be integrated to polish it afterward.

    That's all folks!

    edhelas

    • favorite

      9 Like

      Kris, Jorge Luis, chipmnk, Matt, quatta, Duc Nguyen, oppose_brainwashing_scams, Sal, Bigou, le VRAI!

    • 1 Comments

    • 1 December, 2022 chipmnk

      nice idea to show the unreadable text as a placeholder before message decryption. i like it a lot CRYSTAL BALL and yes, really bon boulot ! SMILING FACE WITH SUNGLASSES

    https://upload.movim.eu/files/386deb01b4d6c7831131d61eb8ea4eaf309fe95e/UNYR6bXgdUoO/284765628_03434deda26c1126fa79535578d09f4a.png

    monocles chat is an Open Source XMPP/Jabber Messenger for Android

    blabber.im Messenger App Ein Jabber/XMPP Client für Android Smartphones, der für ein einzigartiges mobiles Erlebnis optimiert wurde.

    #xmpp #OMEMO #e2ee #Encryption #Jabber #monocles #blabber #conversations

    • chevron_right

      Debian - Profanity - OMEMO

      Stefan · Saturday, 18 September, 2021 - 06:35 edit · 1 minute

    Profanity in Debian GNU/Linux

    In Debian 11 ("Bullseye") ist Profanity 0.10.0 verfügbar. Installiert werden kann es mit dem Befehl apt install profanity. Profanity ist ein ncurses basierter XMPP Client.

    Schlüssel generieren

    Hat man sich in profanity erfolgreich mit seinem XMPP Account angemeldet, muss man zur Verwendung von OMEMO das Schlüsselmaterial erzeugen lassen. Dies kann mit dem Befehl /omemo gen erstellt werden.

    Jedes OMEMO fähiges Gerät hat eine accountweite eindeutige Device-ID sowie einen Fingerabdruck. In der Profanity Console (/win 1) lassen sich mit dem Befehl /omemo fingerprint alle eigenen Fingerabdrücke anzeigen.

    07:58:17 - Your OMEMO fingerprint: 5284ea0c-42d698b8-9e8bc07d-daa9c4fb-d9d02814-53847b59-7b85479a-e03fca20
    07:58:17 - user@domain.tld's OMEMO fingerprint:                                                       
               3cb71f98-3e167abf-ae8352d3-3dd5f6d9-bc9f74fa-95e787af-fed55fa5-0a62315b (trusted)              
    07:58:17 - user@domain.tld's OMEMO fingerprint:                                                       
               3641e6ba-fddd542f-cfd69a4c-e5907193-d0682001-28a4c1b5-4971b4ea-a057b717   
    

    Schlüssel vertrauen

    Vielleicht möchtest du Nachrichten, die du verschickst, auch auf deinen anderen Geräten lesen? Dann kannst du mit folgendem Befehl deinem Schlüssel vertrauen.

    /omemo trust user@domain.tld 3641e6ba-fddd542f-cfd69a4c-e5907193-d0682001-28a4c1b5-4971b4ea-a057b717
    

    PS: Du musst den Key nicht per Hand eintragen. profanity kann Autovervollständigung via [TAB]-Taste.

    Dieses vorgehen lässt sich auch auf die Schlüsselverwaltung deiner Kontaktpersonen anwenden.

    /omemo fingerprint buddy@domain.tld 
    

    Chatten

    Ein Fenster zu deinem Chatpartner lässt sich mit dem Befehl /msg Nickname oder /msg buddy@domain.tld starten. Im geöffneten Chatdialog kann auf die JID bei der Abfrage der Fingerabdrücke verzichtet werden. Ein einfaches /omemo fingerprint ist ausreichen, um noch mal über die Schüssel des Partners drüber zu gucken.

    Mit dem Befehl /omemo start wird die OMEMO Verschlüsselung aktiviert. Wurde eine OMEMO für einen Kontakt aktiviert, wird diese Informationen in den Account-Einstellungen gespeichert, um in Zukunft auch OMEMO direkt zu aktivieren. Beendet werden kann sich Session mit /omemo end. Das Verhalten kann mit dem Befehl /omemo policy beeinflusst werden.

    Dateitransfer

    Dateitransfer via OMEMO lässt sich normal mit /sendfile und /url save bzw. /url open verwenden.

    Ausblick

    Debian bookworm verfügt über die Version 0.11 von profanity. Hierzu werde ich einen eigenen Beitrag machen.

    Viel Spaß beim chatten!

    #Debian #Profanity #OMEMO #Bullseye #XMPP