Comment elle commence ton histoire ?

Pidgin est cassé. C'est pas nouveau, c'est régulièrement répété. L'avant dernière fois que je l'ai lu, c'était dans le très bon article everything is broken (en|fr) de Quinn Norton.

Sur OpenBSD, régulièrement, quand OTR intervient pour générer une clé ou authentifier un contact, pouf, il segfault. Rassurant, non ?

La dernière fois, c'était dans un tweet de Christopher Soghoian et dans lequel, il dit du bien (dire qu'il peut être utilisé par des journaleux, c'est dire du bien :)) de xmpp-client d'Adam Langley (dev qui bosse chez google, qui bosse sur la sécurité de chrome pour la stack SSL/TLS, qui a forké openssl en boringssl etc).

J'ai eu envie de tester, d'où cet article.

Mais pourquoi ce client, y a plein de client xmpp

Mon besoin est simple "OTR". Lecteur, tu rigoles peut-être, mais juste ces trois lettres en enlèvent une grosse partie.

C'est pour ça par exemple, que je n'utilise pas bitlbee.

Et ne pas utiliser OTR ?

Nope, nope nope.

Je ne fais pas confiance à tls/ssl pour xmpp. Pas dans un cas général, mais dans mon cas. Parce que la version de prosody que j'utilise est vieille, que ceci que cela, que le s2s est sujet à du mitm etc.

Mais bon, c'est pas une nouveauté que le chiffrement bout à bout, est une nécessité.

 “Encryption works. Properly implemented strong crypto systems are
 one of the few things that you can rely on. Unfortunately,
 endpoint security is so terrifically weak that NSA can frequently
 find ways around it.”

D'ailleurs, on en revient à ce que je disais avant "endpoint security is so terrifically weak" COUCOU PIDGIN §§§.

Donc ceinture, bretelle, toussa toussa. Je veux OTR.

ok ok, mais y a plus d'un client xmpp qui gère OTR

On va lister ceux qui gèrent OTR d'après https://otr.cypherpunks.ca/software.php

  • adium == libpurple, donc même chose que pidgin
  • climm, mcabber, centerim et profanity j'avoue j'ai pas testé, mais de ce que je vois sur leurs sites, ça ne me fait pas rêver
  • kopete ouais ça marchouille, avec le plaisir que comme tous softs kde/gnome tu bouffes trois brouettes de dépendances, merci bisous
  • jitsi == java ... désolé, firefox a déjà pris toute la ram

via plugins :

  • pidgin, ouais, on sait ce que ça vaut
  • irssi euh ouais, j'ai tenté d'utiliser, mmmh j'ai pas particulièrement aimé, je ne sais plus trop pourquoi
  • psi j'ai testé y a longtemps, la gui n'était pas intuitive, j'arrivais à rien
  • gajim euh, hum

Je suis sans doute difficile.

Donc xmpp-client

C'est un client cli-only, donc pas d'interface graphique.

On commence par installer les paquets nécessaires :

pkg_add go mercurial

On set un GOPATH, dans mon cas :

export GOPATH=/home/myuser/gocode

Ensuite on applique la commande magique :

go get github.com/agl/xmpp-client

on se retrouve avec dans le gopath :

$ ls gocode/
bin/ pkg/ src/

dans bin il y a l'éxécutable qu'on va lancer.

Une fois l'exécutable lancé, il nous pose des questions et génère le fichier de config dans ~/.xmpp-client

On va modifier deux choses.

La première

La première est l'ajout du mot de passe. agl ne le fait pas pour être sûr que la personne qui le fait sait qu'il met son mot de passe en clair dans un fichier sur son disque. Mais si quelqu'un a accès à ce fichier, j'aurais bien d'autres problèmes avant. Et de toute façon j'ai du FDE.

On ajoute donc la ligne

"Password": "f6fab8747331ca8fc8b7fdabf81f822f256d647e",

Hahaha tu as vu, il est trop con, il a mis son vrai mot de passe !!1! openssl rand -hex 20 est ton ami.

La deuxième

La deuxième chose, j'utilise ma propre maf^WAC, et donc avec xmpp-client, s'il ne trouve pas l'AC dans /etc/ssl/jesaispasquelfichieràlacon, il ne veut pas se connecter. Soit, on jette un rapide coup d'oeil dans les sources

ServerCertificateSHA256 string `json:",omitempty"`

ça tombe bien, je les donne.

On rajoute donc (dans mon cas, tu es invité·e à changer les valeurs chez toi) :

"ServerCertificateSHA256": "5c5f28ea20b09c71fca7442569b8d56f11907a1ab0ce2ada998755b1d755b207"

Et voilà ça se connecte. On parle qqn en mettant sont adresse par exemple randomuser@chown.me et le prompt va passer de ">" à "randomuser@chown.me"

Le client permet de faire pas mal de chose :

> /help
* (9:51PM) /add <user>                            Request a subscription to another user's presence
* (9:51PM) /away                                  Set your status to Away
* (9:51PM) /chat                                  Set your status to Available for Chat
* (9:51PM) /confirm <user>                        Confirm an inbound subscription request
* (9:51PM) /deny <user>                           Deny an inbound subscription request
* (9:51PM) /dnd                                   Set your status to Busy / Do Not Disturb
* (9:51PM) /help                                  List known commands
* (9:51PM) /nopaste                               Stop interpreting text verbatim
* (9:51PM) /online                                Set your status to Available / Online
* (9:51PM) /otr-auth <user> <secret>              Authenticate a secure peer with a mutual, shared secret
* (9:51PM) /otr-authoob <user> <fingerprint>      Authenticate a secure peer with out-of-band fingerprint verification
* (9:51PM) /otr-authqa <user> <question> <secret> Authenticate a secure peer with a question and answer
* (9:51PM) /otr-end <user>                        End an OTR session
* (9:51PM) /otr-info                              Print OTR information such as OTR fingerprint
* (9:51PM) /otr-start <user>                      Start an OTR session with the given user
* (9:51PM) /paste                                 Start interpreting text verbatim
* (9:51PM) /quit                                  Quit the program
* (9:51PM) /rostereditdone                        Load the edited roster from disk
* (9:51PM) /rosteredit                            Write the roster to disk
* (9:51PM) /roster [--online]                     Display the current roster
* (9:51PM) /statusupdates                         Toggle if status updates are displayed
* (9:51PM) /version <user>                        Ask a Jabber client for its version
* (9:51PM) /xa                                    Set your status to Extended Away

La troisième

Et la troisième chose, c'est juste une erreur off-by-one.

Et l'utilisation ?

Déjà ça change de mon client graphique. Avec pidgin, l'icone se met en haut à droite dans ma barre des tâches de xfce et l'avantage c'est que quand je reçois un message, l'icone change. Le problème c'est quand j'utilise une application en plein-écran (à peu près toute, en fait), je ne la vois pas.

Avec xmpp-client, le problème sera le même, parce que je le lance dans un onglet du terminal et même si avec xfce la couleur des titres des term changent selon l'activité de ce dernier, si je ne suis pas dans mon espace de travail consacré au terminal je ne le verrais pas. Cela dit, je ne crois pas que mes contacts doivent me contacter en toute urgence.

Par rapport à pidgin où une fenêtre est dédiée à l'affichage des contacts et une fenêtre pour les conversations (chaque conversation a lieu dans un onglet), sur xmpp-client, tout se passe au même endroit, ce qui est un peu surprenant : on peut avoir à la suite des messages de différentes personnes, les réponses qu'on envoie et les changements de statuts des gens (connectés, déconnectés et away).